Sha256: 812d872a60d6ef2c82ed8a78094224c71add518b3af9e557f8d8f6055016d8ad

Contents?: true

Size: 1.88 KB

Versions: 7

Compression:

Stored size: 1.88 KB

Contents

require 'uri'
require 'rest_client'
require 'multi_json'
require File.join(File.dirname(__FILE__), '.', 'util')
require File.join(File.dirname(__FILE__), '.', 'errors')

module PagarMe
  class Request
	attr_accessor :path, :method, :parameters, :headers

	def initialize(path, method)
	  self.path = path
	  self.method = method
	  self.parameters = {}
	  self.headers = {}
	end

	def self.encode(params)
	  Util.normalize_params(params).to_params
	end

	def run
	  unless PagarMe.api_key
		raise PagarMeError.new("You need to configure a API key before performing requests.")
	  end

	  self.headers =  {}

	  parameters = self.parameters.merge({
		:api_key => PagarMe.api_key
	  })
	  error = nil

	  begin
		response = RestClient::Request.execute({
		  :method => self.method,
		  :url => PagarMe.full_api_url(self.path),
		  :headers => self.headers,
		  :open_timeout => 30,
		  :payload => self.class.encode(parameters),
		  :timeout => 90,
		  :verify_ssl => false # TODO: change to verify SSL
		})
	  rescue SocketError => e
		error = "Error connecting to server (#{e.message})."
	  rescue NoMethodError => e
		if e.message =~ /\WRequestFailed\W/
		  raise ResponseError.new("Unexpected response code (#{e.inspect}).")
		else
		  raise
		end
	  rescue RestClient::ExceptionWithResponse => e
		parsed_error = parse_json_response(e.http_body)
		if parsed_error['errors']
		  error = parsed_error
		  raise PagarMeError.initFromServerResponse(error)
		else
		  raise PagarMeError.new(e.http_body)
		end
	  rescue RestClient::Exception, Errno::ECONNREFUSED => e
		error = "Error connecting to server: connection refused"
	  end

	  raise ConnectionError.new(error) if error

	  parse_json_response(response.body)
	end

	private

	def parse_json_response(response)
	  begin
		MultiJson.load(response)
	  rescue MultiJson::LoadError => e
		raise PagarMeError.new("Server response is not a valid JSON.")
	  end
	end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
pagarme-1.9.1 lib/pagarme/request.rb
pagarme-1.9 lib/pagarme/request.rb
pagarme-1.8 lib/pagarme/request.rb
pagarme-1.7 lib/pagarme/request.rb
pagarme-1.5 lib/pagarme/request.rb
pagarme-1.4 lib/pagarme/request.rb
pagarme-1.3 lib/pagarme/request.rb