class Baidu::Push::Client

Attributes

config[RW]
logger[RW]

Public Class Methods

setup(options = {api_key: nil, secret_key: nil}) click to toggle source
# File lib/baidu/push/client.rb, line 7
def self.setup(options = {api_key: nil, secret_key: nil})
  raise 'api_key can not be nil.' unless options[:api_key]
  raise 'secret_key can not be nil.' unless options[:secret_key]
  md5 = Digest::MD5.hexdigest([options[:api_key], options[:secret_key]].join)
  instance_variable_get("@client_#{md5}") ||
      instance_variable_set("@client_#{md5}", begin
                                              config = Configuration.new
                                              config.api_key = options[:api_key]
                                              config.secret_key = options[:secret_key]
                                              client = self.new
                                              client.config = config
                                              client.logger = options[:logger]
                                              client
                                            end)
end

Public Instance Methods

push_msg(message) click to toggle source
# File lib/baidu/push/client.rb, line 27
def push_msg(message)
  raise 'invalid baidu push message' unless message.is_a?(Baidu::Push::Message)
  attr = message.non_nil_attributes
  attr.merge!(apikey: config.api_key, method: __method__)
  rest_api.connection.post do |req|
    req.url "#{rest_api.base_path}/channel"
    req.params = attr.merge(sign: get_sign('POST', "#{rest_api.default_domain}#{rest_api.base_path}/channel", attr))
  end
end
rest_api() click to toggle source
# File lib/baidu/push/client.rb, line 23
def rest_api
  @api ||= API.new(logger: logger)
end

Private Instance Methods

get_sign(http_method, url, params) click to toggle source
# File lib/baidu/push/client.rb, line 38
def get_sign(http_method, url, params)
  es = [http_method.to_s.upcase, url, params.sort.map { |x| "#{x[0]}=#{x[1]}" }, config.secret_key]
  Digest::MD5.hexdigest(CGI.escape(es.flatten.join))
end