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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a5f89966abe53d876bcdfbcbd687ce0b906e16a0
4
- data.tar.gz: f12e8db0fc202bca323b0ab5a77b680b2de63820
3
+ metadata.gz: e3e72598e65c0ff2df1de29a6435926061d3b6f0
4
+ data.tar.gz: 394c60a29a616ac5d21e6f7bc99602e073c41dbe
5
5
  SHA512:
6
- metadata.gz: 73258d385e23038417f55de799cb898df42853e3e95b8551d113f16108b13a76f93fc302f28512dc63f4072f89631f9e13fd367b9b235de38d979acd19375a05
7
- data.tar.gz: 6679c078a4eac07a8909d4f3a7cdbec505b3a2035113053514324273627b302c4135b2ebaf23437d34d591515222d88dfcde48a7425d3c1f50170207111bbffd
6
+ metadata.gz: 4a088555a63585b8defd7fd67e8f70babe0a651b72e0e1cfcae5467d3463e155fe6575186fe51977015b2949a82ed01ff8cb23f9ee84a3de0c2ded1088663eae
7
+ data.tar.gz: ceadb522ff23a41bb2a6aac5dd54ba50fdc57cd19e30f8c022d1fddad9ce9e09c81dd57ecb602b7113f84ef127176aaaa67619dd955efa8588db0bcb505b33d0
data/.gitignore CHANGED
@@ -6,6 +6,7 @@
6
6
  zeus.json
7
7
  custom_plan.rb
8
8
  database.yml
9
+ pkg/
9
10
 
10
11
  # Ignore all logfiles and tempfiles.
11
12
  /log/*.log
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 (only available through github for the moment):
11
+ Add this line to your application's Gemfile:
9
12
 
10
- gem 'zippopotamus-client', github: 'rcugut/zippopotamus-ruby-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
- require 'zippopotamus'
25
-
26
- Zippopotamus.configure do |c|
27
- # enable `use_persistent_connection` to keep the connection alive between subsequent calls
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 it
37
+ #### Use
33
38
 
34
39
  ```ruby
35
-
36
- # Lookup a zip code by default in US
37
- Zippopotamus.lookup_postal_code('90210')
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
- # returns a Zippopotamus::Place
40
- # @name: 'Beverly Hills'
41
- # @region: 'California'
42
- # @region_code: 'CA'
43
- # @latitude: 34.0901
44
- # @longitude: -118.4065
45
- # @alternatives: []
46
- # #has_alternatives?: false
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
- # Lookup a postal code in France, with multiple place results (alternatives)
51
- place = Zippopotamus.lookup_postal_code('01000', 'fr')
57
+ # Lookup a postcode in France, with multiple place results (alternatives)
58
+ place = Zippopotamus.lookup_postcode('01000', 'fr')
52
59
 
53
- # returns the first Place in the list of multiple places
54
- puts place.name
55
- #> 'Bourg-en-Bresse'
60
+ # returns the first Place in the list of multiple places
61
+ puts place.name
62
+ #> 'Bourg-en-Bresse'
56
63
 
57
- # this place has alternatives (with same postal_code)
58
- puts place.has_alternatives?
59
- #> true
64
+ # this place has alternatives (with same postal_code)
65
+ puts place.has_alternatives?
66
+ #> true
60
67
 
61
- # get array of Zippotamus::Place representing alternatives (with the same postal_code)
62
- puts place.alternatives
63
- #> [#<Place @name="Saint-Denis-lès-Bourg", @region="Rhône-Alpes", @region_code="B9", @latitude=46.2022, @longitude=5.1892>]
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
- # Works if postal code is a number (although not recommended)
68
- Zippopotamus.lookup_postal_code(90210)
69
- #=> #<Place @name="Beverly Hills", @region="California", @region_code="CA", @latitude=34.0901, @longitude=-118.4065, @alternatives=[]>
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
+
@@ -12,17 +12,13 @@ require 'zippopotamus/client'
12
12
  #
13
13
  #
14
14
  #
15
- # Usage
15
+ # Use
16
16
  #
17
17
  # # Lookup US zip codes by default
18
- # Zippopotamus.lookup_postal_code('90210')
18
+ # Zippopotamus.lookup_postcode('90210')
19
19
  #
20
20
  # # Specify country by 2 letter code
21
- # Zippopotamus.lookup_postal_code('01000', 'fr')
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 postal_code for a country and return the place(s) for it
32
+ # lookup a postcode for a country and return the place(s) for it
37
33
  #
38
- # @param [String] postal_code
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 lookup_postal_code(postal_code, country = 'us')
38
+ def lookup_postcode(postcode, country = 'us')
43
39
  @client ||= Zippopotamus::Client.new(get_configuration.use_persistent_connection)
44
- return @client.lookup_postal_code(postal_code, country)
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
 
@@ -12,21 +12,21 @@ module Zippopotamus
12
12
 
13
13
 
14
14
 
15
- # @param [String] postal_code
15
+ # @param [String] postcode
16
16
  # @param [String] country 2 letter country code (default: 'us')
17
- def lookup_postal_code(postal_code, country = 'us')
18
- postal_code = postal_code.to_s if postal_code.is_a?(Integer)
19
- raise "Invalid postal_code parameter: '#{postal_code}'" if not_blank_string?(postal_code)
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}/#{postal_code}")
23
+ r = @connection.get(path: "/#{country}/#{postcode}")
24
24
  rescue Excon::Errors::SocketError
25
25
  # just retry
26
- r = @connection.get(path: "/#{country}/#{postal_code}")
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
@@ -1,3 +1,3 @@
1
1
  module Zippopotamus
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -3,16 +3,17 @@ require 'json'
3
3
 
4
4
  describe Zippopotamus::Place do
5
5
 
6
- DATA_WO_ALTERNATIVES = [{"place name"=>"Beverly Hills", "longitude"=>"-118.4065", "state"=>"California", "state abbreviation"=>"CA", "latitude"=>"34.0901"}]
7
- DATA_WITH_ALTERNATIVES = [{"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"}]
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 no alternative places" do
10
+ context "with single place" do
11
11
  before do
12
- @place = Zippopotamus::Place.new(*DATA_WO_ALTERNATIVES)
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(*DATA_WITH_ALTERNATIVES)
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 Place" do
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'
@@ -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.lookup_postal_code!('90210')
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.lookup_postal_code!('01000', 'fr')
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 valid data" do
66
+ context "live HTTP tests with US/90210" do
66
67
 
67
68
  before do
68
- @result = Zippopotamus.lookup_postal_code!('90210')
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.1.1
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-13 00:00:00.000000000 Z
11
+ date: 2014-01-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake