class Odnoklassniki::Request

Public Class Methods

new(credentials) click to toggle source
# File lib/odnoklassniki/request.rb, line 9
def initialize(credentials)
  @access_token    = credentials[:access_token]
  @client_secret   = credentials[:client_secret]
  @application_key = credentials[:application_key]
end

Public Instance Methods

get(path, params={}) click to toggle source

Performs a get request

# File lib/odnoklassniki/request.rb, line 16
def get(path, params={})
  respond perform_request(:get, path, params)
end
post(path, params={}) click to toggle source

Performs post request

# File lib/odnoklassniki/request.rb, line 21
def post(path, params={})
  respond perform_request(:post, path, params)
end

Private Instance Methods

error(code, body) click to toggle source
# File lib/odnoklassniki/request.rb, line 67
def error(code, body)
  if ![200, 201].include?(code)
    if klass = Odnoklassniki::Error::ERRORS[code]
      klass.from_response(body)
    end
  else
    if body.is_a?(Hash) && body['error_code']
      Odnoklassniki::Error::ClientError.from_response(body)
    end
  end
end
fail_or_return_body(code, body) click to toggle source
# File lib/odnoklassniki/request.rb, line 61
def fail_or_return_body(code, body)
  error = error(code, body)
  fail(error) if error
  body
end
perform_request(method, path, params) click to toggle source
# File lib/odnoklassniki/request.rb, line 27
def perform_request(method, path, params)
  signed_params = signed params

  connection.send(method) do |req|
    req.url path
    if method == :get
      req.params = signed_params
    else
      req.body = signed_params unless params.empty?
    end
  end
end
respond(response) click to toggle source
# File lib/odnoklassniki/request.rb, line 40
def respond(response)
  parsed_body = \
    begin
      if response.body.nil? || response.body == ''
        return response.body
      else
        MultiJson.load(response.body)
      end
    rescue MultiJson::DecodeError
      #Есть случаи отдачи кривого JSON от одноклассников
      gsubed = response.body.
                 gsub(/[^"]}/, '"}').
                 gsub(/([^"}]),"([^}])/, '\1","\2')
      MultiJson.load(gsubed)
    end

  fail_or_return_body(response.status, parsed_body)
rescue MultiJson::DecodeError => e
  raise Odnoklassniki::Error::ClientError.new(e.message)
end
signature(params) click to toggle source
# File lib/odnoklassniki/request.rb, line 84
def signature(params)
  sorted_concatenated_params =
    Hash[params.sort].map { |k, v| "#{k}=#{v}" }.join
  secret_part = Digest::MD5.hexdigest("#{@access_token}#{@client_secret}")
  Digest::MD5.hexdigest("#{sorted_concatenated_params}#{secret_part}")
end
signed(params) click to toggle source
# File lib/odnoklassniki/request.rb, line 79
def signed(params)
  params = params.merge(application_key: @application_key)
  params.merge(sig: signature(params), access_token: @access_token)
end