addressfinder 1.6.2 → 1.7.0
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 +4 -4
- data/.travis.yml +1 -1
- data/CHANGELOG.md +4 -0
- data/Dockerfile +28 -0
- data/Guardfile +1 -1
- data/README.md +36 -1
- data/addressfinder.gemspec +2 -2
- data/docker-compose.yml +11 -0
- data/lib/addressfinder.rb +5 -0
- data/lib/addressfinder/address_autocomplete.rb +77 -0
- data/lib/addressfinder/version.rb +1 -1
- data/spec/lib/addressfinder/address_autocomplete_spec.rb +95 -0
- metadata +11 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b611487efde8627017242a6a2c631fb4c617b9c4721ed803f75c85ee466c86e3
|
4
|
+
data.tar.gz: 4d3f919d8b9e2217b4911f8b7da663c7793b8f09bd61377474760b69f3818907
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7241c2ec121dcd4b3381968bf53394ec8911b0dfe6b1a03436055c739ad50c12180371ebd3ec48209fa82d63d0a0d8fcffeda44389054a132f84bff3edd60153
|
7
|
+
data.tar.gz: d1e00512432a0c15f8f19fc4b5a629408d2eab5ee216e9d76176e2574e4071080c1c181d250343da997d58ff6d799d5dd74bb87849fc88296d9e92b422a13326
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/Dockerfile
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# Use the barebones version of Ruby 2.6.1
|
2
|
+
FROM ruby:2.6
|
3
|
+
|
4
|
+
# Install dependencies:
|
5
|
+
# - build-essential: To ensure certain gems can be compiled
|
6
|
+
# - nodejs: Compile assets
|
7
|
+
# - bundler: ensure most recent version is installed
|
8
|
+
RUN apt-get update && apt-get install -qq -y build-essential --fix-missing --no-install-recommends
|
9
|
+
RUN gem install bundler
|
10
|
+
|
11
|
+
# Set an environment variable to store where the app is installed to inside
|
12
|
+
# of the Docker image.
|
13
|
+
ENV LANG C.UTF-8
|
14
|
+
ENV BUNDLE_PATH /bundle
|
15
|
+
ENV INSTALL_PATH /addressfinder-ruby
|
16
|
+
RUN mkdir -p $INSTALL_PATH
|
17
|
+
|
18
|
+
# Create address cleansing directories
|
19
|
+
RUN mkdir -p $INSTALL_PATH/cleansing/originals
|
20
|
+
RUN mkdir -p $INSTALL_PATH/cleansing/cleansed
|
21
|
+
|
22
|
+
# This sets the context of where commands will be ran in and is documented
|
23
|
+
# on Docker's website extensively.
|
24
|
+
WORKDIR $INSTALL_PATH
|
25
|
+
|
26
|
+
ADD . $INSTALL_PATH
|
27
|
+
|
28
|
+
RUN bundle install
|
data/Guardfile
CHANGED
data/README.md
CHANGED
@@ -65,7 +65,12 @@ else
|
|
65
65
|
end
|
66
66
|
```
|
67
67
|
|
68
|
-
#### Address
|
68
|
+
#### Address Search
|
69
|
+
|
70
|
+
The Address Search API supports the following address sets:
|
71
|
+
|
72
|
+
* New Zealand addresses
|
73
|
+
* Australian addresses from the GNAF dataset only
|
69
74
|
|
70
75
|
```ruby
|
71
76
|
begin
|
@@ -81,6 +86,26 @@ rescue AddressFinder::RequestRejectedError => e
|
|
81
86
|
end
|
82
87
|
```
|
83
88
|
|
89
|
+
#### Address Autocomplete
|
90
|
+
|
91
|
+
The Address Autocomplete API supports the following address sets:
|
92
|
+
|
93
|
+
* Australian addresses from the GNAF and PAF datasets only
|
94
|
+
|
95
|
+
```ruby
|
96
|
+
begin
|
97
|
+
results = AddressFinder.address_autocomplete(q: '275 high st, bel', au_paf: '1')
|
98
|
+
if results.any?
|
99
|
+
$stdout.puts "Success: #{results}"
|
100
|
+
else
|
101
|
+
$stdout.puts "Sorry, there were no address matches"
|
102
|
+
end
|
103
|
+
rescue AddressFinder::RequestRejectedError => e
|
104
|
+
response = JSON.parse(e.body)
|
105
|
+
$stdout.puts response['message']
|
106
|
+
end
|
107
|
+
```
|
108
|
+
|
84
109
|
#### Address Metadata
|
85
110
|
|
86
111
|
```ruby
|
@@ -171,3 +196,13 @@ rescue AddressFinder::RequestRejectedError => e
|
|
171
196
|
end
|
172
197
|
```
|
173
198
|
|
199
|
+
### Testing
|
200
|
+
|
201
|
+
You can run all the specs with the following command:
|
202
|
+
|
203
|
+
`docker-compose up`
|
204
|
+
|
205
|
+
You can `guard` for repeating test runs (while editing new code):
|
206
|
+
|
207
|
+
`docker-compose run ruby bundle exec guard`
|
208
|
+
|
data/addressfinder.gemspec
CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |gem|
|
|
20
20
|
gem.add_dependency 'multi_json', '~> 1.11'
|
21
21
|
gem.add_development_dependency 'rspec', '~> 3.3'
|
22
22
|
gem.add_development_dependency 'guard-rspec', '~> 4.6'
|
23
|
-
gem.add_development_dependency 'rake', '~>
|
23
|
+
gem.add_development_dependency 'rake', '~> 13.0'
|
24
24
|
gem.add_development_dependency 'webmock', '~> 1.21'
|
25
|
-
gem.add_development_dependency 'listen', '~> 3.
|
25
|
+
gem.add_development_dependency 'listen', '~> 3.2'
|
26
26
|
end
|
data/docker-compose.yml
ADDED
data/lib/addressfinder.rb
CHANGED
@@ -6,6 +6,7 @@ require 'addressfinder/location_info'
|
|
6
6
|
require 'addressfinder/location_search'
|
7
7
|
require 'addressfinder/address_info'
|
8
8
|
require 'addressfinder/address_search'
|
9
|
+
require 'addressfinder/address_autocomplete'
|
9
10
|
require 'addressfinder/bulk'
|
10
11
|
require 'addressfinder/errors'
|
11
12
|
require 'addressfinder/util'
|
@@ -43,6 +44,10 @@ module AddressFinder
|
|
43
44
|
AddressFinder::AddressSearch.new(params: args, http: AddressFinder::HTTP.new(configuration)).perform.results
|
44
45
|
end
|
45
46
|
|
47
|
+
def address_autocomplete(args={})
|
48
|
+
AddressFinder::AddressAutocomplete.new(params: args, http: AddressFinder::HTTP.new(configuration)).perform.results
|
49
|
+
end
|
50
|
+
|
46
51
|
def address_info(args={})
|
47
52
|
AddressFinder::AddressInfo.new(params: args, http: AddressFinder::HTTP.new(configuration)).perform.result
|
48
53
|
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
|
3
|
+
module AddressFinder
|
4
|
+
class AddressAutocomplete
|
5
|
+
|
6
|
+
attr_reader :results
|
7
|
+
|
8
|
+
def initialize(params:, http:)
|
9
|
+
@http = http
|
10
|
+
@country = params.delete(:country) || 'au'
|
11
|
+
|
12
|
+
@params = params
|
13
|
+
@params[:key] ||= config.api_key
|
14
|
+
@params[:secret] ||= config.api_secret
|
15
|
+
end
|
16
|
+
|
17
|
+
def perform
|
18
|
+
validate_params
|
19
|
+
build_request
|
20
|
+
execute_request
|
21
|
+
build_result
|
22
|
+
|
23
|
+
self
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
attr_reader :request_uri, :params, :country, :http
|
29
|
+
attr_accessor :response_body, :response_status
|
30
|
+
attr_writer :results
|
31
|
+
|
32
|
+
def validate_params
|
33
|
+
if country != 'au'
|
34
|
+
raise AddressFinder::RequestRejectedError.new("400", "#address_autocomplete only available for Australian addresses")
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def build_request
|
39
|
+
@request_uri = "/api/au/address/autocomplete.json?#{encoded_params}"
|
40
|
+
end
|
41
|
+
|
42
|
+
def encoded_params
|
43
|
+
Util.encode_and_join_params(params)
|
44
|
+
end
|
45
|
+
|
46
|
+
def execute_request
|
47
|
+
request = Net::HTTP::Get.new(request_uri)
|
48
|
+
|
49
|
+
response = http.request(request)
|
50
|
+
|
51
|
+
self.response_body = response.body
|
52
|
+
self.response_status = response.code
|
53
|
+
end
|
54
|
+
|
55
|
+
def build_result
|
56
|
+
case response_status
|
57
|
+
when '200'
|
58
|
+
self.results = response_hash['completions'].map do |result_hash|
|
59
|
+
Result.new(result_hash)
|
60
|
+
end
|
61
|
+
else
|
62
|
+
raise AddressFinder::RequestRejectedError.new(@response_status, @response_body)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def response_hash
|
67
|
+
@_response_hash ||= MultiJson.load(response_body)
|
68
|
+
end
|
69
|
+
|
70
|
+
def config
|
71
|
+
@_config ||= AddressFinder.configuration
|
72
|
+
end
|
73
|
+
|
74
|
+
class Result < OpenStruct
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe AddressFinder::AddressAutocomplete do
|
4
|
+
before do
|
5
|
+
AddressFinder.configure do |af|
|
6
|
+
af.api_key = 'XXX'
|
7
|
+
af.api_secret = 'YYY'
|
8
|
+
af.default_country = 'au'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe '#build_request' do
|
13
|
+
let(:locator){ AddressFinder::AddressAutocomplete.new(params: args, http: http) }
|
14
|
+
let(:http){ AddressFinder::HTTP.new(AddressFinder.configuration) }
|
15
|
+
|
16
|
+
subject(:request_uri){ locator.send(:build_request) }
|
17
|
+
|
18
|
+
context 'with minimal arguments' do
|
19
|
+
let(:args){ {q: '186 willis'} }
|
20
|
+
|
21
|
+
it { expect(request_uri).to eq('/api/au/address/autocomplete.json?q=186+willis&key=XXX&secret=YYY') }
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'with more arguments' do
|
25
|
+
let(:args){ {q: '186 willis st', au_paf: 1, max: 10} }
|
26
|
+
|
27
|
+
it { expect(request_uri).to eq('/api/au/address/autocomplete.json?q=186+willis+st&au_paf=1&max=10&key=XXX&secret=YYY') }
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'with a country override' do
|
31
|
+
let(:args){ {q: '186 willis st', country: 'au'} }
|
32
|
+
|
33
|
+
it { expect(request_uri).to eq('/api/au/address/autocomplete.json?q=186+willis+st&key=XXX&secret=YYY') }
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'with a key override' do
|
37
|
+
let(:args){ {q: '186 willis st', key: 'AAA'} }
|
38
|
+
|
39
|
+
it { expect(request_uri).to eq('/api/au/address/autocomplete.json?q=186+willis+st&key=AAA&secret=YYY') }
|
40
|
+
end
|
41
|
+
|
42
|
+
context 'with a secret override' do
|
43
|
+
let(:args){ {q: '186 willis st', secret: 'BBB'} }
|
44
|
+
|
45
|
+
it { expect(request_uri).to eq('/api/au/address/autocomplete.json?q=186+willis+st&secret=BBB&key=XXX') }
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe '#validate_params' do
|
50
|
+
let(:locator){ AddressFinder::AddressAutocomplete.new(params: args, http: http) }
|
51
|
+
let(:http){ AddressFinder::HTTP.new(AddressFinder.configuration) }
|
52
|
+
|
53
|
+
subject(:validate_params){ locator.send(:validate_params) }
|
54
|
+
|
55
|
+
context 'with wrong country' do
|
56
|
+
let(:args){ {q: '186 willis st', country: 'nz'} }
|
57
|
+
|
58
|
+
it { expect{validate_params}.to raise_error(AddressFinder::RequestRejectedError) }
|
59
|
+
end
|
60
|
+
|
61
|
+
context 'with correct country' do
|
62
|
+
let(:args){ {q: '186 willis st', country: 'au'} }
|
63
|
+
|
64
|
+
it { expect{validate_params}.not_to raise_error }
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe '#build_result' do
|
69
|
+
let(:locator){ AddressFinder::AddressSearch.new(params: {q: 'ignored'}, http: nil) }
|
70
|
+
|
71
|
+
before do
|
72
|
+
locator.send('response_body=', body)
|
73
|
+
locator.send('response_status=', status)
|
74
|
+
locator.send(:build_result)
|
75
|
+
end
|
76
|
+
|
77
|
+
subject(:results){ locator.results }
|
78
|
+
|
79
|
+
context 'with completions' do
|
80
|
+
let(:body){ '{"completions":[{"a":"184 William Jones Drive, Otangarei, Whangarei 0112","pxid":"2-.9.2U.F.F.2I","v":1},{"a":"184 Williams Street, Kaiapoi 7630","pxid":"2-.3.1q.2.4G.4c","v":0},{"a":"184 Willis Street, Te Aro, Wellington 6011","pxid":"2-.F.1W.p.1D.1W","v":0}],"paid":true}' }
|
81
|
+
let(:status){ '200' }
|
82
|
+
|
83
|
+
it { expect(results.size).to eq(3) }
|
84
|
+
it { expect(results.first.class).to eq(AddressFinder::AddressSearch::Result) }
|
85
|
+
it { expect(results.first.a).to eq("184 William Jones Drive, Otangarei, Whangarei 0112") }
|
86
|
+
end
|
87
|
+
|
88
|
+
context 'with no completions' do
|
89
|
+
let(:body){ '{"completions":[],"paid":true}' }
|
90
|
+
let(:status){ '200' }
|
91
|
+
|
92
|
+
it { expect(results).to eq([]) }
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: addressfinder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nigel Ramsay
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2020-05-04 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: multi_json
|
@@ -61,14 +61,14 @@ dependencies:
|
|
61
61
|
requirements:
|
62
62
|
- - "~>"
|
63
63
|
- !ruby/object:Gem::Version
|
64
|
-
version: '
|
64
|
+
version: '13.0'
|
65
65
|
type: :development
|
66
66
|
prerelease: false
|
67
67
|
version_requirements: !ruby/object:Gem::Requirement
|
68
68
|
requirements:
|
69
69
|
- - "~>"
|
70
70
|
- !ruby/object:Gem::Version
|
71
|
-
version: '
|
71
|
+
version: '13.0'
|
72
72
|
- !ruby/object:Gem::Dependency
|
73
73
|
name: webmock
|
74
74
|
requirement: !ruby/object:Gem::Requirement
|
@@ -89,14 +89,14 @@ dependencies:
|
|
89
89
|
requirements:
|
90
90
|
- - "~>"
|
91
91
|
- !ruby/object:Gem::Version
|
92
|
-
version: 3.
|
92
|
+
version: '3.2'
|
93
93
|
type: :development
|
94
94
|
prerelease: false
|
95
95
|
version_requirements: !ruby/object:Gem::Requirement
|
96
96
|
requirements:
|
97
97
|
- - "~>"
|
98
98
|
- !ruby/object:Gem::Version
|
99
|
-
version: 3.
|
99
|
+
version: '3.2'
|
100
100
|
description: Ruby client library for AddressFinder
|
101
101
|
email:
|
102
102
|
- nigel.ramsay@abletech.co.nz
|
@@ -110,13 +110,16 @@ files:
|
|
110
110
|
- ".gitignore"
|
111
111
|
- ".travis.yml"
|
112
112
|
- CHANGELOG.md
|
113
|
+
- Dockerfile
|
113
114
|
- Gemfile
|
114
115
|
- Guardfile
|
115
116
|
- LICENSE
|
116
117
|
- README.md
|
117
118
|
- Rakefile
|
118
119
|
- addressfinder.gemspec
|
120
|
+
- docker-compose.yml
|
119
121
|
- lib/addressfinder.rb
|
122
|
+
- lib/addressfinder/address_autocomplete.rb
|
120
123
|
- lib/addressfinder/address_info.rb
|
121
124
|
- lib/addressfinder/address_search.rb
|
122
125
|
- lib/addressfinder/bulk.rb
|
@@ -128,6 +131,7 @@ files:
|
|
128
131
|
- lib/addressfinder/location_search.rb
|
129
132
|
- lib/addressfinder/util.rb
|
130
133
|
- lib/addressfinder/version.rb
|
134
|
+
- spec/lib/addressfinder/address_autocomplete_spec.rb
|
131
135
|
- spec/lib/addressfinder/address_info_spec.rb
|
132
136
|
- spec/lib/addressfinder/address_search_spec.rb
|
133
137
|
- spec/lib/addressfinder/bulk_spec.rb
|
@@ -160,6 +164,7 @@ signing_key:
|
|
160
164
|
specification_version: 4
|
161
165
|
summary: Provides easy access to AddressFinder APIs
|
162
166
|
test_files:
|
167
|
+
- spec/lib/addressfinder/address_autocomplete_spec.rb
|
163
168
|
- spec/lib/addressfinder/address_info_spec.rb
|
164
169
|
- spec/lib/addressfinder/address_search_spec.rb
|
165
170
|
- spec/lib/addressfinder/bulk_spec.rb
|