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