module Postcodes
Attributes
api_key[RW]
base_url[RW]
version[RW]
Public Class Methods
request(method, path, params = {})
click to toggle source
# File lib/postcodes.rb, line 17 def self.request(method, path, params = {}) unless @api_key raise Postcodes::AuthenticationError.new('No API Key provided. ' + 'Set your API key using Postcodes.api_key = #your_key') end url = URI.parse(resource_url(path)) params.merge! api_key: @api_key url.query = Util.merge_params(params) request_options = { method: method.downcase.to_sym, url: url.to_s } begin response = generate_request(request_options) rescue RestClient::ExceptionWithResponse => error if rcode = error.http_code && rbody = error.http_body handle_error(rcode, rbody) else handle_client_error(error) end rescue RestClient::Exception, Errno::ECONNREFUSED => error handle_client_error(e) end parse response.body end
Private Class Methods
general_error(response_code, response_body)
click to toggle source
# File lib/postcodes.rb, line 90 def self.general_error(response_code, response_body) PostcodesError.new "Invalid response object", response_code, response_body end
generate_request(options)
click to toggle source
# File lib/postcodes.rb, line 51 def self.generate_request(options) RestClient::Request.execute(options) end
handle_client_error(error)
click to toggle source
# File lib/postcodes.rb, line 86 def self.handle_client_error(error) raise PostcodesError.new("Unexpected error occurred: #{error.message})") end
handle_error(http_code, http_body)
click to toggle source
# File lib/postcodes.rb, line 63 def self.handle_error(http_code, http_body) error = parse http_body opc_code, opc_message = error[:code], error[:message] case opc_code when 4010 raise AuthenticationError.new opc_message, http_code, http_body, opc_code when 4011 raise RefererExcludedError.new opc_message, http_code, http_body, opc_code when 4020 raise TokenExhaustedError.new opc_message, http_code, http_body, opc_code when 4021 raise LimitReachedError.new opc_message, http_code, http_body, opc_code when 4040 raise ResourceNotFoundError.new opc_message, http_code, http_body, opc_code when 4220 raise InvalidInputError.new opc_message, http_code, http_body, opc_code else raise PostcodesError.new opc_message, http_code, http_body, opc_code end end
parse(response)
click to toggle source
# File lib/postcodes.rb, line 55 def self.parse(response) begin Util.keys_to_sym MultiJson.load(response) rescue MultiJson::DecodeError => e raise handle_client_error(e) end end
resource_url(path='')
click to toggle source
# File lib/postcodes.rb, line 47 def self.resource_url(path='') URI.escape "#{@base_url}/v#{@version}/#{path}" end