class MetricaApi::Request

Yandex Metrica request

Attributes

options[R]
params[R]

Public Class Methods

call(options, params = {}) click to toggle source
# File lib/metrica_api/request.rb, line 7
def self.call(options, params = {})
  Request.new(options, params).call
end
new(options, params = {}) click to toggle source
# File lib/metrica_api/request.rb, line 11
def initialize(options, params = {})
  @options = options
  @params = params
end

Public Instance Methods

call() click to toggle source
# File lib/metrica_api/request.rb, line 16
def call
  execute!.tap do |response|
    if logger
      logger << full_url
      logger << response
    end
  end
rescue RestClient::Unauthorized, RestClient::Forbidden,
       RestClient::BadRequest, RestClient::ResourceNotFound => e
  raise MetricaApi::RequestError,
        "url: #{full_url}, original: #{e.message}"
rescue SocketError => e
  raise MetricaApi::ConnectionError, e.message
end

Private Instance Methods

base_url() click to toggle source
# File lib/metrica_api/request.rb, line 62
def base_url
  @_base_url ||= begin
    api_section = options[:api_section]
    version = options[:v] || DEFAULT_VERSION
    method = options[:method]
    format = options[:format] || DEFAULT_FORMAT
    "#{API_HOST}/#{api_section}/#{version}/#{method}.#{format}"
  end
end
execute!() click to toggle source
# File lib/metrica_api/request.rb, line 35
def execute!
  RestClient::Request.execute(rest_client_options)
end
full_url() click to toggle source
# File lib/metrica_api/request.rb, line 52
def full_url
  "#{base_url}?#{query}"
end
logger() click to toggle source
# File lib/metrica_api/request.rb, line 48
def logger
  MetricaApi.logger
end
query() click to toggle source
# File lib/metrica_api/request.rb, line 56
def query
  params.map do |key, value|
    [CGI.escape(key.to_s), '=', CGI.escape(value.to_s)]
  end.map(&:join).join('&')
end
rest_client_options() click to toggle source
# File lib/metrica_api/request.rb, line 39
def rest_client_options
  {
    method: :get,
    url: base_url,
    headers: { params: params, 'Authorization' => "OAuth #{options.fetch(:oauth_token)}" },
    log: MetricaApi.logger
  }.compact
end