postcodes_io 0.1.1 → 0.2.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/.gitignore +1 -0
- data/LICENSE.txt +1 -1
- data/README.md +20 -2
- data/lib/postcodes_io.rb +2 -0
- data/lib/postcodes_io/autocomplete.rb +37 -0
- data/lib/postcodes_io/autocomplete_list.rb +12 -0
- data/lib/postcodes_io/base.rb +10 -0
- data/lib/postcodes_io/postcode.rb +3 -8
- data/lib/postcodes_io/version.rb +1 -1
- data/spec/autocomplete_spec.rb +36 -0
- data/spec/fixtures/autocomplete_response.json +14 -0
- data/spec/lookup_spec.rb +62 -0
- data/spec/postcode_io_spec.rb +0 -57
- metadata +26 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a025c5964930e2fdd31f1d4ac696d14ef8db7244
|
4
|
+
data.tar.gz: 3d5e0090a957e1a6af46f68d1204eb0c2ee9b5a9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5ca6179bdb36644e0d64dc65f3ff37efa574cbe9e0440200ef788514de7728c9c6d0fa95c87adaa258022f0d8aca834d4c0177c4ef8de817ab2610bc6e98727d
|
7
|
+
data.tar.gz: 1cc677ceaf30e1c0db12e0c44d604a77b35b44d05533a81440e545553806fca89f1f7222bfaa8b1fa321b9fd8f4b00a9cb78ae35b8b8048896e331349a7e3ea6
|
data/.gitignore
CHANGED
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -23,7 +23,7 @@ Or install it yourself as:
|
|
23
23
|
Require the gem
|
24
24
|
|
25
25
|
```ruby
|
26
|
-
require '
|
26
|
+
require 'postcodes_io'
|
27
27
|
```
|
28
28
|
|
29
29
|
Create new instance of the Postcodes::IO
|
@@ -32,7 +32,7 @@ Create new instance of the Postcodes::IO
|
|
32
32
|
pio = Postcodes::IO.new
|
33
33
|
```
|
34
34
|
|
35
|
-
Lookup a postcode
|
35
|
+
####Lookup a postcode
|
36
36
|
```ruby
|
37
37
|
postcode = pio.lookup('NN12 8TN')
|
38
38
|
```
|
@@ -43,6 +43,24 @@ postcode.longitude # -1.02144562675883
|
|
43
43
|
postcode.latitude # 52.0776806788868
|
44
44
|
```
|
45
45
|
|
46
|
+
####Make a batch postcode lookup request
|
47
|
+
|
48
|
+
> max 100 postcodes per request
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
postcodes = pio.lookup('NN12 8TN', 'DA3 8NG') # or pio.lookup(['NN12 8TN', 'DA3 8NG'])
|
52
|
+
postcodes.each do |p|
|
53
|
+
puts p.nuts
|
54
|
+
end
|
55
|
+
```
|
56
|
+
|
57
|
+
####Autocomplete a postcode
|
58
|
+
|
59
|
+
```ruby
|
60
|
+
postcodes = pio.autocomplete('NN12')
|
61
|
+
puts postcodes.list # ["NN12 6AA", "NN12 6AB", "NN12 6AD", "NN12 6AE", "NN12 6AF", "NN12 6AG", "NN12 6AH", "NN12 6AJ", "NN12 6AL", "NN12 6AN"]
|
62
|
+
```
|
63
|
+
|
46
64
|
##All available fields
|
47
65
|
|
48
66
|
|name|description|
|
data/lib/postcodes_io.rb
CHANGED
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'excon'
|
2
|
+
require 'json'
|
3
|
+
require 'postcodes_io/autocomplete_list'
|
4
|
+
|
5
|
+
module Postcodes
|
6
|
+
module Autocomplete
|
7
|
+
|
8
|
+
def autocomplete(postcode)
|
9
|
+
autocomplete_postcode postcode
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def autocomplete_postcode(postcode)
|
15
|
+
postcode = remove_whitespace postcode
|
16
|
+
response = Excon.get("https://api.postcodes.io/postcodes/#{postcode}/autocomplete")
|
17
|
+
|
18
|
+
unless response.status == 404
|
19
|
+
parsed_response = JSON.parse(response.body)
|
20
|
+
return Postcodes::AutocompleteList.new(parsed_response['result'])
|
21
|
+
end
|
22
|
+
return nil
|
23
|
+
end
|
24
|
+
|
25
|
+
def remove_whitespace(string)
|
26
|
+
string.gsub(/\s+/, '')
|
27
|
+
end
|
28
|
+
|
29
|
+
def process_response(response, &block)
|
30
|
+
unless response.status == 404
|
31
|
+
yield JSON.parse(response.body)
|
32
|
+
end
|
33
|
+
nil
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
@@ -1,17 +1,12 @@
|
|
1
|
+
require "postcodes_io/base"
|
2
|
+
|
1
3
|
module Postcodes
|
2
|
-
class Postcode
|
4
|
+
class Postcode < Base
|
3
5
|
|
4
6
|
attr_reader :info
|
5
7
|
|
6
8
|
def initialize(info)
|
7
9
|
@info = info
|
8
10
|
end
|
9
|
-
|
10
|
-
# allow accessing info values with dot notation
|
11
|
-
def method_missing(name, *args, &block)
|
12
|
-
return @info[name.to_s] if @info.key? name.to_s
|
13
|
-
return @info[name] if @info.key? name
|
14
|
-
super.method_missing name
|
15
|
-
end
|
16
11
|
end
|
17
12
|
end
|
data/lib/postcodes_io/version.rb
CHANGED
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Postcodes::IO do
|
4
|
+
|
5
|
+
let(:base_url) {'https://api.postcodes.io'}
|
6
|
+
let(:stub_autocomplete) { File.read('spec/fixtures/autocomplete_response.json') }
|
7
|
+
|
8
|
+
describe '#autocomplete' do
|
9
|
+
|
10
|
+
before :each do
|
11
|
+
stub_request(:get, "#{base_url}/postcodes/NN10/autocomplete")
|
12
|
+
.to_return(status: 200, body: stub_autocomplete)
|
13
|
+
end
|
14
|
+
|
15
|
+
let(:input) { 'NN10' }
|
16
|
+
let(:output) { subject.autocomplete(input) }
|
17
|
+
|
18
|
+
it 'requests a postcode' do
|
19
|
+
output
|
20
|
+
WebMock.should have_requested(:get, "#{base_url}/postcodes/NN10/autocomplete")
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'returns autocompleted array' do
|
24
|
+
expect(output.list).to eq(["NN10 0AA",
|
25
|
+
"NN10 0AD",
|
26
|
+
"NN10 0AE",
|
27
|
+
"NN10 0AF",
|
28
|
+
"NN10 0AG",
|
29
|
+
"NN10 0AH",
|
30
|
+
"NN10 0AJ",
|
31
|
+
"NN10 0AL",
|
32
|
+
"NN10 0AN",
|
33
|
+
"NN10 0AP"])
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/spec/lookup_spec.rb
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Postcodes::IO do
|
4
|
+
|
5
|
+
let(:base_url) {'https://api.postcodes.io'}
|
6
|
+
let(:stub_single_response) { File.read('spec/fixtures/lookup_response.json') }
|
7
|
+
let(:stub_multi_response) { File.read('spec/fixtures/lookup_multi_response.json') }
|
8
|
+
|
9
|
+
describe '#lookup' do
|
10
|
+
|
11
|
+
before :each do
|
12
|
+
stub_request(:get, "#{base_url}/postcodes/CM129TR")
|
13
|
+
.to_return(status: 200, body: stub_single_response)
|
14
|
+
end
|
15
|
+
|
16
|
+
let(:input) { 'CM12 9TR' }
|
17
|
+
let(:output) { subject.lookup(input) }
|
18
|
+
|
19
|
+
it 'requests a postcode' do
|
20
|
+
output
|
21
|
+
WebMock.should have_requested(:get, "#{base_url}/postcodes/CM129TR")
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'returns the long and lat' do
|
25
|
+
output.longitude.should == 0.411227930206834
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '#lookup with multiple postcodes' do
|
30
|
+
before :each do
|
31
|
+
stub_request(:post, "#{base_url}/postcodes")
|
32
|
+
.with(body: postcode_payload, headers: {'Content-Type' => 'application/json'})
|
33
|
+
.to_return(status: 200, body: stub_multi_response)
|
34
|
+
end
|
35
|
+
|
36
|
+
let(:input) { ['OX495NU', 'M320JG', 'NE301DP'] }
|
37
|
+
let(:output) { subject.lookup(input) }
|
38
|
+
let(:postcode_payload) { {postcodes: input}.to_json }
|
39
|
+
|
40
|
+
it 'makes a request with mutliple postcodes' do
|
41
|
+
output
|
42
|
+
WebMock.should have_requested(:post, "#{base_url}/postcodes")
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'returns a postcode object for each result' do
|
46
|
+
output.count.should == 3
|
47
|
+
output.each do |o|
|
48
|
+
o.class.should == Postcodes::Postcode
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe 'as splat' do
|
53
|
+
let(:output) { subject.lookup('OX495NU', 'M320JG', 'NE301DP') }
|
54
|
+
|
55
|
+
it 'allows passing postcodes as multiple arguments' do
|
56
|
+
output
|
57
|
+
WebMock.should have_requested(:post, "#{base_url}/postcodes")
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
data/spec/postcode_io_spec.rb
CHANGED
@@ -2,61 +2,4 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Postcodes::IO do
|
4
4
|
|
5
|
-
let(:base_url) {'https://api.postcodes.io'}
|
6
|
-
let(:stub_single_response) { File.read('spec/fixtures/lookup_response.json') }
|
7
|
-
let(:stub_multi_response) { File.read('spec/fixtures/lookup_multi_response.json') }
|
8
|
-
|
9
|
-
describe '#lookup' do
|
10
|
-
|
11
|
-
before :each do
|
12
|
-
stub_request(:get, "#{base_url}/postcodes/CM129TR")
|
13
|
-
.to_return(status: 200, body: stub_single_response)
|
14
|
-
end
|
15
|
-
|
16
|
-
let(:input) { 'CM12 9TR' }
|
17
|
-
let(:output) { subject.lookup(input) }
|
18
|
-
|
19
|
-
it 'requests a postcode' do
|
20
|
-
output
|
21
|
-
WebMock.should have_requested(:get, "#{base_url}/postcodes/CM129TR")
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'returns the long and lat' do
|
25
|
-
output.longitude.should == 0.411227930206834
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
describe '#lookup with multiple postcodes' do
|
30
|
-
before :each do
|
31
|
-
stub_request(:post, "#{base_url}/postcodes")
|
32
|
-
.with(body: postcode_payload, headers: {'Content-Type' => 'application/json'})
|
33
|
-
.to_return(status: 200, body: stub_multi_response)
|
34
|
-
end
|
35
|
-
|
36
|
-
let(:input) { ['OX495NU', 'M320JG', 'NE301DP'] }
|
37
|
-
let(:output) { subject.lookup(input) }
|
38
|
-
let(:postcode_payload) { {postcodes: input}.to_json }
|
39
|
-
|
40
|
-
it 'makes a request with mutliple postcodes' do
|
41
|
-
output
|
42
|
-
WebMock.should have_requested(:post, "#{base_url}/postcodes")
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'returns a postcode object for each result' do
|
46
|
-
output.count.should == 3
|
47
|
-
output.each do |o|
|
48
|
-
o.class.should == Postcodes::Postcode
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
describe 'as splat' do
|
53
|
-
let(:output) { subject.lookup('OX495NU', 'M320JG', 'NE301DP') }
|
54
|
-
|
55
|
-
it 'allows passing postcodes as multiple arguments' do
|
56
|
-
output
|
57
|
-
WebMock.should have_requested(:post, "#{base_url}/postcodes")
|
58
|
-
end
|
59
|
-
|
60
|
-
end
|
61
|
-
end
|
62
5
|
end
|
metadata
CHANGED
@@ -1,83 +1,83 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: postcodes_io
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Ruston
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.7'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.7'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '10.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: webmock
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: excon
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - ~>
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0.39'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - ~>
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0.39'
|
83
83
|
description: Get rich data from postcode lookups. Wraps postcodes.io
|
@@ -87,19 +87,25 @@ executables: []
|
|
87
87
|
extensions: []
|
88
88
|
extra_rdoc_files: []
|
89
89
|
files:
|
90
|
-
- .gitignore
|
91
|
-
- .rspec
|
90
|
+
- ".gitignore"
|
91
|
+
- ".rspec"
|
92
92
|
- Gemfile
|
93
93
|
- LICENSE.txt
|
94
94
|
- README.md
|
95
95
|
- Rakefile
|
96
96
|
- lib/postcodes_io.rb
|
97
|
+
- lib/postcodes_io/autocomplete.rb
|
98
|
+
- lib/postcodes_io/autocomplete_list.rb
|
99
|
+
- lib/postcodes_io/base.rb
|
97
100
|
- lib/postcodes_io/lookup.rb
|
98
101
|
- lib/postcodes_io/postcode.rb
|
99
102
|
- lib/postcodes_io/version.rb
|
100
103
|
- postcodes_io.gemspec
|
104
|
+
- spec/autocomplete_spec.rb
|
105
|
+
- spec/fixtures/autocomplete_response.json
|
101
106
|
- spec/fixtures/lookup_multi_response.json
|
102
107
|
- spec/fixtures/lookup_response.json
|
108
|
+
- spec/lookup_spec.rb
|
103
109
|
- spec/postcode_io_spec.rb
|
104
110
|
- spec/spec_helper.rb
|
105
111
|
homepage: ''
|
@@ -112,22 +118,25 @@ require_paths:
|
|
112
118
|
- lib
|
113
119
|
required_ruby_version: !ruby/object:Gem::Requirement
|
114
120
|
requirements:
|
115
|
-
- -
|
121
|
+
- - ">="
|
116
122
|
- !ruby/object:Gem::Version
|
117
123
|
version: '0'
|
118
124
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
119
125
|
requirements:
|
120
|
-
- -
|
126
|
+
- - ">="
|
121
127
|
- !ruby/object:Gem::Version
|
122
128
|
version: '0'
|
123
129
|
requirements: []
|
124
130
|
rubyforge_project:
|
125
|
-
rubygems_version: 2.
|
131
|
+
rubygems_version: 2.5.1
|
126
132
|
signing_key:
|
127
133
|
specification_version: 4
|
128
134
|
summary: Lookup postcodes
|
129
135
|
test_files:
|
136
|
+
- spec/autocomplete_spec.rb
|
137
|
+
- spec/fixtures/autocomplete_response.json
|
130
138
|
- spec/fixtures/lookup_multi_response.json
|
131
139
|
- spec/fixtures/lookup_response.json
|
140
|
+
- spec/lookup_spec.rb
|
132
141
|
- spec/postcode_io_spec.rb
|
133
142
|
- spec/spec_helper.rb
|