zippopotamus-client 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/README.md +45 -34
- data/lib/zippopotamus.rb +9 -12
- data/lib/zippopotamus/client.rb +11 -10
- data/lib/zippopotamus/version.rb +1 -1
- data/spec/place_spec.rb +10 -7
- data/spec/zippopotamus_spec.rb +6 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e3e72598e65c0ff2df1de29a6435926061d3b6f0
|
4
|
+
data.tar.gz: 394c60a29a616ac5d21e6f7bc99602e073c41dbe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4a088555a63585b8defd7fd67e8f70babe0a651b72e0e1cfcae5467d3463e155fe6575186fe51977015b2949a82ed01ff8cb23f9ee84a3de0c2ded1088663eae
|
7
|
+
data.tar.gz: ceadb522ff23a41bb2a6aac5dd54ba50fdc57cd19e30f8c022d1fddad9ce9e09c81dd57ecb602b7113f84ef127176aaaa67619dd955efa8588db0bcb505b33d0
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -3,16 +3,22 @@
|
|
3
3
|
This is a simple ruby client for the [zippopotam.us](http://zippopotam.us) API.
|
4
4
|
It uses [excon](https://github.com/geemus/excon) http client for it's speed and persistent connections support.
|
5
5
|
|
6
|
+
[](http://badge.fury.io/rb/zippopotamus-client)
|
7
|
+
|
8
|
+
|
6
9
|
## Installation
|
7
10
|
|
8
|
-
Add this line to your application's Gemfile
|
11
|
+
Add this line to your application's Gemfile:
|
9
12
|
|
10
|
-
gem 'zippopotamus-client'
|
13
|
+
gem 'zippopotamus-client'
|
11
14
|
|
12
15
|
And then execute:
|
13
16
|
|
14
17
|
$ bundle
|
15
18
|
|
19
|
+
Or install the gem via command line:
|
20
|
+
|
21
|
+
$ gem install zippopotamus-client
|
16
22
|
|
17
23
|
|
18
24
|
## Usage
|
@@ -20,53 +26,54 @@ And then execute:
|
|
20
26
|
#### Configure
|
21
27
|
|
22
28
|
```ruby
|
29
|
+
require 'zippopotamus'
|
23
30
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
c.use_persistent_connection = false # default: true
|
29
|
-
end
|
31
|
+
Zippopotamus.configure do |c|
|
32
|
+
# enable `use_persistent_connection` to keep the connection alive between subsequent calls
|
33
|
+
c.use_persistent_connection = false # default: true
|
34
|
+
end
|
30
35
|
```
|
31
36
|
|
32
|
-
#### Use
|
37
|
+
#### Use
|
33
38
|
|
34
39
|
```ruby
|
35
|
-
|
36
|
-
|
37
|
-
|
40
|
+
# Lookup a zip code (by default country = US)
|
41
|
+
place = Zippopotamus.lookup_postcode('90210')
|
42
|
+
# or the alias method lookup_zipcode
|
43
|
+
place = Zippopotamus.lookup_zipcode('90210')
|
38
44
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
45
|
+
# place is a <Zippopotamus::Place>
|
46
|
+
# @postcode: '90210'
|
47
|
+
# @name: 'Beverly Hills'
|
48
|
+
# @region: 'California'
|
49
|
+
# @region_code: 'CA'
|
50
|
+
# @latitude: 34.0901
|
51
|
+
# @longitude: -118.4065
|
52
|
+
# @alternatives: []
|
53
|
+
# #has_alternatives?: false
|
47
54
|
|
48
55
|
|
49
56
|
|
50
|
-
|
51
|
-
|
57
|
+
# Lookup a postcode in France, with multiple place results (alternatives)
|
58
|
+
place = Zippopotamus.lookup_postcode('01000', 'fr')
|
52
59
|
|
53
|
-
|
54
|
-
|
55
|
-
|
60
|
+
# returns the first Place in the list of multiple places
|
61
|
+
puts place.name
|
62
|
+
#> 'Bourg-en-Bresse'
|
56
63
|
|
57
|
-
|
58
|
-
|
59
|
-
|
64
|
+
# this place has alternatives (with same postal_code)
|
65
|
+
puts place.has_alternatives?
|
66
|
+
#> true
|
60
67
|
|
61
|
-
|
62
|
-
|
63
|
-
|
68
|
+
# get array of Zippotamus::Place representing alternatives (with the same postcode)
|
69
|
+
puts place.alternatives
|
70
|
+
#> [#<Place @name="Saint-Denis-lès-Bourg", @region="Rhône-Alpes", @region_code="B9", @latitude=46.2022, @longitude=5.1892>]
|
64
71
|
|
65
72
|
|
66
73
|
|
67
|
-
|
68
|
-
|
69
|
-
|
74
|
+
# Works if postcode is a number (although not recommended)
|
75
|
+
Zippopotamus.lookup_postcode(90210)
|
76
|
+
#=> #<Place @name="Beverly Hills", @region="California", @region_code="CA", @latitude=34.0901, @longitude=-118.4065, @alternatives=[]>
|
70
77
|
```
|
71
78
|
|
72
79
|
|
@@ -79,3 +86,7 @@ And then execute:
|
|
79
86
|
5. Create new Pull Request
|
80
87
|
|
81
88
|
|
89
|
+
## Special thanks
|
90
|
+
|
91
|
+
Special thanks to [zippopotam.us](http://zippopotam.us) project for the postal codes database and API hosting/maintenance
|
92
|
+
|
data/lib/zippopotamus.rb
CHANGED
@@ -12,17 +12,13 @@ require 'zippopotamus/client'
|
|
12
12
|
#
|
13
13
|
#
|
14
14
|
#
|
15
|
-
#
|
15
|
+
# Use
|
16
16
|
#
|
17
17
|
# # Lookup US zip codes by default
|
18
|
-
# Zippopotamus.
|
18
|
+
# Zippopotamus.lookup_postcode('90210')
|
19
19
|
#
|
20
20
|
# # Specify country by 2 letter code
|
21
|
-
# Zippopotamus.
|
22
|
-
#
|
23
|
-
#
|
24
|
-
# # Raise an error when parameters are invalid
|
25
|
-
# Zippopotamus.lookup_postal_code(12345)
|
21
|
+
# Zippopotamus.lookup_postcode('01000', 'fr')
|
26
22
|
#
|
27
23
|
module Zippopotamus
|
28
24
|
|
@@ -33,18 +29,19 @@ module Zippopotamus
|
|
33
29
|
end
|
34
30
|
|
35
31
|
|
36
|
-
# lookup a
|
32
|
+
# lookup a postcode for a country and return the place(s) for it
|
37
33
|
#
|
38
|
-
# @param [String]
|
34
|
+
# @param [String] postcode
|
39
35
|
# @param [String] country 2 letter country code (default: 'us')
|
40
36
|
# @return [Zippopotamus::Place] place with postal_code for country OR nil if not found
|
41
37
|
# @raise if invalid parameters
|
42
|
-
def
|
38
|
+
def lookup_postcode(postcode, country = 'us')
|
43
39
|
@client ||= Zippopotamus::Client.new(get_configuration.use_persistent_connection)
|
44
|
-
return @client.
|
40
|
+
return @client.lookup_postcode(postcode, country)
|
45
41
|
end
|
46
42
|
|
47
|
-
|
43
|
+
alias_method :lookup_zipcode, :lookup_postcode
|
44
|
+
alias_method :lookup_postal_code, :lookup_postcode
|
48
45
|
|
49
46
|
private
|
50
47
|
|
data/lib/zippopotamus/client.rb
CHANGED
@@ -12,21 +12,21 @@ module Zippopotamus
|
|
12
12
|
|
13
13
|
|
14
14
|
|
15
|
-
# @param [String]
|
15
|
+
# @param [String] postcode
|
16
16
|
# @param [String] country 2 letter country code (default: 'us')
|
17
|
-
def
|
18
|
-
|
19
|
-
raise "Invalid
|
17
|
+
def lookup_postcode(postcode, country = 'us')
|
18
|
+
postcode = postcode.to_s if postcode.is_a?(Integer)
|
19
|
+
raise "Invalid postcode parameter: '#{postcode}'" if not_blank_string?(postcode)
|
20
20
|
raise "Invalid country parameter: '#{country}'" if not_blank_string?(country) || country.length != 2
|
21
21
|
country = country.downcase
|
22
22
|
begin
|
23
|
-
r = @connection.get(path: "/#{country}/#{
|
23
|
+
r = @connection.get(path: "/#{country}/#{postcode}")
|
24
24
|
rescue Excon::Errors::SocketError
|
25
25
|
# just retry
|
26
|
-
r = @connection.get(path: "/#{country}/#{
|
26
|
+
r = @connection.get(path: "/#{country}/#{postcode}")
|
27
27
|
end
|
28
28
|
if r.status == 200
|
29
|
-
return Place.new(*JSON.parse(r.body)['places'])
|
29
|
+
return Place.new(postcode, *JSON.parse(r.body)['places'])
|
30
30
|
else
|
31
31
|
return nil
|
32
32
|
end
|
@@ -47,11 +47,12 @@ module Zippopotamus
|
|
47
47
|
|
48
48
|
class Place
|
49
49
|
|
50
|
-
attr_reader :name, :region, :region_code, :latitude, :longitude
|
50
|
+
attr_reader :postcode, :name, :region, :region_code, :latitude, :longitude
|
51
51
|
attr_reader :alternatives
|
52
52
|
|
53
|
-
def initialize(*places)
|
53
|
+
def initialize(postcode, *places)
|
54
54
|
place = places.shift
|
55
|
+
@postcode = postcode
|
55
56
|
@name = place['place name']
|
56
57
|
@region = place['state']
|
57
58
|
@region_code = place['state abbreviation']
|
@@ -60,7 +61,7 @@ module Zippopotamus
|
|
60
61
|
|
61
62
|
@alternatives = []
|
62
63
|
places.each do |place|
|
63
|
-
@alternatives << Place.new(place)
|
64
|
+
@alternatives << Place.new(postcode, place)
|
64
65
|
end
|
65
66
|
@alternatives.freeze
|
66
67
|
end
|
data/lib/zippopotamus/version.rb
CHANGED
data/spec/place_spec.rb
CHANGED
@@ -3,16 +3,17 @@ require 'json'
|
|
3
3
|
|
4
4
|
describe Zippopotamus::Place do
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
DATA_SINGLE_PLACE = [{"place name"=>"Beverly Hills", "longitude"=>"-118.4065", "state"=>"California", "state abbreviation"=>"CA", "latitude"=>"34.0901"}]
|
7
|
+
DATA_MULTI_PLACE = [{"place name"=>"Bourg-en-Bresse", "longitude"=>"5.2258", "state"=>"Rhône-Alpes", "state abbreviation"=>"B9", "latitude"=>"46.2057"},
|
8
|
+
{"place name"=>"Saint-Denis-lès-Bourg", "longitude"=>"5.1892", "state"=>"Rhône-Alpes", "state abbreviation"=>"B9", "latitude"=>"46.2022"}]
|
9
9
|
|
10
|
-
context "with
|
10
|
+
context "with single place" do
|
11
11
|
before do
|
12
|
-
@place = Zippopotamus::Place.new(*
|
12
|
+
@place = Zippopotamus::Place.new('90210', *DATA_SINGLE_PLACE)
|
13
13
|
end
|
14
14
|
|
15
15
|
it "is a valid Place without alternatives" do
|
16
|
+
@place.postcode.should == '90210'
|
16
17
|
@place.name.should == 'Beverly Hills'
|
17
18
|
@place.region.should == 'California'
|
18
19
|
@place.region_code.should == 'CA'
|
@@ -25,19 +26,21 @@ describe Zippopotamus::Place do
|
|
25
26
|
|
26
27
|
context "with multiple alternative places" do
|
27
28
|
before do
|
28
|
-
@place = Zippopotamus::Place.new(*
|
29
|
+
@place = Zippopotamus::Place.new('01000', *DATA_MULTI_PLACE)
|
29
30
|
end
|
30
31
|
|
31
32
|
it "is a valid Place without alternatives" do
|
33
|
+
@place.postcode.should == '01000'
|
32
34
|
@place.name.should == 'Bourg-en-Bresse'
|
33
35
|
@place.region.should == 'Rhône-Alpes'
|
34
36
|
@place.region_code.should == 'B9'
|
35
37
|
@place.has_alternatives?.should be_true
|
36
38
|
end
|
37
39
|
|
38
|
-
it "has valid values for alternative
|
40
|
+
it "has valid values for alternative Places" do
|
39
41
|
place1 = @place.alternatives[0]
|
40
42
|
place1.should be_a(Zippopotamus::Place)
|
43
|
+
place1.postcode.should == '01000'
|
41
44
|
place1.name.should == 'Saint-Denis-lès-Bourg'
|
42
45
|
place1.region.should == 'Rhône-Alpes'
|
43
46
|
place1.region_code.should == 'B9'
|
data/spec/zippopotamus_spec.rb
CHANGED
@@ -7,12 +7,13 @@ describe Zippopotamus do
|
|
7
7
|
context "valid postal_code with single Place returned" do
|
8
8
|
before do
|
9
9
|
VCR.use_cassette 'us_90210' do
|
10
|
-
@result = Zippopotamus.
|
10
|
+
@result = Zippopotamus.lookup_zipcode('90210')
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
14
|
it "returns correct data" do
|
15
15
|
@result.should be_a(Zippopotamus::Place)
|
16
|
+
@result.postcode.should == '90210'
|
16
17
|
@result.name.should == 'Beverly Hills'
|
17
18
|
@result.region.should == 'California'
|
18
19
|
@result.region_code.should == 'CA'
|
@@ -26,7 +27,7 @@ describe Zippopotamus do
|
|
26
27
|
context "valid postal_code with multiple Places returned" do
|
27
28
|
before do
|
28
29
|
VCR.use_cassette 'fr_01000' do
|
29
|
-
@result = Zippopotamus.
|
30
|
+
@result = Zippopotamus.lookup_postcode('01000', 'fr')
|
30
31
|
end
|
31
32
|
end
|
32
33
|
|
@@ -62,14 +63,15 @@ describe Zippopotamus do
|
|
62
63
|
|
63
64
|
|
64
65
|
|
65
|
-
context "live HTTP tests with US/90210
|
66
|
+
context "live HTTP tests with US/90210" do
|
66
67
|
|
67
68
|
before do
|
68
|
-
@result = Zippopotamus.
|
69
|
+
@result = Zippopotamus.lookup_zipcode('90210')
|
69
70
|
end
|
70
71
|
|
71
72
|
it "returns correct data" do
|
72
73
|
@result.should be_a(Zippopotamus::Place)
|
74
|
+
@result.postcode.should == '90210'
|
73
75
|
@result.name.should == 'Beverly Hills'
|
74
76
|
@result.region.should == 'California'
|
75
77
|
@result.region_code.should == 'CA'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zippopotamus-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Radu Cugut
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-01-
|
11
|
+
date: 2014-01-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|