module Postcodes::Lookup

Public Instance Methods

lookup(*postcodes) click to toggle source
# File lib/postcodes_io/lookup.rb, line 9
def lookup(*postcodes)
  postcodes.flatten!
  if postcodes.count > 1
    lookup_multiple postcodes
  else
    lookup_postcode postcodes.first
  end
end

Private Instance Methods

lookup_multiple(postcodes) click to toggle source
# File lib/postcodes_io/lookup.rb, line 32
def lookup_multiple(postcodes)
  payload = {postcodes: postcodes.map {|p| remove_whitespace p}}
  response = Excon.post(
    "https://api.postcodes.io/postcodes",
     body: payload.to_json,
     headers: {'Content-Type' => 'application/json'}
     )

  process_response(response) do |r|
    return r['result'].map do |result|
      Postcodes::Postcode.new(result['result'])
    end
  end
end
lookup_postcode(postcode) click to toggle source
# File lib/postcodes_io/lookup.rb, line 21
def lookup_postcode(postcode)
  postcode = remove_whitespace postcode
  response = Excon.get("https://api.postcodes.io/postcodes/#{postcode}")

  unless response.status == 404
    parsed_response = JSON.parse(response.body)
    return Postcodes::Postcode.new(parsed_response['result'])
  end
  return nil
end
process_response(response) { |parse| ... } click to toggle source
# File lib/postcodes_io/lookup.rb, line 51
def process_response(response, &block)
  unless response.status == 404
    yield JSON.parse(response.body)
  end
  nil
end
remove_whitespace(string) click to toggle source
# File lib/postcodes_io/lookup.rb, line 47
def remove_whitespace(string)
  string.gsub(/\s+/, '') # remove any whitespace. m1 1ab => m11ab
end