module GetAddress
Constants
- VERSION
Attributes
api_key[RW]
endpoint[RW]
Public Class Methods
get_address(postcode, house = '', options = {})
click to toggle source
# File lib/get_address.rb, line 19 def self.get_address(postcode, house = '', options = {}) path = Utils.present?(house) ? "find/#{postcode}/#{house}" : "find/#{postcode}" query = options[:sort].nil? ? {} : { sort: options[:sort] } GetAddress.request :get, path, query rescue ResourceNotFoundError => error [] end
Private Class Methods
handle_error(error)
click to toggle source
# File lib/get_address.rb, line 94 def self.handle_error(error) raise GetAddressError.new("An unexpected error occurred: #{error.message})") end
handle_rest_error(http_code, http_body)
click to toggle source
# File lib/get_address.rb, line 63 def self.handle_rest_error(http_code, http_body) error = parse http_body message = error['Message'] case http_code when 401 raise AuthenticationError.new message, http_code when 404 raise ResourceNotFoundError.new message, http_code else raise GetAddressError.new message, http_code end end
parse(response)
click to toggle source
# File lib/get_address.rb, line 88 def self.parse(response) JSON.parse(response) rescue JSON::ParserError => e raise handle_error(e) end
process(response)
click to toggle source
# File lib/get_address.rb, line 77 def self.process(response) response_hash = parse response latitude = response_hash['latitude'] longitude = response_hash['longitude'] response_hash['addresses'].map do |addr_hash| Address.new line1: addr_hash[0], line2: addr_hash[1], line3: addr_hash[2], city: addr_hash[3], county: addr_hash[4], latitude: latitude, longitude: longitude end end
request(method, path, params = {})
click to toggle source
# File lib/get_address.rb, line 29 def self.request(method, path, params = {}) unless @api_key raise AuthenticationError.new('No API Key provided') end url = URI.parse(resource_url(path)) params.merge!({ 'api-key' => @api_key, 'format' => true }) url.query = Utils.escape_params(params) request_options = { method: method, url: url.to_s } begin response = RestClient::Request.execute(request_options) rescue RestClient::ExceptionWithResponse => error if (code = error.http_code) && (body = error.http_body) handle_rest_error(code, body) else handle_error(error) end rescue RestClient::Exception, Errno::ECONNREFUSED => error handle_error(error) end process response.body end
resource_url(path = '')
click to toggle source
# File lib/get_address.rb, line 59 def self.resource_url(path = '') URI.escape "#{@endpoint}/#{path}" end