class Repro::Api::Client
Constants
- API_ENDPOINT
- API_VERSION
- VERSION
Attributes
options[R]
Public Class Methods
new(token, opts = {})
click to toggle source
# File lib/repro/api/client.rb, line 17 def initialize(token, opts = {}) @options = opts.merge(token: token, method: 'post') end
Public Instance Methods
endpoint()
click to toggle source
# File lib/repro/api/client.rb, line 47 def endpoint @options[:endpoint] || API_ENDPOINT end
push_deliver(push_id, user_ids, opts = {})
click to toggle source
/push/:push_id/deliver @param [String] push_id Push ID in Repro
@param [Array] user_ids UserIDs to send push notification @option opts [String] :body Message body for push notification. (required) @option opts [String] :title Title for push notification @option opts [Integer] :badge Badge number @option opts [String] :sound Sound file name for notification @option opts [String] :url Custom url or Deep Link @option opts [Hash] :attachment Attachment for rich push. Hash must have keys :type and :url.
# File lib/repro/api/client.rb, line 30 def push_deliver(push_id, user_ids, opts = {}) raise ArgumentError, ':body is required.' unless opts[:body] opts[:path] = "/push/#{push_id}/deliver" body = { audience: { user_ids: user_ids } } body[:notification] = {custom_payload: build_payload(opts)} opts[:body] = body send_request(opts) end
token()
click to toggle source
# File lib/repro/api/client.rb, line 39 def token @options[:token] end
user_agent()
click to toggle source
# File lib/repro/api/client.rb, line 43 def user_agent @options[:user_agent] || "Repro Ruby Client/#{VERSION}" end
Private Instance Methods
build_payload(opts)
click to toggle source
# File lib/repro/api/client.rb, line 53 def build_payload(opts) payload = { aps: { alert: {} }, data: {} } payload[:data][:app_body] = opts[:body] payload[:data][:app_title] = opts[:title] payload[:aps][:alert][:body] = opts[:body] payload[:aps][:alert][:title] = opts[:title] payload[:aps][:badge] = opts[:badge] if opts[:badge] payload[:aps][:sound] = opts.key?(:sound) ? opts[:sound] : 'default' if opts[:url] payload[:data][:app_url] = opts[:url] payload[:rpr_url] = opts[:url] end if opts[:attachment] payload[:data][:app_picture] = opts[:attachment] payload[:aps]['mutable-content'] = 1 payload[:rpr_attachment] = opts[:attachment] end JSON.generate(payload) end
call_api(opts)
click to toggle source
# File lib/repro/api/client.rb, line 85 def call_api(opts) if opts.delete(:method) == 'post' request_url = prepare_url(path: opts.delete(:path)) request = prepare_request(request_url, body: opts.delete(:body)) Net::HTTP.start(request_url.host, request_url.port, use_ssl: true) do |http| http.request(request) end else request_url = prepare_url(opts) Net::HTTP.get_response(request_url) end end
prepare_request(uri, opts)
click to toggle source
# File lib/repro/api/client.rb, line 98 def prepare_request(uri, opts) request = Net::HTTP::Post.new(uri.path) request['Accept'] = 'application/json' request['Content-Type'] = 'application/json' request['X-Repro-Token'] = token request['User-Agent'] = user_agent request.body = JSON.generate(opts[:body]) request end
prepare_url(opts)
click to toggle source
# File lib/repro/api/client.rb, line 108 def prepare_url(opts) path = opts.delete(:path) query_string = opts.empty? ? '' : '?' + URI.encode_www_form(opts) URI.parse(endpoint + path + query_string) end
send_request(opts)
click to toggle source
# File lib/repro/api/client.rb, line 73 def send_request(opts) opts = options.merge(opts) if options http_response = call_api(opts) res = Response.new(http_response) unless http_response.is_a? Net::HTTPSuccess err_msg = "HTTP Response: #{res.code} #{res.message}" err_msg += " - #{res.error}" if res.error raise Repro::Api::RequestError, err_msg end res end