zipcode_locator 0.1.1 → 0.1.2

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: 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: []