zippopotamus-client 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Gem Version](https://badge.fury.io/rb/zippopotamus-client.png)](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
|