postcode-anywhere 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +30 -0
- data/.rspec +2 -0
- data/.rubocop.yml +247 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +72 -0
- data/LICENSE.txt +21 -0
- data/README.md +319 -0
- data/Rakefile +2 -0
- data/config/pre_commit.yml +7 -0
- data/lib/postcode_anywhere.rb +10 -0
- data/lib/postcode_anywhere/bank_account_validation/bank_branch.rb +45 -0
- data/lib/postcode_anywhere/bank_account_validation/client.rb +13 -0
- data/lib/postcode_anywhere/bank_account_validation/interactive.rb +39 -0
- data/lib/postcode_anywhere/bank_account_validation/validation_result.rb +80 -0
- data/lib/postcode_anywhere/capture_plus/client.rb +13 -0
- data/lib/postcode_anywhere/capture_plus/interactive.rb +84 -0
- data/lib/postcode_anywhere/capture_plus/query_type.rb +8 -0
- data/lib/postcode_anywhere/capture_plus/retrieve_result.rb +45 -0
- data/lib/postcode_anywhere/capture_plus/search_result.rb +39 -0
- data/lib/postcode_anywhere/cleanse_plus/cleansed_address.rb +98 -0
- data/lib/postcode_anywhere/cleanse_plus/client.rb +13 -0
- data/lib/postcode_anywhere/cleanse_plus/interactive.rb +24 -0
- data/lib/postcode_anywhere/client.rb +86 -0
- data/lib/postcode_anywhere/configuration.rb +47 -0
- data/lib/postcode_anywhere/email_validation/client.rb +13 -0
- data/lib/postcode_anywhere/email_validation/interactive.rb +25 -0
- data/lib/postcode_anywhere/email_validation/validation_result.rb +24 -0
- data/lib/postcode_anywhere/error.rb +118 -0
- data/lib/postcode_anywhere/model_base.rb +72 -0
- data/lib/postcode_anywhere/request.rb +33 -0
- data/lib/postcode_anywhere/response/parse_json.rb +100 -0
- data/lib/postcode_anywhere/response/raise_error.rb +19 -0
- data/lib/postcode_anywhere/utils.rb +15 -0
- data/lib/postcode_anywhere/version.rb +3 -0
- data/postcode_anywhere.gemspec +31 -0
- data/spec/postcode_anywhere/bank_account_validation/interactive_spec.rb +82 -0
- data/spec/postcode_anywhere/capture_plus/interactive_spec.rb +240 -0
- data/spec/postcode_anywhere/cleanse_plus/interactive_spec.rb +65 -0
- data/spec/postcode_anywhere/client_spec.rb +124 -0
- data/spec/postcode_anywhere/configuration_spec.rb +62 -0
- data/spec/postcode_anywhere/email_validation/interactive_spec.rb +30 -0
- data/spec/postcode_anywhere/error_spec.rb +70 -0
- data/spec/postcode_anywhere/fixtures/bank_account_retrieve_by_sort.json +1 -0
- data/spec/postcode_anywhere/fixtures/bank_account_validate_account.json +1 -0
- data/spec/postcode_anywhere/fixtures/capture_plus_retrieve.json +1 -0
- data/spec/postcode_anywhere/fixtures/capture_plus_search.json +1 -0
- data/spec/postcode_anywhere/fixtures/cleanse_address_multi.json +1 -0
- data/spec/postcode_anywhere/fixtures/cleanse_address_single.json +1 -0
- data/spec/postcode_anywhere/fixtures/email_validation_validate_email.json +1 -0
- data/spec/postcode_anywhere/model_base_spec.rb +10 -0
- data/spec/spec_helper.rb +38 -0
- metadata +281 -0
@@ -0,0 +1,65 @@
|
|
1
|
+
describe PostcodeAnywhere::CleansePlus::Interactive do
|
2
|
+
before do
|
3
|
+
@client = PostcodeAnywhere::CleansePlus::Client.new(api_key: 'interactive_test_key')
|
4
|
+
end
|
5
|
+
describe '#address_candidates_for' do
|
6
|
+
before do
|
7
|
+
@endpoint = 'CleansePlus/Interactive/Cleanse/v1.00/json.ws'
|
8
|
+
@query_params = { 'Key' => 'interactive_test_key', 'Address' => 'A' }
|
9
|
+
end
|
10
|
+
context 'when a single result is returned' do
|
11
|
+
before do
|
12
|
+
stub_get(@endpoint).with(query: @query_params).to_return(
|
13
|
+
body: fixture('cleanse_address_single.json')
|
14
|
+
)
|
15
|
+
end
|
16
|
+
it 'requests the correct resource' do
|
17
|
+
@client.address_candidates_for('A')
|
18
|
+
expect(a_get(@endpoint).with(query: @query_params)).to have_been_made
|
19
|
+
end
|
20
|
+
it 'returns a Postcode Anywhere cleaned address' do
|
21
|
+
candidates = @client.address_candidates_for('A')
|
22
|
+
expect(candidates).to be_an Array
|
23
|
+
item = candidates.first
|
24
|
+
expect(item).to be_a PostcodeAnywhere::CleansePlus::CleansedAddress
|
25
|
+
expect(item.udprn).to eq 26_742_632
|
26
|
+
expect(item.company).to eq 'some company'
|
27
|
+
expect(item.department).to eq 'some department'
|
28
|
+
expect(item.line1).to eq 'Enigma House'
|
29
|
+
expect(item.line2).to eq 'Elgar Business Centre'
|
30
|
+
expect(item.line3).to eq 'Moseley Road'
|
31
|
+
expect(item.line4).to eq 'Hallow'
|
32
|
+
expect(item.line5).to eq 'where is this'
|
33
|
+
expect(item.post_town).to eq 'Worcester'
|
34
|
+
expect(item.county).to eq 'Worcestershire'
|
35
|
+
expect(item.postcode).to eq 'WR2 6NJ'
|
36
|
+
expect(item.mailsort).to eq 94_141
|
37
|
+
expect(item.barcode).to eq '(WR26NJ3UT)'
|
38
|
+
expect(item.type).to eq 'Residential'
|
39
|
+
expect(item.delivery_point_suffix).to eq '3U'
|
40
|
+
expect(item.sub_building).to eq 'Enigma House'
|
41
|
+
expect(item.building_name).to eq 'Elgar Business Centre'
|
42
|
+
expect(item.building_number).to eq '3'
|
43
|
+
expect(item.primary_street).to eq 'Moseley Road'
|
44
|
+
expect(item.secondary_street).to eq 'secondy'
|
45
|
+
expect(item.double_dependent_locality).to eq 'ddlocal'
|
46
|
+
expect(item.dependent_locality).to eq 'Hallow'
|
47
|
+
expect(item.po_box).to eq 'po123'
|
48
|
+
end
|
49
|
+
end
|
50
|
+
context 'when a multiple candidates returned' do
|
51
|
+
before do
|
52
|
+
stub_get(@endpoint).with(query: @query_params).to_return(
|
53
|
+
body: fixture('cleanse_address_multi.json')
|
54
|
+
)
|
55
|
+
end
|
56
|
+
it 'returns a set of candidates for a postcode anywhere address' do
|
57
|
+
candidates = @client.address_candidates_for('A')
|
58
|
+
expect(candidates).to be_an Array
|
59
|
+
expect(candidates.count).to be 2
|
60
|
+
expect(candidates.first.udprn).to eq 26_742_632
|
61
|
+
expect(candidates.last.udprn).to eq 2_222
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
describe PostcodeAnywhere::Client do
|
2
|
+
before do
|
3
|
+
@keys = PostcodeAnywhere::Configuration::VALID_CONFIG_KEYS
|
4
|
+
end
|
5
|
+
|
6
|
+
describe 'with module configuration' do
|
7
|
+
before do
|
8
|
+
PostcodeAnywhere.configure do |config|
|
9
|
+
@keys.each do |key|
|
10
|
+
config.send("#{key}=", key)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
after do
|
16
|
+
PostcodeAnywhere.reset
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'when no credentials are provided' do
|
20
|
+
it 'does not raise an exception' do
|
21
|
+
expect { PostcodeAnywhere::Client.new }.not_to raise_error
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should inherit module configuration' do
|
26
|
+
api = PostcodeAnywhere::Client.new
|
27
|
+
@keys.each do |key|
|
28
|
+
expect(api.send(key)).to eq key
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe 'with class configuration' do
|
33
|
+
before do
|
34
|
+
@config = {
|
35
|
+
api_key: 'ak',
|
36
|
+
format: 'of',
|
37
|
+
endpoint: 'ep',
|
38
|
+
user_agent: 'ua',
|
39
|
+
method: 'hm'
|
40
|
+
}
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'should override module configuration' do
|
44
|
+
api = PostcodeAnywhere::Client.new(@config)
|
45
|
+
@keys.each do |key|
|
46
|
+
expect(api.send(key)).to eq @config[key]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'should override module configuration after' do
|
51
|
+
api = PostcodeAnywhere::Client.new
|
52
|
+
|
53
|
+
@config.each do |key, value|
|
54
|
+
api.send("#{key}=", value)
|
55
|
+
end
|
56
|
+
|
57
|
+
@keys.each do |key|
|
58
|
+
expect(api.send("#{key}")).to eq @config[key]
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe '#connection_options' do
|
64
|
+
it 'returns the connection options hash with user_agent' do
|
65
|
+
client = PostcodeAnywhere::Client.new(user_agent: 'My Test Gem')
|
66
|
+
expect(client.connection_options[:headers][:user_agent]).to eql('My Test Gem')
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe '#connection' do
|
71
|
+
let(:connection_client) { PostcodeAnywhere::Client.new(endpoint: 'http://localhost') }
|
72
|
+
it 'looks like Faraday connection' do
|
73
|
+
expect(connection_client.send(:connection)).to respond_to(:run_request)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe '#request' do
|
78
|
+
let(:connection_client) { PostcodeAnywhere::Client.new(endpoint: 'http://localhost') }
|
79
|
+
it 'catches and reraises Faraday timeout errors' do
|
80
|
+
allow(connection_client).to receive(:connection).and_raise(
|
81
|
+
Faraday::Error::TimeoutError.new('execution expired')
|
82
|
+
)
|
83
|
+
expect { connection_client.send(:request, :get, '/path') }.to raise_error(
|
84
|
+
PostcodeAnywhere::Error::RequestTimeout
|
85
|
+
)
|
86
|
+
end
|
87
|
+
it 'catches and reraises Timeout errors' do
|
88
|
+
allow(connection_client).to receive(:connection).and_raise(
|
89
|
+
Timeout::Error.new('execution expired')
|
90
|
+
)
|
91
|
+
expect { connection_client.send(:request, :get, '/path') }.to raise_error(
|
92
|
+
PostcodeAnywhere::Error::RequestTimeout
|
93
|
+
)
|
94
|
+
end
|
95
|
+
it 'catches and reraises Faraday client errors' do
|
96
|
+
allow(connection_client).to receive(:connection).and_raise(
|
97
|
+
Faraday::Error::ClientError.new('connection failed')
|
98
|
+
)
|
99
|
+
expect { connection_client.send(:request, :get, '/path') }.to raise_error(
|
100
|
+
PostcodeAnywhere::Error
|
101
|
+
)
|
102
|
+
end
|
103
|
+
it 'catches and reraises JSON::ParserError errors' do
|
104
|
+
allow(connection_client).to receive(:connection).and_raise(
|
105
|
+
JSON::ParserError.new('unexpected token')
|
106
|
+
)
|
107
|
+
expect { connection_client.send(:request, :get, '/path') }.to raise_error(
|
108
|
+
PostcodeAnywhere::Error
|
109
|
+
)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
describe '#compile_body' do
|
114
|
+
let(:connection_client) { PostcodeAnywhere::Client.new(endpoint: 'http://localhost') }
|
115
|
+
it 'takes a hash of body params and returns them represented as a JSON string' do
|
116
|
+
sample_hash = { 'test_item_1' => 'this_is_a_test_item' }
|
117
|
+
expect(connection_client.send(:compile_body, sample_hash)).to eq(
|
118
|
+
'{"test_item_1":"this_is_a_test_item"}'
|
119
|
+
)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
124
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
describe 'configuration' do
|
2
|
+
|
3
|
+
after do
|
4
|
+
PostcodeAnywhere.reset
|
5
|
+
end
|
6
|
+
|
7
|
+
describe '.configure' do
|
8
|
+
PostcodeAnywhere::Configuration::VALID_CONFIG_KEYS.each do |key|
|
9
|
+
it "should set the #{key}" do
|
10
|
+
PostcodeAnywhere.configure do |config|
|
11
|
+
config.send("#{key}=", key)
|
12
|
+
expect(PostcodeAnywhere.send(key)).to eq key
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '.api_key' do
|
19
|
+
subject { PostcodeAnywhere.api_key }
|
20
|
+
it 'should return default api key' do
|
21
|
+
expect(PostcodeAnywhere::Configuration::DEFAULT_API_KEY).to eq ''
|
22
|
+
is_expected.to eq PostcodeAnywhere::Configuration::DEFAULT_API_KEY
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '.endpoint' do
|
27
|
+
subject { PostcodeAnywhere.endpoint }
|
28
|
+
it 'should return default api endpoint' do
|
29
|
+
expect(PostcodeAnywhere::Configuration::DEFAULT_ENDPOINT).to eq(
|
30
|
+
'http://services.postcodeanywhere.co.uk/'
|
31
|
+
)
|
32
|
+
is_expected.to eq PostcodeAnywhere::Configuration::DEFAULT_ENDPOINT
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe '.format' do
|
37
|
+
subject { PostcodeAnywhere.format }
|
38
|
+
it 'should return default REST content format of json' do
|
39
|
+
expect(PostcodeAnywhere::Configuration::DEFAULT_FORMAT).to eq :json
|
40
|
+
is_expected.to eq PostcodeAnywhere::Configuration::DEFAULT_FORMAT
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe '.user_agent' do
|
45
|
+
subject { PostcodeAnywhere.user_agent }
|
46
|
+
it 'should return default user agent' do
|
47
|
+
expect(PostcodeAnywhere::Configuration::DEFAULT_USER_AGENT).to eq(
|
48
|
+
"Postcode Anywhere Ruby Gem/#{PostcodeAnywhere::VERSION}"
|
49
|
+
)
|
50
|
+
is_expected.to eq PostcodeAnywhere::Configuration::DEFAULT_USER_AGENT
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe '.method' do
|
55
|
+
subject { PostcodeAnywhere.method }
|
56
|
+
it 'should return default user agent' do
|
57
|
+
expect(PostcodeAnywhere::Configuration::DEFAULT_METHOD).to eq :post
|
58
|
+
is_expected.to eq PostcodeAnywhere::Configuration::DEFAULT_METHOD
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
describe PostcodeAnywhere::EmailValidation::Interactive do
|
2
|
+
before do
|
3
|
+
@client = PostcodeAnywhere::EmailValidation::Client.new(api_key: 'interactive_test_key')
|
4
|
+
end
|
5
|
+
describe '#validate_email_address' do
|
6
|
+
before do
|
7
|
+
@endpoint = 'EmailValidation/Interactive/Validate/v1.10/json3.ws'
|
8
|
+
@query_params = { 'Key' => 'interactive_test_key', 'Email' => 'A', 'Timeout' => 4 }
|
9
|
+
end
|
10
|
+
context 'when a single result is returned' do
|
11
|
+
before do
|
12
|
+
stub_get(@endpoint).with(query: @query_params).to_return(
|
13
|
+
body: fixture('email_validation_validate_email.json')
|
14
|
+
)
|
15
|
+
end
|
16
|
+
it 'requests the correct resource' do
|
17
|
+
@client.validate_email_address('A', 4)
|
18
|
+
expect(a_get(@endpoint).with(query: @query_params)).to have_been_made
|
19
|
+
end
|
20
|
+
it 'returns a Postcode Anywhere email validation result' do
|
21
|
+
item = @client.validate_email_address('A', 4)
|
22
|
+
expect(item).to be_a PostcodeAnywhere::EmailValidation::ValidationResult
|
23
|
+
expect(item.email).to eq 'info@google.com'
|
24
|
+
expect(item.mail_server).to eq 'alt4.aspmx.l.google.com'
|
25
|
+
expect(item.valid_format).to eq true
|
26
|
+
expect(item.found_dns_record).to eq true
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
describe PostcodeAnywhere::Error do
|
2
|
+
before do
|
3
|
+
@client = PostcodeAnywhere::CleansePlus::Client.new(api_key: 'error_test_key')
|
4
|
+
end
|
5
|
+
|
6
|
+
describe '#message' do
|
7
|
+
it 'returns the error message' do
|
8
|
+
error = PostcodeAnywhere::Error.new('execution expired')
|
9
|
+
expect(error.message).to eq('execution expired')
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe '#code' do
|
14
|
+
it 'returns the error code' do
|
15
|
+
error = PostcodeAnywhere::Error.new('execution expired', 123)
|
16
|
+
expect(error.code).to eq(123)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '#cause' do
|
21
|
+
it 'returns the error cause message' do
|
22
|
+
error = PostcodeAnywhere::Error.new('execution expired', 1, 'some cause')
|
23
|
+
expect(error.cause).to eq('some cause')
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '#resolution' do
|
28
|
+
it 'returns the error resolution message' do
|
29
|
+
error = PostcodeAnywhere::Error.new('execution expired', 1, '', 'some resolution')
|
30
|
+
expect(error.resolution).to eq('some resolution')
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context "when JSON body contains an 'Error:'" do
|
35
|
+
before do
|
36
|
+
body =
|
37
|
+
'[{"Error":"2","Description":"UK","Cause":"CS","Resolution":"RS"}]'
|
38
|
+
|
39
|
+
endpoint = PostcodeAnywhere::CleansePlus::Interactive::CLEANSE_ADDRESS_ENDPOINT
|
40
|
+
query_params = { 'Key' => 'error_test_key', 'Address' => 'A' }
|
41
|
+
stub_get(endpoint).with(query: query_params).to_return(
|
42
|
+
status: 200,
|
43
|
+
body: body,
|
44
|
+
headers: { content_type: 'application/json; charset=utf-8' }
|
45
|
+
)
|
46
|
+
end
|
47
|
+
it 'raises an exception with the proper message' do
|
48
|
+
expect { @client.address_candidates_for('A') }.to raise_error do |error|
|
49
|
+
expect(error).to be_a PostcodeAnywhere::Error::UnknownKey
|
50
|
+
expect(error.message).to eq 'UK'
|
51
|
+
expect(error.cause).to eq 'CS'
|
52
|
+
expect(error.resolution).to eq 'RS'
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
PostcodeAnywhere::Error.errors.each do |status, exception|
|
58
|
+
context "when HTTP status is #{status}" do
|
59
|
+
before do
|
60
|
+
endpoint = PostcodeAnywhere::CleansePlus::Interactive::CLEANSE_ADDRESS_ENDPOINT
|
61
|
+
query_params = { 'Key' => 'error_test_key', 'Address' => 'A' }
|
62
|
+
stub_get(endpoint).with(query: query_params).to_return(status: status)
|
63
|
+
end
|
64
|
+
it "raises #{exception}" do
|
65
|
+
expect { @client.address_candidates_for('A') }.to raise_error(exception)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
[{"Bank":"HSBC BANK PLC","BankBIC":"MIDLGB21","Branch":"Cheltenham Bath Road","BranchBIC":"03N","ContactAddressLine1":"109 Bath Road","ContactAddressLine2":"l2","ContactPostTown":"Cheltenham","ContactPostcode":"GL53 7RA","ContactPhone":"01234567890","ContactFax":"111","FasterPaymentsSupported":"True","CHAPSSupported":"True"}]
|
@@ -0,0 +1 @@
|
|
1
|
+
[{"IsCorrect":"True","IsDirectDebitCapable":"True","StatusInformation":"OK","CorrectedSortCode":"012345","CorrectedAccountNumber":"12345678","IBAN":"1111111111111111111111","Bank":"NATIONAL WESTMINSTER BANK PLC","BankBIC":"BIKBIKBI","Branch":"A bank in town","BranchBIC":"01X","ContactAddressLine1":"Leicester Rcsc","ContactAddressLine2":"Bede House","ContactPostTown":"Leicester","ContactPostcode":"LE2 7EJ","ContactPhone":"0870 2403355","ContactFax":"222","FasterPaymentsSupported":"True","CHAPSSupported":"True"}]
|
@@ -0,0 +1 @@
|
|
1
|
+
[{"Id":"GBR|PR|11507281|0|0|0","DomesticId":"11507281","Language":"ENG","LanguageAlternatives":"ENG","Department":"dpmnt","Company":"Asda Stores Ltd","SubBuilding":"sub1","BuildingNumber":"building1","BuildingName":"buildingz","SecondaryStreet":"secondy","Street":"strt","Block":"blk2","Neighbourhood":"ngbrhd","District":"dstrkt","City":"Ipswich","Line1":"ln12","Line2":"ln22","Line3":"ln33","Line4":"ln44","Line5":"ln55","AdminAreaName":"Ipswich","AdminAreaCode":"42UD","Province":"Suffolk","ProvinceName":"Suffolk","ProvinceCode":"provcode","PostalCode":"IP1 5PD","CountryName":"United Kingdom","CountryIso2":"GB","CountryIso3":"GBR","CountryIsoNumber":"826","SortingNumber1":"56123","SortingNumber2":"srt2","Barcode":"(IP15PD1AL)","POBoxNumber":"pbx2","Label":"Asda Stores Ltd IPSWICH IP1 5PD UNITED KINGDOM","Type":"Commercial","DataLevel":"Premise"}]
|
@@ -0,0 +1 @@
|
|
1
|
+
[{"Id":"GBR|CN|QgB1AGMAawBpAG4AZwBoAGEAbQAgAFAAYQBsAGEAYwBlACwAIABMAG8AbgBkAG8AbgAsACAAUwBXADEAQQAuAC4ALgA*|2562-0-3","Text":"Buckingham Palace, London, SW1A...","Highlight":"1-3","Cursor":"0","Description":"3 Results","Next":"Find"}, {"Id":"GBR|CN|QgB1AGMAawBpAG4AZwBoAGEAbQAgAFAAYQBsAGEAYwBlACAAUgBvAGEAZAAsACAATABvAG4AZABvAG4ALAAgAFMAVwAxAFcALgAuAC4A|2567-0-4","Text":"Buckingham Palace Road, London, SW1W...","Highlight":"","Cursor":"0","Description":"80 Results","Next":"Find"}, {"Id":"GBR|PR|23768658|0|0|0","Text":"Buckingham Balti House, 42, Buckingham Palace Road, London, SW1W...","Highlight":"","Cursor":"67","Description":"","Next":"Retrieve"}, {"Id":"GBR|PR|23748336|0|0|0","Text":"Buckingham Coffee Lounge, 19-21, Palace Street, London, SW1E...","Highlight":"","Cursor":"63","Description":"","Next":"Retrieve"}, {"Id":"GBR|PR|52858007|0|0|0","Text":"Gardeners Lodge, Buckingham Palace Gardens, Lower Grosvenor Place, London, SW1W...","Highlight":"","Cursor":"82","Description":"","Next":"Retrieve"}, {"Id":"GBR|PR|52630298|0|0|0","Text":"Buckingham Palace Gift Shop, 7-9, Buckingham Palace Road, London, SW1W...","Highlight":"","Cursor":"73","Description":"","Next":"Retrieve"}]
|
@@ -0,0 +1 @@
|
|
1
|
+
{"Items":[{"Udprn":26742632,"Company":"some company","Department":"some department","Line1":"Enigma House","Line2":"Elgar Business Centre","Line3":"Moseley Road","Line4":"Hallow","Line5":"where is this","PostTown":"Worcester","County":"Worcestershire","Postcode":"WR2 6NJ","Mailsort":94141,"Barcode":"(WR26NJ3UT)","Type":"Residential","DeliveryPointSuffix":"3U","SubBuilding":"Enigma House","BuildingName":"Elgar Business Centre","BuildingNumber":"3","PrimaryStreet":"Moseley Road","SecondaryStreet":"secondy","DoubleDependentLocality":"ddlocal","DependentLocality":"Hallow","PoBox":"po123"},{"Udprn":2222,"Company":"some company","Department":"some department","Line1":"Enigma House","Line2":"Elgar Business Centre","Line3":"Moseley Road","Line4":"Hallow","Line5":"where is this","PostTown":"Worcester","County":"Worcestershire","Postcode":"WR2 6NJ","Mailsort":94141,"Barcode":"(WR26NJ3UT)","Type":"Residential","DeliveryPointSuffix":"3U","SubBuilding":"Enigma House","BuildingName":"Elgar Business Centre","BuildingNumber":"3","PrimaryStreet":"Moseley Road","SecondaryStreet":"secondy","DoubleDependentLocality":"ddlocal","DependentLocality":"Hallow","PoBox":"po123"}]}
|
@@ -0,0 +1 @@
|
|
1
|
+
[{"Udprn":26742632,"Company":"some company","Department":"some department","Line1":"Enigma House","Line2":"Elgar Business Centre","Line3":"Moseley Road","Line4":"Hallow","Line5":"where is this","PostTown":"Worcester","County":"Worcestershire","Postcode":"WR2 6NJ","Mailsort":94141,"Barcode":"(WR26NJ3UT)","Type":"Residential","DeliveryPointSuffix":"3U","SubBuilding":"Enigma House","BuildingName":"Elgar Business Centre","BuildingNumber":"3","PrimaryStreet":"Moseley Road","SecondaryStreet":"secondy","DoubleDependentLocality":"ddlocal","DependentLocality":"Hallow","PoBox":"po123"}]
|
@@ -0,0 +1 @@
|
|
1
|
+
[{"Email":"info@google.com","MailServer":"alt4.aspmx.l.google.com","ValidFormat":"True","FoundDnsRecord":"True"}]
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
Bundler.setup
|
3
|
+
|
4
|
+
require 'postcode_anywhere'
|
5
|
+
|
6
|
+
require 'webmock/rspec'
|
7
|
+
|
8
|
+
WebMock.disable_net_connect!()
|
9
|
+
|
10
|
+
RSpec.configure do |config|
|
11
|
+
config.expect_with :rspec do |c|
|
12
|
+
c.syntax = :expect
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def stub_get(path)
|
17
|
+
stub_request(:get, PostcodeAnywhere.endpoint + path)
|
18
|
+
end
|
19
|
+
|
20
|
+
def stub_post(path)
|
21
|
+
stub_request(:post, PostcodeAnywhere.endpoint + path)
|
22
|
+
end
|
23
|
+
|
24
|
+
def a_post(path)
|
25
|
+
a_request(:post, PostcodeAnywhere.endpoint + path)
|
26
|
+
end
|
27
|
+
|
28
|
+
def a_get(path)
|
29
|
+
a_request(:get, PostcodeAnywhere.endpoint + path)
|
30
|
+
end
|
31
|
+
|
32
|
+
def fixture_path
|
33
|
+
File.expand_path('../postcode_anywhere/fixtures', __FILE__)
|
34
|
+
end
|
35
|
+
|
36
|
+
def fixture(file)
|
37
|
+
File.new(fixture_path + '/' + file)
|
38
|
+
end
|
metadata
ADDED
@@ -0,0 +1,281 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: postcode-anywhere
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Edward Woodcock
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-09-25 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: faraday
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.9'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.9.0
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0.9'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.9.0
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: memoizable
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0.4'
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 0.4.2
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0.4'
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 0.4.2
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: pre-commit
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0.19'
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 0.19.0
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0.19'
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: 0.19.0
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: webmock
|
75
|
+
requirement: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - "~>"
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '1.18'
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 1.18.0
|
83
|
+
type: :development
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.18'
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: 1.18.0
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: rubocop
|
95
|
+
requirement: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - "~>"
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0.26'
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: 0.26.1
|
103
|
+
type: :development
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0.26'
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: 0.26.1
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: rspec
|
115
|
+
requirement: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - "~>"
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '3.1'
|
120
|
+
- - ">="
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: 3.1.0
|
123
|
+
type: :development
|
124
|
+
prerelease: false
|
125
|
+
version_requirements: !ruby/object:Gem::Requirement
|
126
|
+
requirements:
|
127
|
+
- - "~>"
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: '3.1'
|
130
|
+
- - ">="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: 3.1.0
|
133
|
+
- !ruby/object:Gem::Dependency
|
134
|
+
name: spring-commands-rspec
|
135
|
+
requirement: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - "~>"
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '1.0'
|
140
|
+
- - ">="
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: 1.0.2
|
143
|
+
type: :development
|
144
|
+
prerelease: false
|
145
|
+
version_requirements: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - "~>"
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '1.0'
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 1.0.2
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: bundler
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '1.6'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '1.6'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: rake
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '10.0'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '10.0'
|
181
|
+
description: A number of fully-tested clients for interacting with all of the available
|
182
|
+
postcode anywhere services, including capture, cleansing, payment validation and
|
183
|
+
email validation
|
184
|
+
email:
|
185
|
+
- edward@simple-merchant.com
|
186
|
+
executables: []
|
187
|
+
extensions: []
|
188
|
+
extra_rdoc_files: []
|
189
|
+
files:
|
190
|
+
- ".gitignore"
|
191
|
+
- ".rspec"
|
192
|
+
- ".rubocop.yml"
|
193
|
+
- Gemfile
|
194
|
+
- Gemfile.lock
|
195
|
+
- LICENSE.txt
|
196
|
+
- README.md
|
197
|
+
- Rakefile
|
198
|
+
- config/pre_commit.yml
|
199
|
+
- lib/postcode_anywhere.rb
|
200
|
+
- lib/postcode_anywhere/bank_account_validation/bank_branch.rb
|
201
|
+
- lib/postcode_anywhere/bank_account_validation/client.rb
|
202
|
+
- lib/postcode_anywhere/bank_account_validation/interactive.rb
|
203
|
+
- lib/postcode_anywhere/bank_account_validation/validation_result.rb
|
204
|
+
- lib/postcode_anywhere/capture_plus/client.rb
|
205
|
+
- lib/postcode_anywhere/capture_plus/interactive.rb
|
206
|
+
- lib/postcode_anywhere/capture_plus/query_type.rb
|
207
|
+
- lib/postcode_anywhere/capture_plus/retrieve_result.rb
|
208
|
+
- lib/postcode_anywhere/capture_plus/search_result.rb
|
209
|
+
- lib/postcode_anywhere/cleanse_plus/cleansed_address.rb
|
210
|
+
- lib/postcode_anywhere/cleanse_plus/client.rb
|
211
|
+
- lib/postcode_anywhere/cleanse_plus/interactive.rb
|
212
|
+
- lib/postcode_anywhere/client.rb
|
213
|
+
- lib/postcode_anywhere/configuration.rb
|
214
|
+
- lib/postcode_anywhere/email_validation/client.rb
|
215
|
+
- lib/postcode_anywhere/email_validation/interactive.rb
|
216
|
+
- lib/postcode_anywhere/email_validation/validation_result.rb
|
217
|
+
- lib/postcode_anywhere/error.rb
|
218
|
+
- lib/postcode_anywhere/model_base.rb
|
219
|
+
- lib/postcode_anywhere/request.rb
|
220
|
+
- lib/postcode_anywhere/response/parse_json.rb
|
221
|
+
- lib/postcode_anywhere/response/raise_error.rb
|
222
|
+
- lib/postcode_anywhere/utils.rb
|
223
|
+
- lib/postcode_anywhere/version.rb
|
224
|
+
- postcode_anywhere.gemspec
|
225
|
+
- spec/postcode_anywhere/bank_account_validation/interactive_spec.rb
|
226
|
+
- spec/postcode_anywhere/capture_plus/interactive_spec.rb
|
227
|
+
- spec/postcode_anywhere/cleanse_plus/interactive_spec.rb
|
228
|
+
- spec/postcode_anywhere/client_spec.rb
|
229
|
+
- spec/postcode_anywhere/configuration_spec.rb
|
230
|
+
- spec/postcode_anywhere/email_validation/interactive_spec.rb
|
231
|
+
- spec/postcode_anywhere/error_spec.rb
|
232
|
+
- spec/postcode_anywhere/fixtures/bank_account_retrieve_by_sort.json
|
233
|
+
- spec/postcode_anywhere/fixtures/bank_account_validate_account.json
|
234
|
+
- spec/postcode_anywhere/fixtures/capture_plus_retrieve.json
|
235
|
+
- spec/postcode_anywhere/fixtures/capture_plus_search.json
|
236
|
+
- spec/postcode_anywhere/fixtures/cleanse_address_multi.json
|
237
|
+
- spec/postcode_anywhere/fixtures/cleanse_address_single.json
|
238
|
+
- spec/postcode_anywhere/fixtures/email_validation_validate_email.json
|
239
|
+
- spec/postcode_anywhere/model_base_spec.rb
|
240
|
+
- spec/spec_helper.rb
|
241
|
+
homepage: https://github.com/simplemerchant/postcode-anywhere
|
242
|
+
licenses:
|
243
|
+
- MIT
|
244
|
+
metadata: {}
|
245
|
+
post_install_message:
|
246
|
+
rdoc_options: []
|
247
|
+
require_paths:
|
248
|
+
- lib
|
249
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
250
|
+
requirements:
|
251
|
+
- - ">="
|
252
|
+
- !ruby/object:Gem::Version
|
253
|
+
version: '0'
|
254
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
255
|
+
requirements:
|
256
|
+
- - ">="
|
257
|
+
- !ruby/object:Gem::Version
|
258
|
+
version: '0'
|
259
|
+
requirements: []
|
260
|
+
rubyforge_project:
|
261
|
+
rubygems_version: 2.4.1
|
262
|
+
signing_key:
|
263
|
+
specification_version: 4
|
264
|
+
summary: Full set of Postcode Anywhere API clients - http://postcodeanywhere.co.uk
|
265
|
+
test_files:
|
266
|
+
- spec/postcode_anywhere/bank_account_validation/interactive_spec.rb
|
267
|
+
- spec/postcode_anywhere/capture_plus/interactive_spec.rb
|
268
|
+
- spec/postcode_anywhere/cleanse_plus/interactive_spec.rb
|
269
|
+
- spec/postcode_anywhere/client_spec.rb
|
270
|
+
- spec/postcode_anywhere/configuration_spec.rb
|
271
|
+
- spec/postcode_anywhere/email_validation/interactive_spec.rb
|
272
|
+
- spec/postcode_anywhere/error_spec.rb
|
273
|
+
- spec/postcode_anywhere/fixtures/bank_account_retrieve_by_sort.json
|
274
|
+
- spec/postcode_anywhere/fixtures/bank_account_validate_account.json
|
275
|
+
- spec/postcode_anywhere/fixtures/capture_plus_retrieve.json
|
276
|
+
- spec/postcode_anywhere/fixtures/capture_plus_search.json
|
277
|
+
- spec/postcode_anywhere/fixtures/cleanse_address_multi.json
|
278
|
+
- spec/postcode_anywhere/fixtures/cleanse_address_single.json
|
279
|
+
- spec/postcode_anywhere/fixtures/email_validation_validate_email.json
|
280
|
+
- spec/postcode_anywhere/model_base_spec.rb
|
281
|
+
- spec/spec_helper.rb
|