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 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