class ExmoApi::Request

Attributes

api_method[R]
config[W]

Public Class Methods

new(api_method, params = {}) click to toggle source
# File lib/exmo_api/request.rb, line 12
def initialize(api_method, params = {})
  @api_method = api_method
  @params = params
end

Public Instance Methods

perform() click to toggle source
# File lib/exmo_api/request.rb, line 17
def perform
  JSON.parse response.body.to_s
end
response() click to toggle source
# File lib/exmo_api/request.rb, line 21
def response
  @response ||= http.request(build_request)
end

Private Instance Methods

build_request() click to toggle source
# File lib/exmo_api/request.rb, line 33
def build_request
  request.body = post_data

  request
end
config() click to toggle source
# File lib/exmo_api/request.rb, line 68
def config
  @config ||= ExmoApi.configuration
end
headers() click to toggle source
# File lib/exmo_api/request.rb, line 51
def headers
  return {} if public_method?

  digest = OpenSSL::Digest.new('sha512')
  signature = OpenSSL::HMAC.hexdigest(digest, config.api_secret, post_data)

  { 'Sign' => signature, 'Key' => config.api_key }
end
http() click to toggle source
# File lib/exmo_api/request.rb, line 27
def http
  @http ||= Net::HTTP.new(uri.host, uri.port)
  @http.use_ssl = true if uri.scheme == 'https'
  @http
end
params() click to toggle source
# File lib/exmo_api/request.rb, line 43
def params
  @params.merge(nonce: Time.now.strftime('%s%6N'))
end
post_data() click to toggle source
# File lib/exmo_api/request.rb, line 39
def post_data
  @post_data ||= URI.encode_www_form(params)
end
public_method?() click to toggle source
# File lib/exmo_api/request.rb, line 60
def public_method?
  config.public_api_methods.include?(api_method.to_sym)
end
request() click to toggle source
# File lib/exmo_api/request.rb, line 47
def request
  @request ||= Net::HTTP::Post.new(uri.path, headers)
end
uri() click to toggle source
# File lib/exmo_api/request.rb, line 64
def uri
  URI.parse([config.api_endpoint, api_method].join('/'))
end