geokit_smarty_streets_geocoder 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 287afaaf7b3e5f713f3d8a8cf7ec01b0f29a9188
4
+ data.tar.gz: 76714b200faf580921c821ce3c552bf73b0eccee
5
+ SHA512:
6
+ metadata.gz: 9524648b93ac0bcd0a1008def3e5c225772ccf9bb809e2d000101c8ddf2e082f036b719dcb21381740b230741e0e60bc26124adcdd02cba7b446376e0ed26c31
7
+ data.tar.gz: 4cd5e2c2e42fbf78ac0d906e16c018542da8bf73db7b6c8ceb210f01866401d87f63066a7e912aa8cb85c4fccc8f7504a8910e1a266ebfb11b0a74f02bd0d523
data/.gitignore ADDED
@@ -0,0 +1,25 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
23
+ .ruby-version
24
+ .ruby-gemset
25
+ .env
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in smarty_streets_geocoder.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2016 EasyPost
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,52 @@
1
+ [![Gem Version](https://badge.fury.io/rb/geokit_smarty_streets_geocoder.svg)](https://badge.fury.io/rb/geokit_smarty_streets_geocoder)
2
+ [![CircleCI](https://circleci.com/gh/EasyPost/geokit_smarty_streets_geocoder.svg?style=svg)](https://circleci.com/gh/EasyPost/geokit_smarty_streets_geocoder)
3
+
4
+ # SmartyStreetsGeocoder
5
+
6
+ Custom [geokit](https://github.com/geokit/geokit) geocoder for [SmartyStreets](https://smartystreets.com) address verification service.
7
+
8
+ This geocoder works for US addressed only.
9
+
10
+ [API Documentation](https://smartystreets.com/docs/us-zipcode-api)
11
+
12
+ ## Installation
13
+
14
+ Add this line to your application's Gemfile:
15
+
16
+ gem 'geokit_smarty_streets_geocoder'
17
+
18
+ And then execute:
19
+
20
+ $ bundle
21
+
22
+ Or install it yourself as:
23
+
24
+ $ gem install geokit_smarty_streets_geocoder
25
+
26
+ ## Configuration
27
+
28
+
29
+ ```ruby
30
+ # This is your SmartyStreets application key for the SmartyStreets Geocoder.
31
+ # See https://smartystreets.com/docs/authentication#keypairs
32
+ Geokit::Geocoders::SmartyStreetsGeocoder.auth_id = 'REPLACE_WITH_YOUR_KEY'
33
+ Geokit::Geocoders::SmartyStreetsGeocoder.auth_token = 'REPLACE_WITH_YOUR_CODE'
34
+ ```
35
+
36
+
37
+ ## Usage
38
+
39
+ Because US Zipcode API requires zip and/or city and state it's better to pass an instance of GeoLoc rather than address string.
40
+
41
+ ```ruby
42
+ # use :smarty_streets to specify this geocoder in your list of geocoders.
43
+ Geokit::Geocoders::SmartyStreetsGeocoder.geocode( Geokit::GeoLoc.new(city: "Sunnyvale", state: "CA", country_code: "US") )
44
+ ```
45
+
46
+ ## Contributing
47
+
48
+ 1. Fork it ( https://github.com/[my-github-username]/geokit_smarty_streets_geocoder/fork )
49
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
50
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
51
+ 4. Push to the branch (`git push origin my-new-feature`)
52
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,7 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
7
+
data/circle.yml ADDED
@@ -0,0 +1,9 @@
1
+ machine:
2
+ ruby:
3
+ version: 2.3.1
4
+ environment:
5
+ RAKE_ENV: test
6
+
7
+ dependencies:
8
+ pre:
9
+ - gem install bundler -v '~> 1.10'
@@ -0,0 +1,30 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "geokit_smarty_streets_geocoder"
7
+ spec.version = "0.0.3"
8
+ spec.authors = ["Serhiy Rozum"]
9
+ spec.email = ["contact@easypost.com"]
10
+ spec.summary = %q{Geokit custom geocoder for SmartyStreets address verification service}
11
+ spec.description = %q{Geokit custom geocoder for SmartyStreets address verification service}
12
+ spec.homepage = "https://github.com/easypost/smarty_streets_geocoder.git"
13
+ spec.license = "MIT"
14
+
15
+ spec.files = `git ls-files -z`.split("\x0")
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_development_dependency "bundler", "~> 1.6"
21
+ spec.add_development_dependency "rake"
22
+ spec.add_development_dependency "rspec"
23
+ spec.add_development_dependency "vcr"
24
+ spec.add_development_dependency "webmock"
25
+
26
+ spec.add_dependency "geokit"
27
+ spec.add_dependency "Indirizzo"
28
+ spec.add_dependency "countries"
29
+
30
+ end
@@ -0,0 +1,90 @@
1
+ require "uri"
2
+ require "geokit"
3
+ require "indirizzo"
4
+ require "countries"
5
+
6
+ module Geokit
7
+ module Geocoders
8
+ class SmartyStreetsGeocoder < Geocoder
9
+
10
+ API_ENDPOINT = "https://us-zipcode.api.smartystreets.com/lookup".freeze
11
+
12
+ config :auth_id, :auth_token
13
+
14
+ private
15
+
16
+ def self.do_geocode(address, options = {})
17
+
18
+ if (auth_id.nil? || auth_id.empty?) || (auth_token.nil? || auth_token.empty?)
19
+ raise(Geokit::Geocoders::GeocodeError, "SmartyStreets requires auth id and token to use their service.")
20
+ end
21
+
22
+ address = address.is_a?(GeoLoc) ? address : parse_address(address)
23
+
24
+ return GeoLoc.new unless address.is_us?
25
+
26
+ process :json, submit_url(address), address
27
+ end
28
+
29
+ def self.submit_url(address)
30
+ args = []
31
+ args << ["auth-id", auth_id]
32
+ args << ["auth-token", auth_token]
33
+
34
+ args << ["city", address.city]
35
+ args << ["state", address.state]
36
+ args << ["zipcode", address.zip]
37
+
38
+ [API_ENDPOINT, '?', URI.encode_www_form(args)].join('')
39
+ end
40
+
41
+
42
+ def self.parse_json(json, address)
43
+ json = json.first
44
+
45
+ return GeoLoc.new if json.has_key?('status') # means error
46
+
47
+ address.provider = Geokit::Inflector.underscore(provider_name)
48
+
49
+ if city_state = json["city_states"].first
50
+ address.city = city_state["city"]
51
+ address.state_code = city_state["state_abbreviation"]
52
+ address.state_name = city_state["state"]
53
+ end
54
+
55
+ if zipcode = detect_zipcode(json, address.city)
56
+ address.zip = zipcode["zipcode"]
57
+ address.lat = zipcode["latitude"]
58
+ address.lng = zipcode["longitude"]
59
+ end
60
+
61
+ address.success = true
62
+
63
+ address
64
+ end
65
+
66
+ def self.detect_zipcode(json, city)
67
+ json["zipcodes"].detect { |zc| zc["default_city"] == city } || json["zipcodes"].first
68
+ end
69
+
70
+ def self.parse_address(address_string)
71
+ address = Indirizzo::Address.new(address_string, expand_streets: false)
72
+
73
+ loc = GeoLoc.new
74
+ loc.street_number = address.street.join(' ')
75
+ loc.street_name = address.number
76
+ loc.city = address.city
77
+ loc.state = address.state
78
+ loc.zip = address.zip
79
+
80
+ if country = ::ISO3166::Country.find_country_by_alpha2(address.country) || ::ISO3166::Country.find_country_by_name(address.country)
81
+ loc.country_code = country.try(:alpha2)
82
+ loc.country = country.try(:name) || address.country
83
+ end
84
+
85
+ loc
86
+ end
87
+
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,34 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://us-zipcode.api.smartystreets.com/lookup?auth-id=<SMARTYSTREETS_AUTH_ID>&auth-token=<SMARTYSTREETS_AUTH_TOKEN>&city=%5B%22Gilbert%22%5D&state=AZ&zipcode=85297
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Content-Type:
22
+ - application/json; charset=utf-8
23
+ Date:
24
+ - Fri, 09 Sep 2016 18:17:29 GMT
25
+ Content-Length:
26
+ - '349'
27
+ Strict-Transport-Security:
28
+ - max-age=31536000; includeSubDomains
29
+ body:
30
+ encoding: UTF-8
31
+ string: '[{"input_index":0,"city_states":[{"city":"Gilbert","state_abbreviation":"AZ","state":"Arizona","mailable_city":true}],"zipcodes":[{"zipcode":"85297","zipcode_type":"S","default_city":"Gilbert","county_fips":"04013","county_name":"Maricopa","state_abbreviation":"AZ","state":"Arizona","latitude":33.27696,"longitude":-111.71752,"precision":"Zip5"}]}]'
32
+ http_version:
33
+ recorded_at: Fri, 09 Sep 2016 18:17:29 GMT
34
+ recorded_with: VCR 3.0.3
@@ -0,0 +1,37 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://us-zipcode.api.smartystreets.com/lookup?auth-id=test&auth-token=fake&city=Sunnyvale&state=CA&zipcode
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 401
19
+ message: Unauthorized
20
+ headers:
21
+ Content-Type:
22
+ - text/plain; charset=utf-8
23
+ X-Content-Type-Options:
24
+ - nosniff
25
+ Date:
26
+ - Fri, 09 Sep 2016 18:17:14 GMT
27
+ Content-Length:
28
+ - '13'
29
+ Strict-Transport-Security:
30
+ - max-age=31536000; includeSubDomains
31
+ body:
32
+ encoding: UTF-8
33
+ string: |
34
+ Unauthorized
35
+ http_version:
36
+ recorded_at: Fri, 09 Sep 2016 18:17:15 GMT
37
+ recorded_with: VCR 3.0.3
@@ -0,0 +1,39 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://us-zipcode.api.smartystreets.com/lookup?auth-id=<SMARTYSTREETS_AUTH_ID>&auth-token=<SMARTYSTREETS_AUTH_TOKEN>&city=Sunnyvale&state=CA&zipcode
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Content-Type:
22
+ - application/json; charset=utf-8
23
+ Date:
24
+ - Fri, 09 Sep 2016 18:17:29 GMT
25
+ Content-Length:
26
+ - '1262'
27
+ Strict-Transport-Security:
28
+ - max-age=31536000; includeSubDomains
29
+ body:
30
+ encoding: UTF-8
31
+ string: '[{"input_index":0,"city_states":[{"city":"Sunnyvale","state_abbreviation":"CA","state":"California","mailable_city":true}],"zipcodes":[{"zipcode":"94085","zipcode_type":"S","default_city":"Sunnyvale","county_fips":"06085","county_name":"Santa
32
+ Clara","state_abbreviation":"CA","state":"California","latitude":37.38943,"longitude":-122.01811,"precision":"Zip5"},{"zipcode":"94086","zipcode_type":"S","default_city":"Sunnyvale","county_fips":"06085","county_name":"Santa
33
+ Clara","state_abbreviation":"CA","state":"California","latitude":37.37142,"longitude":-122.02794,"precision":"Zip5"},{"zipcode":"94087","zipcode_type":"S","default_city":"Sunnyvale","county_fips":"06085","county_name":"Santa
34
+ Clara","state_abbreviation":"CA","state":"California","latitude":37.35121,"longitude":-122.03564,"precision":"Zip5"},{"zipcode":"94088","zipcode_type":"P","default_city":"Sunnyvale","county_fips":"06085","county_name":"Santa
35
+ Clara","state_abbreviation":"CA","state":"California","latitude":37.41039,"longitude":-122.01898,"precision":"Zip5"},{"zipcode":"94089","zipcode_type":"S","default_city":"Sunnyvale","county_fips":"06085","county_name":"Santa
36
+ Clara","state_abbreviation":"CA","state":"California","latitude":37.40243,"longitude":-122.00355,"precision":"Zip5"}]}]'
37
+ http_version:
38
+ recorded_at: Fri, 09 Sep 2016 18:17:29 GMT
39
+ recorded_with: VCR 3.0.3
@@ -0,0 +1,89 @@
1
+ require 'spec_helper'
2
+
3
+ describe Geokit::Geocoders::SmartyStreetsGeocoder do
4
+
5
+ let(:address) { Geokit::GeoLoc.new(city: "Sunnyvale", state: "CA", country_code: "US") }
6
+
7
+ subject { described_class.geocode(address) }
8
+
9
+ context "when missing credentials" do
10
+
11
+ it 'raises an error' do
12
+ expect { subject }.to raise_error Geokit::Geocoders::GeocodeError
13
+ end
14
+ end
15
+
16
+ context "with invalid credentials" do
17
+
18
+ before do
19
+ Geokit::Geocoders::SmartyStreetsGeocoder.auth_id = "test"
20
+ Geokit::Geocoders::SmartyStreetsGeocoder.auth_token = "fake"
21
+ end
22
+
23
+ it 'returns invalid location' do
24
+ VCR.use_cassette("permission_denied") do
25
+ expect( subject.success? ).to be false
26
+ end
27
+ end
28
+ end
29
+
30
+ context "with correct credentials" do
31
+
32
+ before do
33
+ Geokit::Geocoders::SmartyStreetsGeocoder.auth_id = ENV['SMARTYSTREETS_AUTH_ID']
34
+ Geokit::Geocoders::SmartyStreetsGeocoder.auth_token = ENV['SMARTYSTREETS_AUTH_TOKEN']
35
+ end
36
+
37
+ it 'not raises an error' do
38
+ VCR.use_cassette("sunnyvale_location") do
39
+ expect { subject }.not_to raise_error
40
+ end
41
+ end
42
+
43
+ it 'returns valid location' do
44
+ VCR.use_cassette("sunnyvale_location") do
45
+ expect( subject.success? ).to be true
46
+ expect( subject.city ).to eq "Sunnyvale"
47
+ expect( subject.state_name ).to eq "California"
48
+ expect( subject.state_code ).to eq "CA"
49
+ expect( subject.state ).to eq "CA"
50
+ expect( subject.zip ).to eq "94085"
51
+ expect( subject.country_code ).to eq "US"
52
+ expect( subject.lat ).to eq 37.38943
53
+ expect( subject.lng ).to eq -122.01811
54
+ end
55
+ end
56
+
57
+ context "string address" do
58
+
59
+ let(:address) { "Gilbert, AZ 85297 US" }
60
+
61
+ it 'returns valid location' do
62
+ VCR.use_cassette("arizona_location") do
63
+ expect( subject.success? ).to be true
64
+ expect( subject.city ).to eq "Gilbert"
65
+ expect( subject.state_name ).to eq "Arizona"
66
+ expect( subject.state_code ).to eq "AZ"
67
+ expect( subject.state ).to eq "AZ"
68
+ expect( subject.zip ).to eq "85297"
69
+ expect( subject.country_code ).to eq "US"
70
+ expect( subject.lat ).to eq 33.27696
71
+ expect( subject.lng ).to eq -111.71752
72
+ end
73
+ end
74
+
75
+ end
76
+
77
+ context "not US location" do
78
+
79
+ let(:address) { Geokit::GeoLoc.new(city: "Vancouver", state: "BC", country_code: "CA") }
80
+
81
+ it 'returns invalid location' do
82
+ expect( subject.success? ).to be false
83
+ end
84
+
85
+ end
86
+
87
+ end
88
+
89
+ end
@@ -0,0 +1,14 @@
1
+ ENV['RAKE_ENV'] = 'test'
2
+
3
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
4
+ require 'geokit_smarty_streets_geocoder'
5
+
6
+ require "vcr"
7
+
8
+ VCR.configure do |config|
9
+ config.cassette_library_dir = "spec/cassettes"
10
+ config.hook_into :webmock
11
+
12
+ config.filter_sensitive_data('<SMARTYSTREETS_AUTH_ID>') { ENV['SMARTYSTREETS_AUTH_ID'] }
13
+ config.filter_sensitive_data('<SMARTYSTREETS_AUTH_TOKEN>') { ENV['SMARTYSTREETS_AUTH_TOKEN'] }
14
+ end
metadata ADDED
@@ -0,0 +1,175 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: geokit_smarty_streets_geocoder
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - Serhiy Rozum
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-09-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: vcr
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: webmock
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: geokit
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: Indirizzo
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: countries
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ description: Geokit custom geocoder for SmartyStreets address verification service
126
+ email:
127
+ - contact@easypost.com
128
+ executables: []
129
+ extensions: []
130
+ extra_rdoc_files: []
131
+ files:
132
+ - ".gitignore"
133
+ - ".rspec"
134
+ - Gemfile
135
+ - LICENSE.txt
136
+ - README.md
137
+ - Rakefile
138
+ - circle.yml
139
+ - geokit_smarty_streets_geocoder.gemspec
140
+ - lib/geokit_smarty_streets_geocoder.rb
141
+ - spec/cassettes/arizona_location.yml
142
+ - spec/cassettes/permission_denied.yml
143
+ - spec/cassettes/sunnyvale_location.yml
144
+ - spec/smarty_streets_geocoder_spec.rb
145
+ - spec/spec_helper.rb
146
+ homepage: https://github.com/easypost/smarty_streets_geocoder.git
147
+ licenses:
148
+ - MIT
149
+ metadata: {}
150
+ post_install_message:
151
+ rdoc_options: []
152
+ require_paths:
153
+ - lib
154
+ required_ruby_version: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ required_rubygems_version: !ruby/object:Gem::Requirement
160
+ requirements:
161
+ - - ">="
162
+ - !ruby/object:Gem::Version
163
+ version: '0'
164
+ requirements: []
165
+ rubyforge_project:
166
+ rubygems_version: 2.2.2
167
+ signing_key:
168
+ specification_version: 4
169
+ summary: Geokit custom geocoder for SmartyStreets address verification service
170
+ test_files:
171
+ - spec/cassettes/arizona_location.yml
172
+ - spec/cassettes/permission_denied.yml
173
+ - spec/cassettes/sunnyvale_location.yml
174
+ - spec/smarty_streets_geocoder_spec.rb
175
+ - spec/spec_helper.rb