class LittleSMS::Component

Attributes

component[R]

Public Class Methods

new(component, api_user, api_key) click to toggle source
# File lib/little_sms/component.rb, line 14
def initialize(component, api_user, api_key)
  @api_uri = URI.parse("https://littlesms.ru:443/api/")
  @api_user, @api_key = api_user, api_key
  @component = component # Component name. E.g. message or user.
end

Public Instance Methods

method_missing(name, *args) click to toggle source
# File lib/little_sms/component.rb, line 20
def method_missing(name, *args)
  request_api_method(name, args[0])
end

Private Instance Methods

request_api_method(method, options = {}) click to toggle source
# File lib/little_sms/component.rb, line 25
def request_api_method(method, options = {})
  options[:sign] = sign_request(options || {})
  options[:user] = @api_user

  uri = @api_uri.merge("#{@component}/#{method}")
  req = Net::HTTP::Post.new(uri.path)
  req.set_form_data(options.delete_if {|k, v| k == :key})

  uri.scheme, uri.port, use_ssl = if LittleSMS.use_ssl
    ["https", 443, true]
  else
    ["http", 80, false]
  end
  res = Net::HTTP.new(uri.host, uri.port)
  res.use_ssl = use_ssl

  case res = res.start {|http| http.request(req) }
  when Net::HTTPSuccess, Net::HTTPRedirection
    return Responce.new(JSON.parse(res.body))
  else
    res.error!
  end
end
sign_request(options) click to toggle source
# File lib/little_sms/component.rb, line 49
def sign_request(options)
  sorted_options = options.map{|k, v| [k.to_s, v]}.sort.inject(""){|str, value| str += value[1].to_s}
  Digest::MD5.hexdigest(Digest::SHA1.hexdigest("#{@api_user}#{sorted_options}#{@api_key}"))
end