class Postcode
Public Instance Methods
filter_postcodes_by_country(postcodes, country)
click to toggle source
# File lib/mas/postcode.rb, line 2 def filter_postcodes_by_country(postcodes, country) map_postcodes_to_country(postcodes) .select { |postcode, postcode_country| postcode_country == country } .map { |postcode, postcode_country| postcode } end
Private Instance Methods
map_postcodes_slice_to_country(postcodes)
click to toggle source
# File lib/mas/postcode.rb, line 19 def map_postcodes_slice_to_country(postcodes) request = Net::HTTP::Post.new('/postcodes') request.set_form_data(postcodes: postcodes) response = Net::HTTP.new('api.postcodes.io').request(request) if response.code.to_i == 200 result = JSON.parse(response.read_body)['result'].map { |r| r['result'] }.compact result.each_with_object({}) do |r, obj| obj[r['postcode']] = r['country'] end else {} end end
map_postcodes_to_country(postcodes)
click to toggle source
Make sure we only request 100 at a time
# File lib/mas/postcode.rb, line 11 def map_postcodes_to_country(postcodes) postcodes .uniq .each_slice(100) .map { |slice| map_postcodes_slice_to_country(slice) } .reduce(&:merge) end