module IdealPostcodes
Constants
- VERSION
Attributes
api_key[RW]
base_url[RW]
secret[RW]
version[RW]
Public Class Methods
apply_secret(secret)
click to toggle source
# File lib/idealpostcodes.rb, line 52 def self.apply_secret(secret) @secret = secret end
key_available()
click to toggle source
# File lib/idealpostcodes.rb, line 56 def self.key_available response = Key.lookup @api_key response[:available] end
key_details()
click to toggle source
# File lib/idealpostcodes.rb, line 61 def self.key_details raise IdealPostcodes::AuthenticationError.new('No Secret Key provided. ' + 'Set your secret key with IdealPostcodes.apply_secret #your_key') if @secret.nil? response = Key.lookup_details @api_key, @secret end
request(method, path, params = {})
click to toggle source
# File lib/idealpostcodes.rb, line 24 def self.request(method, path, params = {}) unless @api_key raise IdealPostcodes::AuthenticationError.new('No API Key provided. ' + 'Set your key with IdealPostcodes.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(error) end parse response.body end
Private Class Methods
general_error(response_code, response_body)
click to toggle source
# File lib/idealpostcodes.rb, line 108 def self.general_error(response_code, response_body) IdealPostcodesError.new 'Invalid response object', response_code, response_body end
generate_request(options)
click to toggle source
# File lib/idealpostcodes.rb, line 73 def self.generate_request(options) RestClient::Request.execute(options) end
handle_client_error(error)
click to toggle source
# File lib/idealpostcodes.rb, line 104 def self.handle_client_error(error) raise IdealPostcodesError.new("An unexpected error occured: #{error.message})") end
handle_error(http_code, http_body)
click to toggle source
# File lib/idealpostcodes.rb, line 85 def self.handle_error(http_code, http_body) error = parse http_body ideal_code, ideal_message = error[:code], error[:message] case ideal_code when 4010 raise AuthenticationError.new ideal_message, http_code, http_body, ideal_code when 4020 raise TokenExhaustedError.new ideal_message, http_code, http_body, ideal_code when 4021 raise LimitReachedError.new ideal_message, http_code, http_body, ideal_code when 4040 raise ResourceNotFoundError.new ideal_message, http_code, http_body, ideal_code else raise IdealPostcodesError.new ideal_message, http_code, http_body, ideal_code end end
parse(response)
click to toggle source
# File lib/idealpostcodes.rb, line 77 def self.parse(response) begin Util.keys_to_sym JSON.parse(response) rescue JSON::ParserError => e raise handle_client_error(e) end end
resource_url(path='')
click to toggle source
# File lib/idealpostcodes.rb, line 69 def self.resource_url(path='') URI.escape "#{@base_url}/v#{@version}/#{path}" end