Sha256: 40adc0775c1d356a4ace38e8bcd7661f7dc336b3fce247a34a5eee27db47eae8

Contents?: true

Size: 1.92 KB

Versions: 2

Compression:

Stored size: 1.92 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

	  puts self.class.encode(parameters)


	  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

2 entries across 2 versions & 1 rubygems

Version Path
pagarme-1.2 lib/pagarme/request.rb
pagarme-1.1 lib/pagarme/request.rb