Module: YandexApiDirect::Call

Included in:
DirectService
Defined in:
lib/yandex_api_direct/call.rb

Instance Method Summary collapse

Instance Method Details

#call(method_name, params = {}) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
# File 'lib/yandex_api_direct/call.rb', line 3

def call(method_name, params = {})
	http(method_name, params) do |response|
      raise YandexApiDirect::MethodCallError, response.body unless response.is_a?(Net::HTTPSuccess)
      json = response.body
      raise YandexApiDirect::MethodCallError, 'Response could not be empty' if json.nil? || json.empty?
		parsed_json = JSON.parse(json, symbolize_names: true)
      raise YandexApiDirect::MethodCallError, json if is_error?(parsed_json)
      raise YandexApiDirect::MethodCallError, 'Response should include key named :result' unless parsed_json.has_key?(:result)
		parsed_json[:result]
    end
end

#headersObject



35
36
37
38
39
40
# File 'lib/yandex_api_direct/call.rb', line 35

def headers
	{
		'Authorization' => "Bearer #{access_token}",
		'Content-Type' => 'application/json; charset=utf-8'
	}
end

#http(method_name, params = {}) {|( Net::HTTP.start(uri.hostname, uri.port, use_ssl: true).request(req) )| ... } ⇒ Object

Yields:

  • (( Net::HTTP.start(uri.hostname, uri.port, use_ssl: true).request(req) ))


15
16
17
18
19
20
21
22
# File 'lib/yandex_api_direct/call.rb', line 15

def http(method_name, params = {})
  uri = URI(method_url(method_name))
  req = Net::HTTP::Post.new(uri, headers)
			req.body = params.to_json
  yield (
Net::HTTP.start(uri.hostname, uri.port, use_ssl: true).request(req)
			)
end

#is_error?(parsed_json) ⇒ Boolean

Returns:

  • (Boolean)


31
32
33
# File 'lib/yandex_api_direct/call.rb', line 31

def is_error?(parsed_json)
  parsed_json.has_key?(:error)
end

#method_url(method_name) ⇒ Object



24
25
26
27
28
29
# File 'lib/yandex_api_direct/call.rb', line 24

def method_url(method_name)
  if method_name.nil? || method_name.empty?
    raise ArgumentError, 'Method name could not be empty'
  end
  "#{base_url}/#{method_name}"
end