zipcode_locator 0.1.1 → 0.1.2

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: f5b78f7c08e8e1715f181247b4b24728c5335978
4
- data.tar.gz: 7f4503ecef0674087a4a6e5186eaba61e0354095
3
+ metadata.gz: 18e1a78bbee3dc754fee59d8fb53a4b89dbb9042
4
+ data.tar.gz: 50c3a34be10c188853778359bcc5c46435d83bb2
5
5
  SHA512:
6
- metadata.gz: 1661b93313b0c54893858787bf05ea5b38803bf0171181596ceca9951de8c3be271a7c6d7bfee0516012bf4151910c04e8e0850349e36a13400290800edcbc5c
7
- data.tar.gz: fb6df51d021c55d8567299c42a9fa6aac8dd7f6ca04357caca5ba46b2df26ed36cb2e988d92b0ebfc21430bad0b4349a686335679e6b0019bf2e14f136a97818
6
+ metadata.gz: 28077b809b6b21c955fda7dfbf8d0c7dc812b3b07f1c08cf144200f85e68f2ef5f5e8a3370f371b59f1d74da601be055f1d2d8fb907c329155e199d2acaa49cc
7
+ data.tar.gz: 5b8fa97fa956a88b86776a443b9e65165b13bcf79878c598f94c8f25c2f4e4c3c3007cf53a42d4f40fa96b19cbeb365d8888217c515d6f4fa423f0e18ac0c578
data/Gemfile CHANGED
@@ -14,4 +14,5 @@ group :development do
14
14
  gem 'vcr'
15
15
  gem 'webmock'
16
16
  gem 'httparty'
17
+ gem 'nokogiri'
17
18
  end
data/Gemfile.lock CHANGED
@@ -87,6 +87,7 @@ DEPENDENCIES
87
87
  bundler (~> 1.0)
88
88
  httparty
89
89
  jeweler (~> 2.0.1)
90
+ nokogiri
90
91
  rdoc (~> 3.12)
91
92
  shoulda
92
93
  simplecov
data/README.rdoc CHANGED
@@ -1,6 +1,81 @@
1
1
  = zipcode_locator
2
2
 
3
- Description goes here.
3
+ Get Zipcodes and Location info by using ZipCode APIS.
4
+
5
+ = Usage
6
+
7
+ To use this gem, first you need to register your application at Zipcode API
8
+ visit https://www.zipcodeapi.com/Register, give your application name and email, then obtain an apikey which can be used to communicate with zipcode apis.
9
+
10
+ apikey = "xxxxxxxx"
11
+
12
+ then,
13
+
14
+ $ gem install zipcode_locator
15
+
16
+ $ @object = ZipcodeLocator.new(apikey)
17
+
18
+ = Zipcode Locator methods
19
+
20
+ zipcode_locator supports different units and reposnse formats, To get repsonse in particular format with a particulat unit, you can pass these as an optional parameter
21
+
22
+ optional parameter includes unit and format for the request.
23
+
24
+ unit can be any of these availble units "km", "mile", "degree", and "radians"
25
+
26
+ format can be 'json', 'xml', and 'csv'
27
+
28
+ $ options = { :unit => "km", :format => "json" }
29
+
30
+ == Zipcode Distance
31
+
32
+ $ zipcode1 = 10001
33
+ $ zipcode2 = 10005
34
+
35
+ $ @object.distance_between_zipcodes(zipcode1, zipcode2, options)
36
+
37
+ == Zipcodes By Radius
38
+
39
+ $ zipcode = 10001
40
+ $ radius = 5
41
+
42
+ $ @object.get_zipcodes_by_radius(zipcode, radius, options)
43
+
44
+ == Find close Zipcodes
45
+
46
+ $ zipcodes = "10001, 10005"
47
+
48
+ or
49
+
50
+ $ zipcodes = [10001, 10005]
51
+ $ distance = 5
52
+
53
+ $ @object.find_close_zipcodes(zipcodes, distance, options)
54
+
55
+ == Zipcode to Location info
56
+
57
+ $ zipcode = 10005
58
+
59
+ $ @object.zipcode_location_info(zipcode, options)
60
+
61
+ == Multi Zipcodes to Location info
62
+
63
+ $ zipcodes = "10001, 10005"
64
+
65
+ or
66
+
67
+ $ zipcodes = [10001, 10005]
68
+
69
+ $ @object.multi_zipcodes_location_info(zipcodes, options)
70
+
71
+ == Location to Zipcodes
72
+
73
+ $ city = "Brooklyn"
74
+ $ state = "NY"
75
+
76
+ $ @object.get_zipcodes_by_locations(city, state, options)
77
+
78
+
4
79
 
5
80
  == Contributing to zipcode_locator
6
81
 
data/Rakefile CHANGED
@@ -17,7 +17,7 @@ Jeweler::Tasks.new do |gem|
17
17
  gem.name = "zipcode_locator"
18
18
  gem.homepage = "http://github.com/anildias/zipcode_locator"
19
19
  gem.license = "MIT"
20
- gem.summary = %Q{Locate place with the help of Zip code API within a given distance by inputting zipcode}
20
+ gem.summary = %Q{Get Zipcodes and Location info by using ZipCode APISe}
21
21
  gem.description = %Q{Locate place with the help of Zip code API within a given distance by inputting zipcode}
22
22
  gem.email = "anildiasdavis@gmail.com"
23
23
  gem.authors = ["anildias"]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.1.2
@@ -1,61 +1,60 @@
1
1
  require 'zipcode_locator/unit'
2
-
3
- require 'httparty'
2
+ require 'zipcode_locator/format'
3
+ require 'zipcode_locator/response'
4
+ require 'zipcode_locator/locator'
4
5
 
5
6
  class ZipcodeLocator
6
- DEFAULT_UNIT = "km"
7
- DEFAULT_FORMAT = "json"
8
- AVAILABLE_UNITS = ["km", "mile", "radians", "degrees"]
9
- AVAILABLE_FORMATS = ["json", "xml", "csv"]
10
7
 
11
8
  def initialize(api_key)
12
9
  @api_key = api_key
13
10
  end
14
11
 
15
- def distance_between_zipcodes(zip_code1, zip_code2, unit = nil, format = nil)
16
- format = AVAILABLE_FORMATS.include?(format) ? format : DEFAULT_FORMAT
17
- unit = AVAILABLE_UNITS.include?(unit) ? unit : DEFAULT_UNIT
12
+ def distance_between_zipcodes(zip_code1, zip_code2, options = {})
13
+ options = {} unless options.is_a? Hash
14
+ unit, format = Locator.init(options[:unit], options[:format])
18
15
  url = "http://www.zipcodeapi.com/rest/#{@api_key}/distance.#{format}/#{zip_code1}/#{zip_code2}/#{unit}"
19
- JSON.parse(HTTParty.get(url).body)
16
+ response = Locator.get_response(url, format)
20
17
  end
21
18
 
22
- def get_zipcodes_by_radius(zip_code, radius, unit = nil, format = nil)
23
- format = AVAILABLE_FORMATS.include?(format) ? format : DEFAULT_FORMAT
24
- unit = AVAILABLE_UNITS.include?(unit) ? unit : DEFAULT_UNIT
19
+ def get_zipcodes_by_radius(zip_code, radius, options = {})
20
+ options = {} unless options.is_a? Hash
21
+ unit, format = Locator.init(options[:unit], options[:format])
25
22
  url = "http://www.zipcodeapi.com/rest/#{@api_key}/radius.#{format}/#{zip_code}/#{radius}/#{unit}"
26
- JSON.parse(HTTParty.get(url).body)
23
+ response = Locator.get_response(url, format)
27
24
  end
28
25
 
29
26
  # zip_codes = array of zipcodes
30
- def find_close_zipcodes(zip_codes, distance, unit = nil, format = nil)
31
- format = AVAILABLE_FORMATS.include?(format) ? format : DEFAULT_FORMAT
32
- unit = AVAILABLE_UNITS.include?(unit) ? unit : DEFAULT_UNIT
33
- zip_codes = zip_codes.join(',')
27
+ def find_close_zipcodes(zip_codes, distance, options = {})
28
+ options = {} unless options.is_a? Hash
29
+ unit, format = Locator.init(options[:unit], options[:format])
30
+ zip_codes = [zip_codes].flatten.join(',')
34
31
  url = "http://www.zipcodeapi.com/rest/#{@api_key}/match-close.#{format}/#{zip_codes}/#{distance}/#{unit}"
35
- JSON.parse(HTTParty.get(url).body)
32
+ response = Locator.get_response(url, format)
36
33
  end
37
34
 
38
- def zipcode_location_info(zip_code, unit = nil, format = nil)
39
- format = AVAILABLE_FORMATS.include?(format) ? format : DEFAULT_FORMAT
40
- unit = AVAILABLE_UNITS.include?(unit) ? unit : DEFAULT_UNIT
35
+ def zipcode_location_info(zip_code, options = {})
36
+ options = {} unless options.is_a? Hash
37
+ unit, format = Locator.init(options[:unit], options[:format])
41
38
  url = "http://www.zipcodeapi.com/rest/#{@api_key}/info.#{format}/#{zip_code}/#{unit}"
42
- JSON.parse(HTTParty.get(url).body)
39
+ response = Locator.get_response(url, format)
43
40
  end
44
41
 
45
42
  # zip_codes = array of zipcodes
46
- def multi_zipcodes_location_info(zip_codes, unit = nil, format = nil)
47
- format = AVAILABLE_FORMATS.include?(format) ? format : DEFAULT_FORMAT
48
- unit = AVAILABLE_UNITS.include?(unit) ? unit : DEFAULT_UNIT
49
- zip_codes = zip_codes.join(',')
43
+ def multi_zipcodes_location_info(zip_codes, options = {})
44
+ options = {} unless options.is_a? Hash
45
+ unit, format = Locator.init(options[:unit], options[:format])
46
+ zip_codes = [zip_codes].flatten.join(',')
50
47
  url = "http://www.zipcodeapi.com/rest/#{@api_key}/multi-info.#{format}/#{zip_codes}/#{unit}"
51
- JSON.parse(HTTParty.get(url).body)
48
+ response = Locator.get_response(url, format)
52
49
  end
53
50
 
54
- def get_zipcodes_by_locations(city, state)
51
+ def get_zipcodes_by_locations(city, state, options = {})
52
+ options = {} unless options.is_a? Hash
55
53
  city = city.delete(' ')
56
54
  state = state.delete(' ')
57
- url = "http://www.zipcodeapi.com/rest/#{@api_key}/city-zips.#{DEFAULT_FORMAT}/#{city}/#{state}"
58
- JSON.parse(HTTParty.get(url).body)
55
+ format = Format.set(options[:format])
56
+ url = "http://www.zipcodeapi.com/rest/#{@api_key}/city-zips.#{format}/#{city}/#{state}"
57
+ response = Locator.get_response(url, format)
59
58
  end
60
59
 
61
60
  end
@@ -0,0 +1,17 @@
1
+ module Format
2
+ DEFAULT_FORMAT = "json"
3
+ AVAILABLE_FORMATS = ["json", "xml", "csv"]
4
+
5
+ def self.default_format
6
+ DEFAULT_FORMAT
7
+ end
8
+
9
+ def self.available_formats
10
+ AVAILABLE_FORMATS
11
+ end
12
+
13
+ def self.set(format)
14
+ AVAILABLE_FORMATS.include?(format) ? format : DEFAULT_FORMAT
15
+ end
16
+ end
17
+
@@ -0,0 +1,21 @@
1
+ require 'zipcode_locator/unit'
2
+ require 'zipcode_locator/format'
3
+ require 'zipcode_locator/response'
4
+
5
+ module Locator
6
+
7
+ def self.init(unit, format)
8
+ [Unit.set(unit), Format.set(format)]
9
+ end
10
+
11
+ def self.get_response(url, format)
12
+ case format
13
+ when "json"
14
+ Response.json(url)
15
+ when "xml"
16
+ Response.xml(url)
17
+ when "csv"
18
+ Response.csv(url)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,37 @@
1
+ require 'httparty'
2
+ require 'nokogiri'
3
+
4
+ module Response
5
+
6
+ ERROR_JSON_RESPONSE = { status: 400, message: "error" }
7
+ ERROR_XML_RESPONSE = "<?xml version=\"1.0\"?>\n<response>\n <status>400</status>\n<message>error</message>\n</response>\n"
8
+ ERROR_CSV_RESPONSE = "status,message\n400,error\n"
9
+
10
+ def self.json(url)
11
+ zipcode_response = HTTParty.get(url)
12
+ if zipcode_response.code == 200
13
+ JSON.parse(zipcode_response.body)
14
+ else
15
+ ERROR_JSON_RESPONSE
16
+ end
17
+ end
18
+
19
+ def self.xml(url)
20
+ zipcode_response = HTTParty.get(url)
21
+ if zipcode_response.code == 200
22
+ Nokogiri::XML(zipcode_response.body).to_xml
23
+ else
24
+ ERROR_XML_RESPONSE
25
+ end
26
+ end
27
+
28
+ def self.csv(url)
29
+ zipcode_response = HTTParty.get(url)
30
+ if zipcode_response.code == 200
31
+ zipcode_response.body
32
+ else
33
+ ERROR_CSV_RESPONSE
34
+ end
35
+ end
36
+ end
37
+
@@ -1,14 +1,17 @@
1
-
2
- module Unit
3
- DEFAULT_UNIT = "km"
4
- AVAILABLE_UNITS = ["km", "mile", "radians", "degrees"]
5
-
6
- def self.default_unit
7
- DEFAULT_UNIT
8
- end
9
-
10
- def self.available_units
11
- AVAILABLE_UNITS
12
- end
1
+ module Unit
2
+ DEFAULT_UNIT = "km"
3
+ AVAILABLE_UNITS = ["km", "mile", "radians", "degrees"]
4
+
5
+ def self.default_unit
6
+ DEFAULT_UNIT
7
+ end
8
+
9
+ def self.available_units
10
+ AVAILABLE_UNITS
11
+ end
12
+
13
+ def self.set(unit)
14
+ AVAILABLE_UNITS.include?(unit) ? unit : DEFAULT_UNIT
13
15
  end
16
+ end
14
17
 
data/test/helper.rb CHANGED
@@ -34,7 +34,7 @@ require 'shoulda'
34
34
 
35
35
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
36
36
  $LOAD_PATH.unshift(File.dirname(__FILE__))
37
- require 'locator'
37
+ require 'zipcode_locator'
38
38
 
39
39
  class Minitest::Test
40
40
  end
@@ -46,7 +46,7 @@ class TestZipcodeLocator < Minitest::Test
46
46
  def test_multi_zipcodes_location_info()
47
47
  test_zipcodes = "10001,10005"
48
48
  VCR.use_cassette("multi_zipcodes_location_info", :record => :new_episodes) do
49
- res = @@loc.multi_zipcodes_location_info([10001, 10005], 5)
49
+ res = @@loc.multi_zipcodes_location_info([10001, 10005])
50
50
  response = Net::HTTP.get_response(URI("http://www.zipcodeapi.com/rest/3YJBA4WF9vpMJWjnh0otcznhkPzlsuRwtB74F4KOz9Bj6VGnV4Q8EepY3Zkwtc2X/multi-info.json/#{test_zipcodes}/km"))
51
51
  assert_equal res, JSON.parse(response.body)
52
52
  end
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: zipcode_locator 0.1.1 ruby lib
5
+ # stub: zipcode_locator 0.1.2 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "zipcode_locator"
9
- s.version = "0.1.1"
9
+ s.version = "0.1.2"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["anildias"]
14
- s.date = "2016-03-10"
14
+ s.date = "2016-03-14"
15
15
  s.description = "Locate place with the help of Zip code API within a given distance by inputting zipcode"
16
16
  s.email = "anildiasdavis@gmail.com"
17
17
  s.extra_rdoc_files = [
@@ -27,6 +27,9 @@ Gem::Specification.new do |s|
27
27
  "Rakefile",
28
28
  "VERSION",
29
29
  "lib/zipcode_locator.rb",
30
+ "lib/zipcode_locator/format.rb",
31
+ "lib/zipcode_locator/locator.rb",
32
+ "lib/zipcode_locator/response.rb",
30
33
  "lib/zipcode_locator/unit.rb",
31
34
  "test/helper.rb",
32
35
  "test/test_zipcode_locator.rb",
@@ -41,7 +44,7 @@ Gem::Specification.new do |s|
41
44
  s.homepage = "http://github.com/anildias/zipcode_locator"
42
45
  s.licenses = ["MIT"]
43
46
  s.rubygems_version = "2.4.3"
44
- s.summary = "Locate place with the help of Zip code API within a given distance by inputting zipcode"
47
+ s.summary = "Get Zipcodes and Location info by using ZipCode APISe"
45
48
 
46
49
  if s.respond_to? :specification_version then
47
50
  s.specification_version = 4
@@ -55,6 +58,7 @@ Gem::Specification.new do |s|
55
58
  s.add_development_dependency(%q<vcr>, [">= 0"])
56
59
  s.add_development_dependency(%q<webmock>, [">= 0"])
57
60
  s.add_development_dependency(%q<httparty>, [">= 0"])
61
+ s.add_development_dependency(%q<nokogiri>, [">= 0"])
58
62
  else
59
63
  s.add_dependency(%q<shoulda>, [">= 0"])
60
64
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
@@ -64,6 +68,7 @@ Gem::Specification.new do |s|
64
68
  s.add_dependency(%q<vcr>, [">= 0"])
65
69
  s.add_dependency(%q<webmock>, [">= 0"])
66
70
  s.add_dependency(%q<httparty>, [">= 0"])
71
+ s.add_dependency(%q<nokogiri>, [">= 0"])
67
72
  end
68
73
  else
69
74
  s.add_dependency(%q<shoulda>, [">= 0"])
@@ -74,6 +79,7 @@ Gem::Specification.new do |s|
74
79
  s.add_dependency(%q<vcr>, [">= 0"])
75
80
  s.add_dependency(%q<webmock>, [">= 0"])
76
81
  s.add_dependency(%q<httparty>, [">= 0"])
82
+ s.add_dependency(%q<nokogiri>, [">= 0"])
77
83
  end
78
84
  end
79
85
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zipcode_locator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - anildias
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-10 00:00:00.000000000 Z
11
+ date: 2016-03-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: shoulda
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: nokogiri
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
125
139
  description: Locate place with the help of Zip code API within a given distance by
126
140
  inputting zipcode
127
141
  email: anildiasdavis@gmail.com
@@ -139,6 +153,9 @@ files:
139
153
  - Rakefile
140
154
  - VERSION
141
155
  - lib/zipcode_locator.rb
156
+ - lib/zipcode_locator/format.rb
157
+ - lib/zipcode_locator/locator.rb
158
+ - lib/zipcode_locator/response.rb
142
159
  - lib/zipcode_locator/unit.rb
143
160
  - test/helper.rb
144
161
  - test/test_zipcode_locator.rb
@@ -172,6 +189,5 @@ rubyforge_project:
172
189
  rubygems_version: 2.4.3
173
190
  signing_key:
174
191
  specification_version: 4
175
- summary: Locate place with the help of Zip code API within a given distance by inputting
176
- zipcode
192
+ summary: Get Zipcodes and Location info by using ZipCode APISe
177
193
  test_files: []