postcodeinfo-client-ruby 0.1.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 +7 -0
- data/.document +5 -0
- data/.rspec +1 -0
- data/.ruby-gemset +2 -0
- data/.ruby-version +1 -0
- data/.simplecov +6 -0
- data/Gemfile +18 -0
- data/Gemfile.lock +97 -0
- data/LICENSE.MD +19 -0
- data/README.md +150 -0
- data/Rakefile +54 -0
- data/VERSION +1 -0
- data/lib/postcodeinfo-client-ruby.rb +3 -0
- data/lib/postcodeinfo/client.rb +129 -0
- data/lib/postcodeinfo/exceptions.rb +16 -0
- data/lib/postcodeinfo/postcode.rb +65 -0
- data/postcodeinfo-client-ruby.gemspec +80 -0
- data/spec/client_spec.rb +289 -0
- data/spec/postcode_spec.rb +225 -0
- data/spec/spec_helper.rb +22 -0
- metadata +181 -0
@@ -0,0 +1,225 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe PostcodeInfo::Postcode do
|
4
|
+
let(:api_client){ double('api client', make_request: nil) }
|
5
|
+
let(:postcode){ described_class.new('SN51NB', api_client) }
|
6
|
+
|
7
|
+
describe 'constructing a Postcode' do
|
8
|
+
let(:postcode){ 'SN51NB' }
|
9
|
+
|
10
|
+
context 'that is valid' do
|
11
|
+
context 'and does not contain whitespace' do
|
12
|
+
let(:postcode){ 'YO165RB' }
|
13
|
+
|
14
|
+
it 'does not raise an error' do
|
15
|
+
expect{described_class.new(postcode, api_client)}.to_not raise_error
|
16
|
+
end
|
17
|
+
end
|
18
|
+
context 'and contains whitespace' do
|
19
|
+
let(:postcode){ 'N2 8AS'}
|
20
|
+
|
21
|
+
it 'does not raise an error' do
|
22
|
+
expect{described_class.new(postcode, api_client)}.to_not raise_error
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'does not make an API request' do
|
27
|
+
expect( api_client ).to_not receive(:make_request)
|
28
|
+
described_class.new(postcode, api_client)
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'stores a normalised version of the given postcode ' do
|
32
|
+
expect(described_class.new(" AB12 4DE\n", api_client).normalised).to eq('ab124de')
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'that is invalid' do
|
37
|
+
let(:postcode){ 'd0nk 3y5' }
|
38
|
+
|
39
|
+
it 'does not raise an error' do
|
40
|
+
expect{described_class.new(postcode, api_client)}.to_not raise_error
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
describe 'valid?' do
|
47
|
+
let(:postcode){ described_class.new('SN51NB', api_client) }
|
48
|
+
|
49
|
+
context 'when the instance variable is nil' do
|
50
|
+
before do
|
51
|
+
postcode.send(:instance_variable_set, '@valid', nil)
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'performs a lookup on the API' do
|
55
|
+
expect( api_client ).to receive(:valid?)
|
56
|
+
postcode.valid?
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'stores the return value from the API in the instance variable' do
|
60
|
+
allow(api_client).to receive(:valid?).and_return('foo')
|
61
|
+
expect(postcode.valid?).to eq('foo')
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
context 'when the instance variable has a value' do
|
66
|
+
before do
|
67
|
+
postcode.send(:instance_variable_set, '@valid', 'bar')
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'does not perform a lookup on the API' do
|
71
|
+
expect( api_client ).to_not receive(:valid?)
|
72
|
+
postcode.valid?
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'returns the existing value' do
|
76
|
+
expect(postcode.valid?).to eq('bar')
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
|
82
|
+
describe 'addresses' do
|
83
|
+
let(:postcode){ described_class.new('SN51NB', api_client) }
|
84
|
+
|
85
|
+
context 'when the instance variable is nil' do
|
86
|
+
before do
|
87
|
+
postcode.send(:instance_variable_set, '@addresses', nil)
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'performs a lookup on the API' do
|
91
|
+
expect( api_client ).to receive(:addresses)
|
92
|
+
postcode.addresses
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'stores the return value from the API in the instance variable' do
|
96
|
+
allow(api_client).to receive(:addresses).and_return('foo')
|
97
|
+
expect(postcode.addresses).to eq('foo')
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
context 'when the instance variable has a value' do
|
102
|
+
before do
|
103
|
+
postcode.send(:instance_variable_set, '@addresses', 'bar')
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'does not perform a lookup on the API' do
|
107
|
+
expect( api_client ).to_not receive(:addresses)
|
108
|
+
postcode.addresses
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'returns the existing value' do
|
112
|
+
expect(postcode.addresses).to eq('bar')
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
[:longitude, :latitude].each do |method|
|
118
|
+
describe method do
|
119
|
+
let(:postcode){ PostcodeInfo::Postcode.new('SN51NB', api_client) }
|
120
|
+
before do
|
121
|
+
postcode.send(:instance_variable_set, "@#{method}", method.to_s)
|
122
|
+
end
|
123
|
+
|
124
|
+
context 'when the @info instance variable is nil' do
|
125
|
+
before do
|
126
|
+
postcode.send(:instance_variable_set, '@info', nil)
|
127
|
+
end
|
128
|
+
|
129
|
+
it 'performs a lookup on the API' do
|
130
|
+
expect( postcode ).to receive(:lookup_info!)
|
131
|
+
postcode.send(method)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
context 'when the @info instance variable has a value' do
|
136
|
+
before do
|
137
|
+
postcode.send(:instance_variable_set, '@info', 'info')
|
138
|
+
end
|
139
|
+
|
140
|
+
it 'does not perform a lookup on the API' do
|
141
|
+
expect( postcode ).to_not receive(:lookup_info!)
|
142
|
+
postcode.send(method)
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
it "returns the value of @#{method}" do
|
147
|
+
allow(postcode).to receive(:lookup_info!)
|
148
|
+
expect(postcode.send(method)).to eq(method.to_s)
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
describe "lookup_info!" do
|
154
|
+
before do
|
155
|
+
allow(api_client).to receive(:info).and_return('info')
|
156
|
+
end
|
157
|
+
|
158
|
+
it "gets info from the client" do
|
159
|
+
expect(api_client).to receive(:info)
|
160
|
+
allow(postcode).to receive(:parse_info!)
|
161
|
+
postcode.lookup_info!
|
162
|
+
end
|
163
|
+
|
164
|
+
it "stores the info returned from the client" do
|
165
|
+
allow(postcode).to receive(:parse_info!)
|
166
|
+
postcode.lookup_info!
|
167
|
+
expect(postcode.send(:instance_variable_get, '@info')).to eq('info')
|
168
|
+
end
|
169
|
+
|
170
|
+
it 'parses the info' do
|
171
|
+
expect(postcode).to receive(:parse_info!)
|
172
|
+
postcode.lookup_info!
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
describe "parse_info!" do
|
177
|
+
let(:stored_info){ {key: 'value', local_authority:'local authority'} }
|
178
|
+
|
179
|
+
before do
|
180
|
+
postcode.send(:instance_variable_set, '@info', stored_info )
|
181
|
+
end
|
182
|
+
|
183
|
+
it 'sets coordinates with @info' do
|
184
|
+
expect(postcode).to receive(:set_coordinates!).with(stored_info)
|
185
|
+
postcode.send(:parse_info!)
|
186
|
+
end
|
187
|
+
|
188
|
+
it 'stores the local_authority in @local_authority' do
|
189
|
+
postcode.send(:parse_info!)
|
190
|
+
expect(postcode.local_authority).to eq('local authority')
|
191
|
+
end
|
192
|
+
|
193
|
+
it 'sets the valid flag' do
|
194
|
+
expect{postcode.send(:parse_info!)}.to change{postcode.send(:instance_variable_get, '@valid')}.to(true)
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
describe 'set_coordinates!' do
|
199
|
+
context 'when the given info has a :centre key' do
|
200
|
+
let(:info){ {centre: {latitude: 1.0, longitude: 256.8}} }
|
201
|
+
|
202
|
+
it 'stores the latitude sub-key as @latitude' do
|
203
|
+
postcode.send(:set_coordinates!, info)
|
204
|
+
expect(postcode.send(:instance_variable_get, '@latitude')).to eq(1.0)
|
205
|
+
end
|
206
|
+
|
207
|
+
it 'stores the longitude sub-key as @longitude' do
|
208
|
+
postcode.send(:set_coordinates!, info)
|
209
|
+
expect(postcode.send(:instance_variable_get, '@longitude')).to eq(256.8)
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
context 'when the given info does not have :centre' do
|
214
|
+
let(:info){ {} }
|
215
|
+
|
216
|
+
it 'does not change @latitude' do
|
217
|
+
expect{ postcode.send(:set_coordinates!, info) }.to_not change{ postcode.send(:instance_variable_get, '@latitude') }
|
218
|
+
end
|
219
|
+
it 'does not change @longitude' do
|
220
|
+
expect{ postcode.send(:set_coordinates!, info) }.to_not change{ postcode.send(:instance_variable_get, '@longitude') }
|
221
|
+
end
|
222
|
+
|
223
|
+
end
|
224
|
+
end
|
225
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'simplecov'
|
2
|
+
SimpleCov.start
|
3
|
+
|
4
|
+
|
5
|
+
|
6
|
+
SimpleCov.configure do
|
7
|
+
load_adapter 'test_frameworks'
|
8
|
+
end
|
9
|
+
|
10
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
11
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
12
|
+
|
13
|
+
require 'rspec'
|
14
|
+
require 'postcodeinfo-client-ruby'
|
15
|
+
|
16
|
+
# Requires supporting files with custom matchers and macros, etc,
|
17
|
+
# in ./support/ and its subdirectories.
|
18
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
19
|
+
|
20
|
+
RSpec.configure do |config|
|
21
|
+
|
22
|
+
end
|
metadata
ADDED
@@ -0,0 +1,181 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: postcodeinfo-client-ruby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Al Davidson
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-05-29 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: json
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rest-client
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: byebug
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 3.2.0
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 3.2.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rdoc
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '3.12'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '3.12'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: bundler
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1.0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: jeweler
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 2.0.1
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 2.0.1
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: simplecov
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
description: |-
|
126
|
+
Provides a convenient interface for looking up postcodes in an instance of the MoJ postcodeinfo API (https://://github.com/ministryofjustice/postcodeinfo).
|
127
|
+
Lets you check if a postcode is valid, and ookup:
|
128
|
+
* all addresses with that postcode
|
129
|
+
* the latitude/longitude of its centre point
|
130
|
+
* the name & GSS code of the local authority under which it resides.
|
131
|
+
email: alistair.davidson@digital.justice.gov.uk
|
132
|
+
executables: []
|
133
|
+
extensions: []
|
134
|
+
extra_rdoc_files:
|
135
|
+
- LICENSE.MD
|
136
|
+
- README.md
|
137
|
+
files:
|
138
|
+
- ".document"
|
139
|
+
- ".rspec"
|
140
|
+
- ".ruby-gemset"
|
141
|
+
- ".ruby-version"
|
142
|
+
- ".simplecov"
|
143
|
+
- Gemfile
|
144
|
+
- Gemfile.lock
|
145
|
+
- LICENSE.MD
|
146
|
+
- README.md
|
147
|
+
- Rakefile
|
148
|
+
- VERSION
|
149
|
+
- lib/postcodeinfo-client-ruby.rb
|
150
|
+
- lib/postcodeinfo/client.rb
|
151
|
+
- lib/postcodeinfo/exceptions.rb
|
152
|
+
- lib/postcodeinfo/postcode.rb
|
153
|
+
- postcodeinfo-client-ruby.gemspec
|
154
|
+
- spec/client_spec.rb
|
155
|
+
- spec/postcode_spec.rb
|
156
|
+
- spec/spec_helper.rb
|
157
|
+
homepage: https://github.com/ministryofjustice/postcodeinfo-client-ruby
|
158
|
+
licenses:
|
159
|
+
- Open Government License
|
160
|
+
metadata: {}
|
161
|
+
post_install_message:
|
162
|
+
rdoc_options: []
|
163
|
+
require_paths:
|
164
|
+
- lib
|
165
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
166
|
+
requirements:
|
167
|
+
- - ">="
|
168
|
+
- !ruby/object:Gem::Version
|
169
|
+
version: '0'
|
170
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
171
|
+
requirements:
|
172
|
+
- - ">="
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: '0'
|
175
|
+
requirements: []
|
176
|
+
rubyforge_project:
|
177
|
+
rubygems_version: 2.4.3
|
178
|
+
signing_key:
|
179
|
+
specification_version: 4
|
180
|
+
summary: Client for postcodeinfo API (https://://github.com/ministryofjustice/postcodeinfo)
|
181
|
+
test_files: []
|