class Andpush::Client

Constants

DEFAULT_OPTIONS
HTTPS

Attributes

domain[R]
proxy_addr[R]
proxy_password[R]
proxy_port[R]
proxy_user[R]
request_handler[R]

Public Class Methods

new(domain, proxy_addr: nil, proxy_port: nil, proxy_user: nil, proxy_password: nil, request_handler: RequestHandler.new, **options) click to toggle source
# File lib/andpush/client.rb, line 10
def initialize(domain, proxy_addr: nil, proxy_port: nil, proxy_user: nil, proxy_password: nil, request_handler: RequestHandler.new, **options)
  @domain = domain
  @proxy_addr = proxy_addr
  @proxy_port = proxy_port
  @proxy_user = proxy_user
  @proxy_password = proxy_password
  @interceptors = []
  @observers = []
  @request_handler = request_handler
  @options = DEFAULT_OPTIONS.merge(options)

  register_interceptor(JsonSerializer.new)
  register_observer(ResponseHandler.new)
  register_observer(JsonDeserializer.new)
end

Public Instance Methods

push(body, query: {}, headers: {}, **options) click to toggle source
# File lib/andpush/client.rb, line 36
def push(body, query: {}, headers: {}, **options)
  request(Net::HTTP::Post, uri('/fcm/send', query), body, headers, method: :push, **options)
end
register_interceptor(interceptor) click to toggle source
# File lib/andpush/client.rb, line 26
def register_interceptor(interceptor)
  @interceptors << interceptor
  self
end
register_observer(observer) click to toggle source
# File lib/andpush/client.rb, line 31
def register_observer(observer)
  @observers << observer
  self
end

Private Instance Methods

request(request_class, uri, body, headers, options = {}) click to toggle source
# File lib/andpush/client.rb, line 62
def request(request_class, uri, body, headers, options = {})
  uri, body, headers, options = @interceptors.reduce([uri, body, headers, @options.merge(options)]) { |r, i| i.before_request(*r) }

  response = begin
    request_handler.call(request_class, uri, headers, body, proxy_addr, proxy_port, proxy_user, proxy_password, options)
  rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError, Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError => e
    raise NetworkError, "A network error occurred: #{e.class} (#{e.message})"
  end

  @observers.reduce(response) { |r, o| o.received_response(r, options) }
end
uri(path, query = {}) click to toggle source
# File lib/andpush/client.rb, line 74
def uri(path, query = {})
  uri = URI.join(domain, path)
  uri.query = URI.encode_www_form(query) unless query.empty?
  uri
end