ideal_postcodes 2.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.github/workflows/ci.yml +22 -0
- data/lib/ideal_postcodes.rb +1 -1
- data/lib/idealpostcodes/address.rb +28 -28
- data/lib/idealpostcodes/errors.rb +31 -26
- data/lib/idealpostcodes/key.rb +12 -11
- data/lib/idealpostcodes/postcode.rb +21 -20
- data/lib/idealpostcodes/util.rb +38 -25
- data/lib/idealpostcodes/version.rb +2 -2
- data/lib/idealpostcodes.rb +104 -92
- data/spec/addresses_spec.rb +63 -63
- data/spec/idealpostcodes_spec.rb +51 -51
- data/spec/keys_spec.rb +21 -21
- data/spec/postcodes_spec.rb +74 -63
- data/spec/spec_helper.rb +50 -29
- data/spec/vcr_cassettes/IdealPostcodes_Address_lookup_raises_an_exception_if_invalid_key.yml +39 -39
- data/spec/vcr_cassettes/IdealPostcodes_Address_lookup_raises_an_exception_if_limit_breached.yml +39 -39
- data/spec/vcr_cassettes/IdealPostcodes_Address_lookup_raises_an_exception_if_no_lookups_remaining.yml +39 -39
- data/spec/vcr_cassettes/IdealPostcodes_Address_lookup_returns_an_address_for_a_valid_UDPRN.yml +71 -71
- data/spec/vcr_cassettes/IdealPostcodes_Address_lookup_returns_nil_for_an_invalid_UDPRN.yml +39 -39
- data/spec/vcr_cassettes/IdealPostcodes_Address_search_is_sensitive_to_limit.yml +78 -78
- data/spec/vcr_cassettes/IdealPostcodes_Address_search_is_sensitive_to_page.yml +366 -366
- data/spec/vcr_cassettes/IdealPostcodes_Address_search_raises_an_exception_if_invalid_key.yml +39 -39
- data/spec/vcr_cassettes/IdealPostcodes_Address_search_raises_an_exception_if_limit_breached.yml +39 -39
- data/spec/vcr_cassettes/IdealPostcodes_Address_search_raises_an_exception_if_no_lookups_remaining.yml +39 -39
- data/spec/vcr_cassettes/IdealPostcodes_Address_search_returns_results_in_a_SearchResult_object.yml +270 -270
- data/spec/vcr_cassettes/IdealPostcodes_Key_lookup_details_returns_key_details.yml +58 -58
- data/spec/vcr_cassettes/IdealPostcodes_Key_lookup_returns_the_availability_status_of_a_key_false_key_.yml +42 -42
- data/spec/vcr_cassettes/IdealPostcodes_Key_lookup_returns_the_availability_status_of_a_key_true_key_.yml +42 -42
- data/spec/vcr_cassettes/IdealPostcodes_Postcode_find_by_location_is_sensitive_to_limit_parameter.yml +49 -49
- data/spec/vcr_cassettes/IdealPostcodes_Postcode_find_by_location_is_sensitive_to_radius_parament.yml +130 -130
- data/spec/vcr_cassettes/IdealPostcodes_Postcode_find_by_location_returns_an_array_of_postcodes_and_locations.yml +81 -81
- data/spec/vcr_cassettes/IdealPostcodes_Postcode_find_by_location_returns_an_empty_array_if_no_results_are_found.yml +40 -40
- data/spec/vcr_cassettes/IdealPostcodes_Postcode_lookup_raises_an_exception_if_invalid_key.yml +39 -39
- data/spec/vcr_cassettes/IdealPostcodes_Postcode_lookup_raises_an_exception_if_key_has_run_out_of_balance.yml +39 -39
- data/spec/vcr_cassettes/IdealPostcodes_Postcode_lookup_raises_an_exception_if_limit_has_been_reached.yml +39 -39
- data/spec/vcr_cassettes/IdealPostcodes_Postcode_lookup_returns_a_list_of_addresses_for_a_postcode.yml +265 -265
- data/spec/vcr_cassettes/IdealPostcodes_Postcode_lookup_returns_an_empty_array_if_postcode_does_not_exist.yml +39 -39
- data/spec/vcr_cassettes/IdealPostcodes_key_available_returns_false_if_key_is_unavailable.yml +42 -42
- data/spec/vcr_cassettes/IdealPostcodes_key_available_returns_true_if_key_is_available.yml +42 -42
- data/spec/vcr_cassettes/IdealPostcodes_key_details_raises_an_exception_if_no_secret_is_provided.yml +42 -42
- data/spec/vcr_cassettes/IdealPostcodes_key_details_returns_key_information.yml +58 -58
- data/spec/vcr_cassettes/IdealPostcodes_request_generates_a_HTTP_request.yml +265 -265
- data/spec/vcr_cassettes/IdealPostcodes_request_raises_authentication_error_if_invalid_key_is_provided.yml +39 -39
- data/spec/vcr_cassettes/IdealPostcodes_request_raises_limit_reached_error_if_a_limit_has_been_breached.yml +39 -39
- data/spec/vcr_cassettes/IdealPostcodes_request_raises_token_exhausted_error_if_key_balance_is_depleted.yml +39 -39
- metadata +4 -5
- data/.travis.yml +0 -9
    
        data/spec/idealpostcodes_spec.rb
    CHANGED
    
    | @@ -1,56 +1,56 @@ | |
| 1 1 | 
             
            require 'spec_helper'
         | 
| 2 2 |  | 
| 3 3 | 
             
            describe IdealPostcodes do
         | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 4 | 
            +
              describe '#request' do
         | 
| 5 | 
            +
                it 'generates a HTTP request' do
         | 
| 6 | 
            +
                  response = IdealPostcodes.request :get, 'postcodes/ID1 1QD'
         | 
| 7 | 
            +
                  expect(response[:code]).to eq(2000)
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
                it 'raises an error if no key is provided' do
         | 
| 10 | 
            +
                  IdealPostcodes.api_key = nil
         | 
| 11 | 
            +
                  expect do
         | 
| 12 | 
            +
                    response = IdealPostcodes.request :get, 'postcodes/ID1 1QD'
         | 
| 13 | 
            +
                  end.to raise_error(IdealPostcodes::AuthenticationError)
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
                it 'raises authentication error if invalid key is provided' do
         | 
| 16 | 
            +
                  IdealPostcodes.api_key = 'foo'
         | 
| 17 | 
            +
                  expect do
         | 
| 18 | 
            +
                    response = IdealPostcodes.request :get, 'postcodes/ID1 1QD'
         | 
| 19 | 
            +
                  end.to raise_error(IdealPostcodes::AuthenticationError)
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
                it 'raises token exhausted error if key balance is depleted' do
         | 
| 22 | 
            +
                  expect do
         | 
| 23 | 
            +
                    response = IdealPostcodes.request :get, 'postcodes/ID1 CLIP'
         | 
| 24 | 
            +
                  end.to raise_error(IdealPostcodes::TokenExhaustedError)
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
                it 'raises limit reached error if a limit has been breached' do
         | 
| 27 | 
            +
                  expect do
         | 
| 28 | 
            +
                    response = IdealPostcodes.request :get, 'postcodes/ID1 CHOP'
         | 
| 29 | 
            +
                  end.to raise_error(IdealPostcodes::LimitReachedError)
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
              end
         | 
| 32 32 |  | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 33 | 
            +
              describe '.key_available' do
         | 
| 34 | 
            +
                it 'returns true if key is available' do
         | 
| 35 | 
            +
                  IdealPostcodes.api_key = 'iddqd'
         | 
| 36 | 
            +
                  expect(IdealPostcodes.key_available).to equal(true)
         | 
| 37 | 
            +
                end
         | 
| 38 | 
            +
                it 'returns false if key is unavailable' do
         | 
| 39 | 
            +
                  IdealPostcodes.api_key = 'idkfa'
         | 
| 40 | 
            +
                  expect(IdealPostcodes.key_available).to equal(false)
         | 
| 41 | 
            +
                end
         | 
| 42 | 
            +
              end
         | 
| 43 43 |  | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
            end
         | 
| 44 | 
            +
              describe '.key_details' do
         | 
| 45 | 
            +
                it 'raises an exception if no secret is provided' do
         | 
| 46 | 
            +
                  expect { IdealPostcodes.key_details }.to raise_error(
         | 
| 47 | 
            +
                    IdealPostcodes::AuthenticationError
         | 
| 48 | 
            +
                  )
         | 
| 49 | 
            +
                end
         | 
| 50 | 
            +
                it 'returns key information' do
         | 
| 51 | 
            +
                  IdealPostcodes.apply_secret(secret_key)
         | 
| 52 | 
            +
                  response = IdealPostcodes.key_details
         | 
| 53 | 
            +
                  expect(is_key(response)).to eq(true)
         | 
| 54 | 
            +
                end
         | 
| 55 | 
            +
              end
         | 
| 56 | 
            +
            end
         | 
    
        data/spec/keys_spec.rb
    CHANGED
    
    | @@ -1,25 +1,25 @@ | |
| 1 1 | 
             
            require 'spec_helper'
         | 
| 2 2 |  | 
| 3 3 | 
             
            describe IdealPostcodes::Key do
         | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 4 | 
            +
              describe '.lookup' do
         | 
| 5 | 
            +
                it 'returns the availability status of a key (true key)' do
         | 
| 6 | 
            +
                  result = IdealPostcodes::Key.lookup 'iddqd'
         | 
| 7 | 
            +
                  expect(result[:available]).to eq(true)
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
                it 'returns the availability status of a key (false key)' do
         | 
| 10 | 
            +
                  result = IdealPostcodes::Key.lookup 'idkfa'
         | 
| 11 | 
            +
                  expect(result[:available]).to eq(false)
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
              end
         | 
| 14 14 |  | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
            end
         | 
| 15 | 
            +
              describe '.lookup_details' do
         | 
| 16 | 
            +
                it 'returns key details' do
         | 
| 17 | 
            +
                  result = IdealPostcodes::Key.lookup_details 'gandhi', secret_key
         | 
| 18 | 
            +
                  expect(result[:lookups_remaining]).to_not be_nil
         | 
| 19 | 
            +
                  expect(result[:daily_limit]).to_not be_nil
         | 
| 20 | 
            +
                  expect(result[:individual_limit]).to_not be_nil
         | 
| 21 | 
            +
                  expect(result[:allowed_urls]).to_not be_nil
         | 
| 22 | 
            +
                  expect(result[:notifications]).to_not be_nil
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
    
        data/spec/postcodes_spec.rb
    CHANGED
    
    | @@ -1,66 +1,77 @@ | |
| 1 1 | 
             
            require 'spec_helper'
         | 
| 2 2 |  | 
| 3 3 | 
             
            describe IdealPostcodes::Postcode do
         | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
             | 
| 57 | 
            -
             | 
| 58 | 
            -
             | 
| 59 | 
            -
             | 
| 60 | 
            -
             | 
| 61 | 
            -
             | 
| 62 | 
            -
             | 
| 63 | 
            -
             | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 4 | 
            +
              describe '.lookup' do
         | 
| 5 | 
            +
                it 'returns a list of addresses for a postcode' do
         | 
| 6 | 
            +
                  addresses = IdealPostcodes::Postcode.lookup 'ID1 1QD'
         | 
| 7 | 
            +
                  expect(addresses.length).to be > 0
         | 
| 8 | 
            +
                  addresses.each do |address|
         | 
| 9 | 
            +
                    expect(is_address(address)).to eq(true)
         | 
| 10 | 
            +
                    expect(address[:postcode]).to eq('ID1 1QD')
         | 
| 11 | 
            +
                  end
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
                it 'returns an empty array if postcode does not exist' do
         | 
| 14 | 
            +
                  addresses = IdealPostcodes::Postcode.lookup 'ID1 KFA'
         | 
| 15 | 
            +
                  expect(addresses.length).to eq(0)
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
                it 'raises an exception if key has run out of balance' do
         | 
| 18 | 
            +
                  expect { IdealPostcodes::Postcode.lookup 'ID1 CLIP' }.to raise_error(
         | 
| 19 | 
            +
                    IdealPostcodes::TokenExhaustedError
         | 
| 20 | 
            +
                  )
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
                it 'raises an exception if limit has been reached' do
         | 
| 23 | 
            +
                  expect { IdealPostcodes::Postcode.lookup 'ID1 CHOP' }.to raise_error(
         | 
| 24 | 
            +
                    IdealPostcodes::LimitReachedError
         | 
| 25 | 
            +
                  )
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
                it 'raises an exception if invalid key' do
         | 
| 28 | 
            +
                  IdealPostcodes.api_key = 'foo'
         | 
| 29 | 
            +
                  expect { IdealPostcodes::Postcode.lookup 'ID1 1QD' }.to raise_error(
         | 
| 30 | 
            +
                    IdealPostcodes::AuthenticationError
         | 
| 31 | 
            +
                  )
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
              end
         | 
| 34 | 
            +
              describe '.find_by_location' do
         | 
| 35 | 
            +
                it 'returns an array of postcodes and locations' do
         | 
| 36 | 
            +
                  lon = 0.6298
         | 
| 37 | 
            +
                  lat = 51.7923
         | 
| 38 | 
            +
                  postcodes =
         | 
| 39 | 
            +
                    IdealPostcodes::Postcode.find_by_location longitude: lon, latitude: lat
         | 
| 40 | 
            +
                  expect(postcodes.length).to be > 0
         | 
| 41 | 
            +
                  postcodes.each do |postcode|
         | 
| 42 | 
            +
                    expect(is_postcode_location(postcode)).to eq(true)
         | 
| 43 | 
            +
                  end
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
                it 'returns an empty array if no results are found' do
         | 
| 46 | 
            +
                  lon = 0
         | 
| 47 | 
            +
                  lat = 0
         | 
| 48 | 
            +
                  postcodes =
         | 
| 49 | 
            +
                    IdealPostcodes::Postcode.find_by_location longitude: lon, latitude: lat
         | 
| 50 | 
            +
                  expect(postcodes).to be_a(Array)
         | 
| 51 | 
            +
                  expect(postcodes.length).to eq(0)
         | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
                it 'is sensitive to limit parameter' do
         | 
| 54 | 
            +
                  lon = 0.6298
         | 
| 55 | 
            +
                  lat = 51.7923
         | 
| 56 | 
            +
                  limit = 1
         | 
| 57 | 
            +
                  postcodes =
         | 
| 58 | 
            +
                    IdealPostcodes::Postcode.find_by_location longitude: lon,
         | 
| 59 | 
            +
                                                              latitude: lat,
         | 
| 60 | 
            +
                                                              limit: limit
         | 
| 61 | 
            +
                  expect(postcodes.length).to eq(limit)
         | 
| 62 | 
            +
                end
         | 
| 63 | 
            +
                it 'is sensitive to radius parament' do
         | 
| 64 | 
            +
                  lon = 0.6298
         | 
| 65 | 
            +
                  lat = 51.7923
         | 
| 66 | 
            +
                  small_radius =
         | 
| 67 | 
            +
                    IdealPostcodes::Postcode.find_by_location longitude: lon,
         | 
| 68 | 
            +
                                                              latitude: lat,
         | 
| 69 | 
            +
                                                              radius: 10
         | 
| 70 | 
            +
                  large_radius =
         | 
| 71 | 
            +
                    IdealPostcodes::Postcode.find_by_location longitude: lon,
         | 
| 72 | 
            +
                                                              latitude: lat,
         | 
| 73 | 
            +
                                                              radius: 100
         | 
| 74 | 
            +
                  expect(large_radius.length > small_radius.length).to eq(true)
         | 
| 75 | 
            +
                end
         | 
| 76 | 
            +
              end
         | 
| 77 | 
            +
            end
         | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    | @@ -5,64 +5,85 @@ require 'webmock' | |
| 5 5 | 
             
            WebMock.enable!
         | 
| 6 6 |  | 
| 7 7 | 
             
            VCR.configure do |c|
         | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 8 | 
            +
              c.cassette_library_dir = 'spec/vcr_cassettes'
         | 
| 9 | 
            +
              c.hook_into :webmock
         | 
| 10 10 | 
             
            end
         | 
| 11 11 |  | 
| 12 12 | 
             
            # Configure Ideal Postcodes lib
         | 
| 13 13 | 
             
            require 'ideal_postcodes'
         | 
| 14 14 |  | 
| 15 15 | 
             
            RSpec.configure do |c|
         | 
| 16 | 
            -
             | 
| 16 | 
            +
              c.before(:each) do
         | 
| 17 17 | 
             
                IdealPostcodes.base_url = 'https://localhost:1337'
         | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 18 | 
            +
                IdealPostcodes.api_key = 'gandhi'
         | 
| 19 | 
            +
                IdealPostcodes.apply_secret nil
         | 
| 20 20 | 
             
              end
         | 
| 21 21 |  | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
            		end
         | 
| 26 | 
            -
            	end
         | 
| 22 | 
            +
              c.around(:each) do |example|
         | 
| 23 | 
            +
                VCR.use_cassette(example.metadata[:full_description]) { example.run }
         | 
| 24 | 
            +
              end
         | 
| 27 25 | 
             
            end
         | 
| 28 26 |  | 
| 29 | 
            -
            def contains_attributes | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
            	end
         | 
| 34 | 
            -
            	result
         | 
| 27 | 
            +
            def contains_attributes(attribute_list, target)
         | 
| 28 | 
            +
              result = true
         | 
| 29 | 
            +
              attribute_list.each { |attribute| result = false if target[attribute].nil? }
         | 
| 30 | 
            +
              result
         | 
| 35 31 | 
             
            end
         | 
| 36 32 |  | 
| 37 33 | 
             
            def postcode_location_elements
         | 
| 38 | 
            -
             | 
| 34 | 
            +
              %i[postcode longitude latitude northings eastings]
         | 
| 39 35 | 
             
            end
         | 
| 40 36 |  | 
| 41 37 | 
             
            def is_postcode_location(postcode)
         | 
| 42 | 
            -
             | 
| 38 | 
            +
              contains_attributes postcode_location_elements, postcode
         | 
| 43 39 | 
             
            end
         | 
| 44 40 |  | 
| 45 41 | 
             
            def address_elements
         | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 42 | 
            +
              %i[
         | 
| 43 | 
            +
                postcode
         | 
| 44 | 
            +
                postcode_inward
         | 
| 45 | 
            +
                postcode_outward
         | 
| 46 | 
            +
                post_town
         | 
| 47 | 
            +
                dependant_locality
         | 
| 48 | 
            +
                double_dependant_locality
         | 
| 49 | 
            +
                thoroughfare
         | 
| 50 | 
            +
                dependant_thoroughfare
         | 
| 51 | 
            +
                building_number
         | 
| 52 | 
            +
                building_name
         | 
| 53 | 
            +
                sub_building_name
         | 
| 54 | 
            +
                po_box
         | 
| 55 | 
            +
                department_name
         | 
| 56 | 
            +
                organisation_name
         | 
| 57 | 
            +
                udprn
         | 
| 58 | 
            +
                postcode_type
         | 
| 59 | 
            +
                su_organisation_indicator
         | 
| 60 | 
            +
                delivery_point_suffix
         | 
| 61 | 
            +
                line_1
         | 
| 62 | 
            +
                line_2
         | 
| 63 | 
            +
                line_3
         | 
| 64 | 
            +
                premise
         | 
| 65 | 
            +
                county
         | 
| 66 | 
            +
                district
         | 
| 67 | 
            +
                ward
         | 
| 68 | 
            +
                longitude
         | 
| 69 | 
            +
                latitude
         | 
| 70 | 
            +
                eastings
         | 
| 71 | 
            +
                northings
         | 
| 72 | 
            +
              ]
         | 
| 52 73 | 
             
            end
         | 
| 53 74 |  | 
| 54 75 | 
             
            def is_address(address)
         | 
| 55 | 
            -
             | 
| 76 | 
            +
              contains_attributes address_elements, address
         | 
| 56 77 | 
             
            end
         | 
| 57 78 |  | 
| 58 79 | 
             
            def key_elements
         | 
| 59 | 
            -
             | 
| 80 | 
            +
              %i[lookups_remaining daily_limit individual_limit allowed_urls notifications]
         | 
| 60 81 | 
             
            end
         | 
| 61 82 |  | 
| 62 83 | 
             
            def is_key(key)
         | 
| 63 | 
            -
             | 
| 84 | 
            +
              contains_attributes key_elements, key
         | 
| 64 85 | 
             
            end
         | 
| 65 86 |  | 
| 66 87 | 
             
            def secret_key
         | 
| 67 | 
            -
             | 
| 68 | 
            -
            end
         | 
| 88 | 
            +
              'uk_hxp6ouk0rmyXoobVJnehrsQcdvTfb'
         | 
| 89 | 
            +
            end
         | 
    
        data/spec/vcr_cassettes/IdealPostcodes_Address_lookup_raises_an_exception_if_invalid_key.yml
    CHANGED
    
    | @@ -1,42 +1,42 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            http_interactions:
         | 
| 3 | 
            -
            - request:
         | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 3 | 
            +
              - request:
         | 
| 4 | 
            +
                  method: get
         | 
| 5 | 
            +
                  uri: https://localhost:1337/v1/addresses/0?api_key=foo
         | 
| 6 | 
            +
                  body:
         | 
| 7 | 
            +
                    encoding: US-ASCII
         | 
| 8 | 
            +
                    string: ""
         | 
| 9 | 
            +
                  headers:
         | 
| 10 | 
            +
                    Accept:
         | 
| 11 | 
            +
                      - "*/*; q=0.5, application/xml"
         | 
| 12 | 
            +
                    Accept-Encoding:
         | 
| 13 | 
            +
                      - gzip, deflate
         | 
| 14 | 
            +
                    User-Agent:
         | 
| 15 | 
            +
                      - Ruby
         | 
| 16 | 
            +
                response:
         | 
| 17 | 
            +
                  status:
         | 
| 18 | 
            +
                    code: 401
         | 
| 19 | 
            +
                    message: Unauthorized
         | 
| 20 | 
            +
                  headers:
         | 
| 21 | 
            +
                    Access-Control-Allow-Origin:
         | 
| 22 | 
            +
                      - "*"
         | 
| 23 | 
            +
                    Content-Type:
         | 
| 24 | 
            +
                      - application/json; charset=utf-8
         | 
| 25 | 
            +
                    Content-Length:
         | 
| 26 | 
            +
                      - "135"
         | 
| 27 | 
            +
                    Etag:
         | 
| 28 | 
            +
                      - '"-632160061"'
         | 
| 29 | 
            +
                    Date:
         | 
| 30 | 
            +
                      - Fri, 12 Dec 2014 17:40:26 GMT
         | 
| 31 | 
            +
                    Connection:
         | 
| 32 | 
            +
                      - keep-alive
         | 
| 33 | 
            +
                  body:
         | 
| 34 | 
            +
                    encoding: UTF-8
         | 
| 35 | 
            +
                    string: |-
         | 
| 36 | 
            +
                      {
         | 
| 37 | 
            +
                        "code": 4010,
         | 
| 38 | 
            +
                        "message": "Invalid Key. For more information see http://ideal-postcodes.co.uk/documentation/response-codes#4010"
         | 
| 39 | 
            +
                      }
         | 
| 40 | 
            +
                  http_version:
         | 
| 41 | 
            +
                recorded_at: Fri, 12 Dec 2014 17:40:26 GMT
         | 
| 42 42 | 
             
            recorded_with: VCR 2.9.3
         | 
    
        data/spec/vcr_cassettes/IdealPostcodes_Address_lookup_raises_an_exception_if_limit_breached.yml
    CHANGED
    
    | @@ -1,42 +1,42 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            http_interactions:
         | 
| 3 | 
            -
            - request:
         | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 3 | 
            +
              - request:
         | 
| 4 | 
            +
                  method: get
         | 
| 5 | 
            +
                  uri: https://localhost:1337/v1/addresses/-3?api_key=gandhi
         | 
| 6 | 
            +
                  body:
         | 
| 7 | 
            +
                    encoding: US-ASCII
         | 
| 8 | 
            +
                    string: ""
         | 
| 9 | 
            +
                  headers:
         | 
| 10 | 
            +
                    Accept:
         | 
| 11 | 
            +
                      - "*/*; q=0.5, application/xml"
         | 
| 12 | 
            +
                    Accept-Encoding:
         | 
| 13 | 
            +
                      - gzip, deflate
         | 
| 14 | 
            +
                    User-Agent:
         | 
| 15 | 
            +
                      - Ruby
         | 
| 16 | 
            +
                response:
         | 
| 17 | 
            +
                  status:
         | 
| 18 | 
            +
                    code: 402
         | 
| 19 | 
            +
                    message: Payment Required
         | 
| 20 | 
            +
                  headers:
         | 
| 21 | 
            +
                    Access-Control-Allow-Origin:
         | 
| 22 | 
            +
                      - "*"
         | 
| 23 | 
            +
                    Content-Type:
         | 
| 24 | 
            +
                      - application/json; charset=utf-8
         | 
| 25 | 
            +
                    Content-Length:
         | 
| 26 | 
            +
                      - "144"
         | 
| 27 | 
            +
                    Etag:
         | 
| 28 | 
            +
                      - '"1445167850"'
         | 
| 29 | 
            +
                    Date:
         | 
| 30 | 
            +
                      - Fri, 12 Dec 2014 17:40:26 GMT
         | 
| 31 | 
            +
                    Connection:
         | 
| 32 | 
            +
                      - keep-alive
         | 
| 33 | 
            +
                  body:
         | 
| 34 | 
            +
                    encoding: UTF-8
         | 
| 35 | 
            +
                    string: |-
         | 
| 36 | 
            +
                      {
         | 
| 37 | 
            +
                        "code": 4021,
         | 
| 38 | 
            +
                        "message": "Lookup Limit Reached. For more information see http://ideal-postcodes.co.uk/documentation/response-codes#4021"
         | 
| 39 | 
            +
                      }
         | 
| 40 | 
            +
                  http_version:
         | 
| 41 | 
            +
                recorded_at: Fri, 12 Dec 2014 17:40:26 GMT
         | 
| 42 42 | 
             
            recorded_with: VCR 2.9.3
         | 
| @@ -1,42 +1,42 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            http_interactions:
         | 
| 3 | 
            -
            - request:
         | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 3 | 
            +
              - request:
         | 
| 4 | 
            +
                  method: get
         | 
| 5 | 
            +
                  uri: https://localhost:1337/v1/addresses/-2?api_key=gandhi
         | 
| 6 | 
            +
                  body:
         | 
| 7 | 
            +
                    encoding: US-ASCII
         | 
| 8 | 
            +
                    string: ""
         | 
| 9 | 
            +
                  headers:
         | 
| 10 | 
            +
                    Accept:
         | 
| 11 | 
            +
                      - "*/*; q=0.5, application/xml"
         | 
| 12 | 
            +
                    Accept-Encoding:
         | 
| 13 | 
            +
                      - gzip, deflate
         | 
| 14 | 
            +
                    User-Agent:
         | 
| 15 | 
            +
                      - Ruby
         | 
| 16 | 
            +
                response:
         | 
| 17 | 
            +
                  status:
         | 
| 18 | 
            +
                    code: 402
         | 
| 19 | 
            +
                    message: Payment Required
         | 
| 20 | 
            +
                  headers:
         | 
| 21 | 
            +
                    Access-Control-Allow-Origin:
         | 
| 22 | 
            +
                      - "*"
         | 
| 23 | 
            +
                    Content-Type:
         | 
| 24 | 
            +
                      - application/json; charset=utf-8
         | 
| 25 | 
            +
                    Content-Length:
         | 
| 26 | 
            +
                      - "146"
         | 
| 27 | 
            +
                    Etag:
         | 
| 28 | 
            +
                      - '"1304241290"'
         | 
| 29 | 
            +
                    Date:
         | 
| 30 | 
            +
                      - Fri, 12 Dec 2014 17:40:26 GMT
         | 
| 31 | 
            +
                    Connection:
         | 
| 32 | 
            +
                      - keep-alive
         | 
| 33 | 
            +
                  body:
         | 
| 34 | 
            +
                    encoding: UTF-8
         | 
| 35 | 
            +
                    string: |-
         | 
| 36 | 
            +
                      {
         | 
| 37 | 
            +
                        "code": 4020,
         | 
| 38 | 
            +
                        "message": "Token balance depleted. For more information see http://ideal-postcodes.co.uk/documentation/response-codes#4020"
         | 
| 39 | 
            +
                      }
         | 
| 40 | 
            +
                  http_version:
         | 
| 41 | 
            +
                recorded_at: Fri, 12 Dec 2014 17:40:26 GMT
         | 
| 42 42 | 
             
            recorded_with: VCR 2.9.3
         |