latlong 0.0.1a

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: b5091e46193be6c08e6af49d6bdae867c9a7b483
4
+ data.tar.gz: 17e2ae910e024f2aa68950aff4678200d80d8d51
5
+ SHA512:
6
+ metadata.gz: 645ebf0425ff47216b6a221bcb7591a3c82c64155c53b4326ac7615d6dd81c6a75bdcb4c7d06abeaf426f290e34ed5a18356cf40cc4f374b1c298d2575c06908
7
+ data.tar.gz: 4d548bbef0a52204e05557001456728ad9b4f1ec36d65a696be242c8fad283005c06e207ea45f3c6c827d0eaf045bac306fc733aaa39df89073b54c74b39a092
data/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/.travis.yml ADDED
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.3
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'codeclimate-test-reporter', group: :test, require: nil
4
+
5
+ # Specify your gem's dependencies in latlong.gemspec
6
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Roman Greshny
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,57 @@
1
+ # Latlong
2
+
3
+ Finds latitude and longitude for given address
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'latlong'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install latlong
20
+
21
+ ## Usage
22
+
23
+ In order to fetch coordinates for address, do this:
24
+
25
+ ```ruby
26
+ require 'latlong'
27
+
28
+ Latlong.configure do |config|
29
+ config.provider = :yandex # or :google by default
30
+ end
31
+
32
+ results = Latlong.location 'Sacramento' # returns array of items with
33
+ # coordinates and address
34
+
35
+ results.first.address # 'Sacramento, US'
36
+ results.first.lat # 38.5815719
37
+ results.first.lon # -121.4943996
38
+ ```
39
+
40
+ Also possible to enable caching for requests through [redis](https://github.com/redis/redis-rb):
41
+
42
+ ```ruby
43
+ require 'latlong'
44
+ require 'redis'
45
+
46
+ Latlong.configure do |config|
47
+ config.provider = :yandex # or :google by default
48
+ config.cache = true
49
+ end
50
+ ```
51
+ ## Contributing
52
+
53
+ 1. Fork it ( https://github.com/[my-github-username]/latlong/fork )
54
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
55
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
56
+ 4. Push to the branch (`git push origin my-new-feature`)
57
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << 'test'
6
+ t.pattern = '**/*_test.rb'
7
+ end
8
+
9
+ task :default => :test
10
+
data/latlong.gemspec ADDED
@@ -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
+ require 'latlong/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'latlong'
8
+ spec.version = Latlong::VERSION
9
+ spec.authors = ['Roman Greshny']
10
+ spec.email = ['greshny@gmail.com']
11
+ spec.summary = %q{Finds coordinates by address}
12
+ spec.description = %q{Finds coordinates by address}
13
+ spec.homepage = 'http://github.com/r-ideas/latlong'
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ['lib']
20
+
21
+ spec.add_development_dependency 'bundler', '~> 1.7'
22
+ spec.add_development_dependency 'rake', '~> 10.0'
23
+ spec.add_development_dependency 'minitest'
24
+ spec.add_development_dependency 'pry'
25
+ spec.add_development_dependency 'vcr'
26
+ spec.add_development_dependency 'webmock'
27
+ spec.add_development_dependency 'turn'
28
+
29
+ spec.add_dependency 'geocoder'
30
+ end
data/lib/latlong.rb ADDED
@@ -0,0 +1,27 @@
1
+ require 'latlong/version'
2
+ require 'latlong/configuration'
3
+ require 'latlong/location'
4
+
5
+ module Latlong
6
+
7
+ class << self
8
+ attr_writer :configuration
9
+ end
10
+
11
+ def self.configuration
12
+ @configuration ||= Configuration.new
13
+ end
14
+
15
+ def self.reset
16
+ @configuration = Configuration.new
17
+ end
18
+
19
+ def self.configure
20
+ yield(configuration)
21
+ end
22
+
23
+ def self.location term
24
+ Location.new(term).results
25
+ end
26
+
27
+ end
@@ -0,0 +1,2 @@
1
+ require 'latlong/adapters/google'
2
+ require 'latlong/adapters/yandex'
@@ -0,0 +1,29 @@
1
+ require 'ostruct'
2
+
3
+ module Latlong
4
+ module Adapters
5
+ class Base
6
+
7
+ class NotImplemented < StandardError; end
8
+
9
+ attr_reader :data
10
+
11
+ def self.parse data
12
+ parsed = new(data)
13
+ OpenStruct.new(address: parsed.address,
14
+ lat: parsed.lat,
15
+ lon: parsed.lon,
16
+ position: parsed.position)
17
+ end
18
+
19
+ def initialize data
20
+ @data = data
21
+ end
22
+
23
+ %w(address lat lon position).each do |method|
24
+ define_method(method) { raise NotImplemented.new }
25
+ end
26
+
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,39 @@
1
+ require 'latlong/adapters/base'
2
+
3
+ module Latlong
4
+ module Adapters
5
+ class Google < Base
6
+
7
+ def address
8
+ "#{city(data.data)}, #{country_code(data.data)}"
9
+ end
10
+
11
+ def lat
12
+ data.data['geometry']['location']['lat'].to_f
13
+ end
14
+
15
+ def lon
16
+ data.data['geometry']['location']['lng'].to_f
17
+ end
18
+
19
+ def position
20
+ if data.data['types'].include?('locality') && data.data['types'].include?('political')
21
+ 0
22
+ else
23
+ 1
24
+ end
25
+ end
26
+
27
+ private
28
+
29
+ def city data
30
+ data['address_components'].first['short_name']
31
+ end
32
+
33
+ def country_code data
34
+ data['address_components'].last['short_name']
35
+ end
36
+
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,37 @@
1
+ require 'latlong/adapters/base'
2
+
3
+ module Latlong
4
+ module Adapters
5
+ class Yandex < Base
6
+
7
+ def lat
8
+ coordinates(data).last
9
+ end
10
+
11
+ def lon
12
+ coordinates(data).first
13
+ end
14
+
15
+ def address
16
+ "#{city(data.data)}, #{country_code(data.data)}"
17
+ end
18
+
19
+ def position; 0; end
20
+
21
+ private
22
+
23
+ def city data
24
+ data['GeoObject']['name']
25
+ end
26
+
27
+ def country_code data
28
+ data['GeoObject']['metaDataProperty']['GeocoderMetaData']['AddressDetails']['Country']['CountryNameCode']
29
+ end
30
+
31
+ def coordinates data
32
+ data.data['GeoObject']['Point']['pos'].split(' ').map(&:to_f)
33
+ end
34
+
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,42 @@
1
+ module Latlong
2
+ class Configuration
3
+ class RedisNotFoundError < StandardError; end
4
+
5
+ attr_accessor :provider, :cache
6
+
7
+ def initialize
8
+ @provider = :google
9
+ @cache = false
10
+ end
11
+
12
+ def provider=(name)
13
+ @provider = name
14
+ set_lookup!
15
+ end
16
+
17
+ def cache=(val)
18
+ @cache = val
19
+ set_cache!
20
+ end
21
+
22
+ private
23
+
24
+ def set_lookup!
25
+ Geocoder::Configuration.lookup = provider
26
+ end
27
+
28
+ def set_cache!
29
+ if cache
30
+ begin
31
+ require 'redis'
32
+ Geocoder::Configuration.cache = Redis.new
33
+ rescue LoadError
34
+ raise RedisNotFoundError.new
35
+ end
36
+ else
37
+ Geocoder::Configuration.cache = false
38
+ end
39
+ end
40
+
41
+ end
42
+ end
@@ -0,0 +1,36 @@
1
+ require 'geocoder'
2
+ require 'latlong/adapters'
3
+
4
+ module Latlong
5
+ class Location
6
+ attr_reader :term, :adapter
7
+
8
+ def initialize term
9
+ @term = term
10
+ end
11
+
12
+ def results
13
+ @results ||= get_results
14
+ end
15
+
16
+ private
17
+
18
+ def get_results
19
+ search.map do |location|
20
+ adapter.parse location
21
+ end
22
+ end
23
+
24
+ def adapter
25
+ case Latlong.configuration.provider
26
+ when :yandex then Adapters::Yandex
27
+ when :google then Adapters::Google
28
+ end
29
+ end
30
+
31
+ def search
32
+ Geocoder.search(term)
33
+ end
34
+
35
+ end
36
+ end
@@ -0,0 +1,3 @@
1
+ module Latlong
2
+ VERSION = '0.0.1a'
3
+ end
@@ -0,0 +1,42 @@
1
+ require 'minitest_helper'
2
+
3
+ class TestLatlong < MiniTest::Unit::TestCase
4
+ def test_that_it_has_a_version_number
5
+ refute_nil ::Latlong::VERSION
6
+ end
7
+
8
+ def test_location_by_yandex_provider
9
+ VCR.insert_cassette 'yandex'
10
+ Latlong.configuration.provider = :yandex
11
+
12
+ results = Latlong.location 'Sacramento'
13
+ result = results.first
14
+
15
+ assert_equal results.count, 10
16
+
17
+ assert_equal result.address, 'Sacramento, US'
18
+ assert_equal result.position, 0
19
+ assert_equal result.lon, -121.490899
20
+ assert_equal result.lat, 38.579324
21
+
22
+ VCR.eject_cassette
23
+ end
24
+
25
+ def test_location_by_google_provider
26
+ VCR.insert_cassette 'google'
27
+ Latlong.configuration.provider = :google
28
+
29
+ results = Latlong.location 'Sacramento'
30
+ result = results.first
31
+
32
+ assert_equal results.count, 3
33
+
34
+ assert_equal result.address, 'Sacramento, US'
35
+ assert_equal result.position, 0
36
+ assert_equal result.lon, -121.4943996
37
+ assert_equal result.lat, 38.5815719
38
+
39
+
40
+ VCR.eject_cassette
41
+ end
42
+ end
@@ -0,0 +1,20 @@
1
+ require 'codeclimate-test-reporter'
2
+ CodeClimate::TestReporter.start
3
+
4
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
5
+ require 'latlong'
6
+
7
+ require 'minitest/autorun'
8
+
9
+ require 'turn'
10
+ require 'pry'
11
+
12
+ require 'vcr'
13
+
14
+ VCR.configure do |c|
15
+ c.cassette_library_dir = 'test/vcr_cassettes'
16
+ c.hook_into :webmock
17
+ c.ignore_hosts 'codeclimate.com'
18
+ end
19
+
20
+ Turn.config.format = :dot
@@ -0,0 +1,215 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://maps.googleapis.com/maps/api/geocode/json?address=Sacramento&language=en&sensor=false
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
+ - Wed, 29 Oct 2014 16:56:51 GMT
25
+ Expires:
26
+ - Thu, 30 Oct 2014 16:56:51 GMT
27
+ Cache-Control:
28
+ - public, max-age=86400
29
+ Access-Control-Allow-Origin:
30
+ - "*"
31
+ Server:
32
+ - mafe
33
+ X-Xss-Protection:
34
+ - 1; mode=block
35
+ X-Frame-Options:
36
+ - SAMEORIGIN
37
+ Alternate-Protocol:
38
+ - 80:quic,p=0.01
39
+ Transfer-Encoding:
40
+ - chunked
41
+ body:
42
+ encoding: UTF-8
43
+ string: |
44
+ {
45
+ "results" : [
46
+ {
47
+ "address_components" : [
48
+ {
49
+ "long_name" : "Sacramento",
50
+ "short_name" : "Sacramento",
51
+ "types" : [ "locality", "political" ]
52
+ },
53
+ {
54
+ "long_name" : "Sacramento County",
55
+ "short_name" : "Sacramento County",
56
+ "types" : [ "administrative_area_level_2", "political" ]
57
+ },
58
+ {
59
+ "long_name" : "California",
60
+ "short_name" : "CA",
61
+ "types" : [ "administrative_area_level_1", "political" ]
62
+ },
63
+ {
64
+ "long_name" : "United States",
65
+ "short_name" : "US",
66
+ "types" : [ "country", "political" ]
67
+ }
68
+ ],
69
+ "formatted_address" : "Sacramento, CA, USA",
70
+ "geometry" : {
71
+ "bounds" : {
72
+ "northeast" : {
73
+ "lat" : 38.685507,
74
+ "lng" : -121.325705
75
+ },
76
+ "southwest" : {
77
+ "lat" : 38.437574,
78
+ "lng" : -121.56012
79
+ }
80
+ },
81
+ "location" : {
82
+ "lat" : 38.5815719,
83
+ "lng" : -121.4943996
84
+ },
85
+ "location_type" : "APPROXIMATE",
86
+ "viewport" : {
87
+ "northeast" : {
88
+ "lat" : 38.685507,
89
+ "lng" : -121.325705
90
+ },
91
+ "southwest" : {
92
+ "lat" : 38.437574,
93
+ "lng" : -121.56012
94
+ }
95
+ }
96
+ },
97
+ "types" : [ "locality", "political" ]
98
+ },
99
+ {
100
+ "address_components" : [
101
+ {
102
+ "long_name" : "Sacramento",
103
+ "short_name" : "Sacramento",
104
+ "types" : [ "locality", "political" ]
105
+ },
106
+ {
107
+ "long_name" : "McLean County",
108
+ "short_name" : "McLean County",
109
+ "types" : [ "administrative_area_level_2", "political" ]
110
+ },
111
+ {
112
+ "long_name" : "Kentucky",
113
+ "short_name" : "KY",
114
+ "types" : [ "administrative_area_level_1", "political" ]
115
+ },
116
+ {
117
+ "long_name" : "United States",
118
+ "short_name" : "US",
119
+ "types" : [ "country", "political" ]
120
+ },
121
+ {
122
+ "long_name" : "42372",
123
+ "short_name" : "42372",
124
+ "types" : [ "postal_code" ]
125
+ }
126
+ ],
127
+ "formatted_address" : "Sacramento, KY 42372, USA",
128
+ "geometry" : {
129
+ "bounds" : {
130
+ "northeast" : {
131
+ "lat" : 37.4236159,
132
+ "lng" : -87.26071
133
+ },
134
+ "southwest" : {
135
+ "lat" : 37.409841,
136
+ "lng" : -87.274338
137
+ }
138
+ },
139
+ "location" : {
140
+ "lat" : 37.4158783,
141
+ "lng" : -87.26555309999999
142
+ },
143
+ "location_type" : "APPROXIMATE",
144
+ "viewport" : {
145
+ "northeast" : {
146
+ "lat" : 37.4236159,
147
+ "lng" : -87.26071
148
+ },
149
+ "southwest" : {
150
+ "lat" : 37.409841,
151
+ "lng" : -87.274338
152
+ }
153
+ }
154
+ },
155
+ "types" : [ "locality", "political" ]
156
+ },
157
+ {
158
+ "address_components" : [
159
+ {
160
+ "long_name" : "Sacramento",
161
+ "short_name" : "Sacramento",
162
+ "types" : [ "locality", "political" ]
163
+ },
164
+ {
165
+ "long_name" : "Hubley",
166
+ "short_name" : "Hubley",
167
+ "types" : [ "administrative_area_level_3", "political" ]
168
+ },
169
+ {
170
+ "long_name" : "Schuylkill County",
171
+ "short_name" : "Schuylkill County",
172
+ "types" : [ "administrative_area_level_2", "political" ]
173
+ },
174
+ {
175
+ "long_name" : "Pennsylvania",
176
+ "short_name" : "PA",
177
+ "types" : [ "administrative_area_level_1", "political" ]
178
+ },
179
+ {
180
+ "long_name" : "United States",
181
+ "short_name" : "US",
182
+ "types" : [ "country", "political" ]
183
+ },
184
+ {
185
+ "long_name" : "17968",
186
+ "short_name" : "17968",
187
+ "types" : [ "postal_code" ]
188
+ }
189
+ ],
190
+ "formatted_address" : "Sacramento, PA 17968, USA",
191
+ "geometry" : {
192
+ "location" : {
193
+ "lat" : 40.6345309,
194
+ "lng" : -76.5888514
195
+ },
196
+ "location_type" : "APPROXIMATE",
197
+ "viewport" : {
198
+ "northeast" : {
199
+ "lat" : 40.6358798802915,
200
+ "lng" : -76.58750241970849
201
+ },
202
+ "southwest" : {
203
+ "lat" : 40.63318191970851,
204
+ "lng" : -76.59020038029151
205
+ }
206
+ }
207
+ },
208
+ "types" : [ "locality", "political" ]
209
+ }
210
+ ],
211
+ "status" : "OK"
212
+ }
213
+ http_version:
214
+ recorded_at: Wed, 29 Oct 2014 16:56:51 GMT
215
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,204 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://geocode-maps.yandex.ru/1.x/?format=json&geocode=Sacramento&plng=en
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
+ Server:
22
+ - nginx/1.4.7
23
+ Date:
24
+ - Wed, 29 Oct 2014 16:56:50 GMT
25
+ Content-Type:
26
+ - application/json; charset=utf-8
27
+ Transfer-Encoding:
28
+ - chunked
29
+ Connection:
30
+ - keep-alive
31
+ Vary:
32
+ - Accept-Encoding
33
+ Access-Control-Allow-Origin:
34
+ - "*"
35
+ Expires:
36
+ - Wed, 29 Oct 2014 17:01:50 GMT
37
+ X-Content-Type-Options:
38
+ - nosniff
39
+ Set-Cookie:
40
+ - yandexuid=602336101414601810; domain=.yandex.ru; path=/; expires=Tue, 19 Jan
41
+ 2038 03:14:07 GMT
42
+ body:
43
+ encoding: ASCII-8BIT
44
+ string: !binary |-
45
+ eyJyZXNwb25zZSI6eyJBdHRyaWJ1dGlvbiI6IiIsIkdlb09iamVjdENvbGxl
46
+ Y3Rpb24iOnsibWV0YURhdGFQcm9wZXJ0eSI6eyJHZW9jb2RlclJlc3BvbnNl
47
+ TWV0YURhdGEiOnsicmVxdWVzdCI6IlNhY3JhbWVudG8iLCJmb3VuZCI6IjU4
48
+ IiwicmVzdWx0cyI6IjEwIn19LCJmZWF0dXJlTWVtYmVyIjpbeyJHZW9PYmpl
49
+ Y3QiOnsibWV0YURhdGFQcm9wZXJ0eSI6eyJHZW9jb2Rlck1ldGFEYXRhIjp7
50
+ ImtpbmQiOiJsb2NhbGl0eSIsInRleHQiOiJVbml0ZWQgU3RhdGVzLCBDYWxp
51
+ Zm9ybmlhLCBTYWNyYW1lbnRvIiwicHJlY2lzaW9uIjoib3RoZXIiLCJBZGRy
52
+ ZXNzRGV0YWlscyI6eyJDb3VudHJ5Ijp7IkFkZHJlc3NMaW5lIjoiQ2FsaWZv
53
+ cm5pYSwgU2FjcmFtZW50byIsIkNvdW50cnlOYW1lQ29kZSI6IlVTIiwiQ291
54
+ bnRyeU5hbWUiOiJVbml0ZWQgU3RhdGVzIiwiQWRtaW5pc3RyYXRpdmVBcmVh
55
+ Ijp7IkFkbWluaXN0cmF0aXZlQXJlYU5hbWUiOiJDYWxpZm9ybmlhIiwiU3Vi
56
+ QWRtaW5pc3RyYXRpdmVBcmVhIjp7IlN1YkFkbWluaXN0cmF0aXZlQXJlYU5h
57
+ bWUiOiJTYWNyYW1lbnRvIiwiTG9jYWxpdHkiOnsiTG9jYWxpdHlOYW1lIjoi
58
+ U2FjcmFtZW50byJ9fX19fX19LCJkZXNjcmlwdGlvbiI6IkNhbGlmb3JuaWEs
59
+ IFVuaXRlZCBTdGF0ZXMiLCJuYW1lIjoiU2FjcmFtZW50byIsImJvdW5kZWRC
60
+ eSI6eyJFbnZlbG9wZSI6eyJsb3dlckNvcm5lciI6Ii0xMjEuNTYwNTA5IDM4
61
+ LjQzNzc4OCIsInVwcGVyQ29ybmVyIjoiLTEyMS4zNjI2OTEgMzguNjg1NTk1
62
+ In19LCJQb2ludCI6eyJwb3MiOiItMTIxLjQ5MDg5OSAzOC41NzkzMjQifX19
63
+ LHsiR2VvT2JqZWN0Ijp7Im1ldGFEYXRhUHJvcGVydHkiOnsiR2VvY29kZXJN
64
+ ZXRhRGF0YSI6eyJraW5kIjoibG9jYWxpdHkiLCJ0ZXh0IjoiVXJ1Z3VheSwg
65
+ Q29sb25pYSwgQ29sb25pYSBkZWwgU2FjcmFtZW50byIsInByZWNpc2lvbiI6
66
+ Im90aGVyIiwiQWRkcmVzc0RldGFpbHMiOnsiQ291bnRyeSI6eyJBZGRyZXNz
67
+ TGluZSI6IkNvbG9uaWEsIENvbG9uaWEgZGVsIFNhY3JhbWVudG8iLCJDb3Vu
68
+ dHJ5TmFtZUNvZGUiOiJVWSIsIkNvdW50cnlOYW1lIjoiVXJ1Z3VheSIsIkFk
69
+ bWluaXN0cmF0aXZlQXJlYSI6eyJBZG1pbmlzdHJhdGl2ZUFyZWFOYW1lIjoi
70
+ Q29sb25pYSIsIkxvY2FsaXR5Ijp7IkxvY2FsaXR5TmFtZSI6IkNvbG9uaWEg
71
+ ZGVsIFNhY3JhbWVudG8ifX19fX19LCJkZXNjcmlwdGlvbiI6IkNvbG9uaWEs
72
+ IFVydWd1YXkiLCJuYW1lIjoiQ29sb25pYSBkZWwgU2FjcmFtZW50byIsImJv
73
+ dW5kZWRCeSI6eyJFbnZlbG9wZSI6eyJsb3dlckNvcm5lciI6Ii01Ny44NzAw
74
+ MTkgLTM0LjQ3MzI1NiIsInVwcGVyQ29ybmVyIjoiLTU3LjgxNzk1MiAtMzQu
75
+ NDMxNzg1In19LCJQb2ludCI6eyJwb3MiOiItNTcuODM3NTQ0IC0zNC40NTQ1
76
+ MDYifX19LHsiR2VvT2JqZWN0Ijp7Im1ldGFEYXRhUHJvcGVydHkiOnsiR2Vv
77
+ Y29kZXJNZXRhRGF0YSI6eyJraW5kIjoibG9jYWxpdHkiLCJ0ZXh0IjoiVW5p
78
+ dGVkIFN0YXRlcywgQ2FsaWZvcm5pYSwgWW9sbywgV2VzdCBTYWNyYW1lbnRv
79
+ IiwicHJlY2lzaW9uIjoib3RoZXIiLCJBZGRyZXNzRGV0YWlscyI6eyJDb3Vu
80
+ dHJ5Ijp7IkFkZHJlc3NMaW5lIjoiQ2FsaWZvcm5pYSwgWW9sbywgV2VzdCBT
81
+ YWNyYW1lbnRvIiwiQ291bnRyeU5hbWVDb2RlIjoiVVMiLCJDb3VudHJ5TmFt
82
+ ZSI6IlVuaXRlZCBTdGF0ZXMiLCJBZG1pbmlzdHJhdGl2ZUFyZWEiOnsiQWRt
83
+ aW5pc3RyYXRpdmVBcmVhTmFtZSI6IkNhbGlmb3JuaWEiLCJTdWJBZG1pbmlz
84
+ dHJhdGl2ZUFyZWEiOnsiU3ViQWRtaW5pc3RyYXRpdmVBcmVhTmFtZSI6Illv
85
+ bG8iLCJMb2NhbGl0eSI6eyJMb2NhbGl0eU5hbWUiOiJXZXN0IFNhY3JhbWVu
86
+ dG8ifX19fX19fSwiZGVzY3JpcHRpb24iOiJZb2xvLCBDYWxpZm9ybmlhLCBV
87
+ bml0ZWQgU3RhdGVzIiwibmFtZSI6Ildlc3QgU2FjcmFtZW50byIsImJvdW5k
88
+ ZWRCeSI6eyJFbnZlbG9wZSI6eyJsb3dlckNvcm5lciI6Ii0xMjEuNTg4Nzg4
89
+ IDM4LjUwMjAwNiIsInVwcGVyQ29ybmVyIjoiLTEyMS41MDYwOTggMzguNjA0
90
+ NDU5In19LCJQb2ludCI6eyJwb3MiOiItMTIxLjU1MDE0MyAzOC41NzA5OTYi
91
+ fX19LHsiR2VvT2JqZWN0Ijp7Im1ldGFEYXRhUHJvcGVydHkiOnsiR2VvY29k
92
+ ZXJNZXRhRGF0YSI6eyJraW5kIjoibG9jYWxpdHkiLCJ0ZXh0IjoiVW5pdGVk
93
+ IFN0YXRlcywgS2VudHVja3ksIE1jTGVhbiwgU2FjcmFtZW50byIsInByZWNp
94
+ c2lvbiI6Im90aGVyIiwiQWRkcmVzc0RldGFpbHMiOnsiQ291bnRyeSI6eyJB
95
+ ZGRyZXNzTGluZSI6IktlbnR1Y2t5LCBNY0xlYW4sIFNhY3JhbWVudG8iLCJD
96
+ b3VudHJ5TmFtZUNvZGUiOiJVUyIsIkNvdW50cnlOYW1lIjoiVW5pdGVkIFN0
97
+ YXRlcyIsIkFkbWluaXN0cmF0aXZlQXJlYSI6eyJBZG1pbmlzdHJhdGl2ZUFy
98
+ ZWFOYW1lIjoiS2VudHVja3kiLCJTdWJBZG1pbmlzdHJhdGl2ZUFyZWEiOnsi
99
+ U3ViQWRtaW5pc3RyYXRpdmVBcmVhTmFtZSI6Ik1jTGVhbiIsIkxvY2FsaXR5
100
+ Ijp7IkxvY2FsaXR5TmFtZSI6IlNhY3JhbWVudG8ifX19fX19fSwiZGVzY3Jp
101
+ cHRpb24iOiJNY0xlYW4sIEtlbnR1Y2t5LCBVbml0ZWQgU3RhdGVzIiwibmFt
102
+ ZSI6IlNhY3JhbWVudG8iLCJib3VuZGVkQnkiOnsiRW52ZWxvcGUiOnsibG93
103
+ ZXJDb3JuZXIiOiItODcuMjc0Nzk3IDM3LjQwOTc4NyIsInVwcGVyQ29ybmVy
104
+ IjoiLTg3LjI2MTI0MiAzNy40MjQzNDYifX0sIlBvaW50Ijp7InBvcyI6Ii04
105
+ Ny4yNjQxODggMzcuNDIxMTE1In19fSx7Ikdlb09iamVjdCI6eyJtZXRhRGF0
106
+ YVByb3BlcnR5Ijp7Ikdlb2NvZGVyTWV0YURhdGEiOnsia2luZCI6Imh5ZHJv
107
+ IiwidGV4dCI6IlVuaXRlZCBTdGF0ZXMsIENhbGlmb3JuaWEsIFNhY3JhbWVu
108
+ dG8gUml2ZXIiLCJwcmVjaXNpb24iOiJvdGhlciIsIkFkZHJlc3NEZXRhaWxz
109
+ Ijp7IkNvdW50cnkiOnsiQWRkcmVzc0xpbmUiOiJDYWxpZm9ybmlhLCBTYWNy
110
+ YW1lbnRvIFJpdmVyIiwiQ291bnRyeU5hbWVDb2RlIjoiVVMiLCJDb3VudHJ5
111
+ TmFtZSI6IlVuaXRlZCBTdGF0ZXMiLCJBZG1pbmlzdHJhdGl2ZUFyZWEiOnsi
112
+ QWRtaW5pc3RyYXRpdmVBcmVhTmFtZSI6IkNhbGlmb3JuaWEiLCJMb2NhbGl0
113
+ eSI6eyJQcmVtaXNlIjp7IlByZW1pc2VOYW1lIjoiU2FjcmFtZW50byBSaXZl
114
+ ciJ9fX19fX19LCJkZXNjcmlwdGlvbiI6IkNhbGlmb3JuaWEsIFVuaXRlZCBT
115
+ dGF0ZXMiLCJuYW1lIjoiU2FjcmFtZW50byBSaXZlciIsImJvdW5kZWRCeSI6
116
+ eyJFbnZlbG9wZSI6eyJsb3dlckNvcm5lciI6Ii0xMjIuNDY1NzMzIDM4LjA1
117
+ MzY2OSIsInVwcGVyQ29ybmVyIjoiLTEyMS41MDAzMDQgNDEuMjkxNjA3In19
118
+ LCJQb2ludCI6eyJwb3MiOiItMTIyLjAwMzEyNyAzOS4zOTMxNDAifX19LHsi
119
+ R2VvT2JqZWN0Ijp7Im1ldGFEYXRhUHJvcGVydHkiOnsiR2VvY29kZXJNZXRh
120
+ RGF0YSI6eyJraW5kIjoiZGlzdHJpY3QiLCJ0ZXh0IjoiTWV4aWNvLCBEdXJh
121
+ bmdvLCBHw7NtZXogUGFsYWNpbywgU2FjcmFtZW50byIsInByZWNpc2lvbiI6
122
+ Im90aGVyIiwiQWRkcmVzc0RldGFpbHMiOnsiQ291bnRyeSI6eyJBZGRyZXNz
123
+ TGluZSI6IkR1cmFuZ28sIEfDs21leiBQYWxhY2lvLCBTYWNyYW1lbnRvIiwi
124
+ Q291bnRyeU5hbWVDb2RlIjoiTVgiLCJDb3VudHJ5TmFtZSI6Ik1leGljbyIs
125
+ IkFkbWluaXN0cmF0aXZlQXJlYSI6eyJBZG1pbmlzdHJhdGl2ZUFyZWFOYW1l
126
+ IjoiRHVyYW5nbyIsIlN1YkFkbWluaXN0cmF0aXZlQXJlYSI6eyJTdWJBZG1p
127
+ bmlzdHJhdGl2ZUFyZWFOYW1lIjoiR8OzbWV6IFBhbGFjaW8iLCJMb2NhbGl0
128
+ eSI6eyJMb2NhbGl0eU5hbWUiOiJHw7NtZXogUGFsYWNpbyIsIkRlcGVuZGVu
129
+ dExvY2FsaXR5Ijp7IkRlcGVuZGVudExvY2FsaXR5TmFtZSI6IlNhY3JhbWVu
130
+ dG8ifX19fX19fX0sImRlc2NyaXB0aW9uIjoiR8OzbWV6IFBhbGFjaW8sIER1
131
+ cmFuZ28sIE1leGljbyIsIm5hbWUiOiJTYWNyYW1lbnRvIiwiYm91bmRlZEJ5
132
+ Ijp7IkVudmVsb3BlIjp7Imxvd2VyQ29ybmVyIjoiLTEwMy40NzM3NjcgMjUu
133
+ NTU1ODMyIiwidXBwZXJDb3JuZXIiOiItMTAzLjQ1OTc3MSAyNS41NzM4OCJ9
134
+ fSwiUG9pbnQiOnsicG9zIjoiLTEwMy40NjkwNTkgMjUuNTY2MjM3In19fSx7
135
+ Ikdlb09iamVjdCI6eyJtZXRhRGF0YVByb3BlcnR5Ijp7Ikdlb2NvZGVyTWV0
136
+ YURhdGEiOnsia2luZCI6ImxvY2FsaXR5IiwidGV4dCI6Ikl0YWx5LCBMYXRp
137
+ dW0sIExhdGluYSwgU2FiYXVkaWEsIFNhY3JhbWVudG8iLCJwcmVjaXNpb24i
138
+ OiJvdGhlciIsIkFkZHJlc3NEZXRhaWxzIjp7IkNvdW50cnkiOnsiQWRkcmVz
139
+ c0xpbmUiOiJMYXRpdW0sIExhdGluYSwgU2FiYXVkaWEsIFNhY3JhbWVudG8i
140
+ LCJDb3VudHJ5TmFtZUNvZGUiOiJJVCIsIkNvdW50cnlOYW1lIjoiSXRhbHki
141
+ LCJBZG1pbmlzdHJhdGl2ZUFyZWEiOnsiQWRtaW5pc3RyYXRpdmVBcmVhTmFt
142
+ ZSI6IkxhdGl1bSIsIlN1YkFkbWluaXN0cmF0aXZlQXJlYSI6eyJTdWJBZG1p
143
+ bmlzdHJhdGl2ZUFyZWFOYW1lIjoiTGF0aW5hIiwiTG9jYWxpdHkiOnsiTG9j
144
+ YWxpdHlOYW1lIjoiU2FjcmFtZW50byJ9fX19fX19LCJkZXNjcmlwdGlvbiI6
145
+ IlNhYmF1ZGlhLCBMYXRpbmEsIExhdGl1bSwgSXRhbHkiLCJuYW1lIjoiU2Fj
146
+ cmFtZW50byIsImJvdW5kZWRCeSI6eyJFbnZlbG9wZSI6eyJsb3dlckNvcm5l
147
+ ciI6IjEzLjAwNzQwOCA0MS4zMzg4MjciLCJ1cHBlckNvcm5lciI6IjEzLjAx
148
+ NjczMiA0MS4zNDQ5MTMifX0sIlBvaW50Ijp7InBvcyI6IjEzLjAxMjkwNSA0
149
+ MS4zNDMxOTQifX19LHsiR2VvT2JqZWN0Ijp7Im1ldGFEYXRhUHJvcGVydHki
150
+ OnsiR2VvY29kZXJNZXRhRGF0YSI6eyJraW5kIjoibG9jYWxpdHkiLCJ0ZXh0
151
+ IjoiU3BhaW4sIEFuZGFsdWNpYSwgU2V2aWxsZSwgTGFzIENhYmV6YXMgZGUg
152
+ U2FuIEp1YW4sIFNhY3JhbWVudG8iLCJwcmVjaXNpb24iOiJvdGhlciIsIkFk
153
+ ZHJlc3NEZXRhaWxzIjp7IkNvdW50cnkiOnsiQWRkcmVzc0xpbmUiOiJBbmRh
154
+ bHVjaWEsIFNldmlsbGUsIExhcyBDYWJlemFzIGRlIFNhbiBKdWFuLCBTYWNy
155
+ YW1lbnRvIiwiQ291bnRyeU5hbWVDb2RlIjoiRVMiLCJDb3VudHJ5TmFtZSI6
156
+ IlNwYWluIiwiQWRtaW5pc3RyYXRpdmVBcmVhIjp7IkFkbWluaXN0cmF0aXZl
157
+ QXJlYU5hbWUiOiJBbmRhbHVjaWEiLCJTdWJBZG1pbmlzdHJhdGl2ZUFyZWEi
158
+ OnsiU3ViQWRtaW5pc3RyYXRpdmVBcmVhTmFtZSI6IlNldmlsbGUiLCJMb2Nh
159
+ bGl0eSI6eyJMb2NhbGl0eU5hbWUiOiJTYWNyYW1lbnRvIn19fX19fX0sImRl
160
+ c2NyaXB0aW9uIjoiTGFzIENhYmV6YXMgZGUgU2FuIEp1YW4sIFNldmlsbGUs
161
+ IEFuZGFsdWNpYSwgU3BhaW4iLCJuYW1lIjoiU2FjcmFtZW50byIsImJvdW5k
162
+ ZWRCeSI6eyJFbnZlbG9wZSI6eyJsb3dlckNvcm5lciI6Ii01LjkwNzU3MyAz
163
+ Ny4wMjkyODQiLCJ1cHBlckNvcm5lciI6Ii01LjkwMTQwMSAzNy4wMzMxNDQi
164
+ fX0sIlBvaW50Ijp7InBvcyI6Ii01LjkwMzQ4NiAzNy4wMzI4MDYifX19LHsi
165
+ R2VvT2JqZWN0Ijp7Im1ldGFEYXRhUHJvcGVydHkiOnsiR2VvY29kZXJNZXRh
166
+ RGF0YSI6eyJraW5kIjoiZGlzdHJpY3QiLCJ0ZXh0IjoiTWV4aWNvLCBEaXN0
167
+ cml0byBGZWRlcmFsLCBNZXhpY28gQ2l0eSwgw4FsdmFybyBPYnJlZ8Ozbiwg
168
+ U2FjcmFtZW50byIsInByZWNpc2lvbiI6Im90aGVyIiwiQWRkcmVzc0RldGFp
169
+ bHMiOnsiQ291bnRyeSI6eyJBZGRyZXNzTGluZSI6IkRpc3RyaXRvIEZlZGVy
170
+ YWwsIE1leGljbyBDaXR5LCDDgWx2YXJvIE9icmVnw7NuLCBTYWNyYW1lbnRv
171
+ IiwiQ291bnRyeU5hbWVDb2RlIjoiTVgiLCJDb3VudHJ5TmFtZSI6Ik1leGlj
172
+ byIsIkFkbWluaXN0cmF0aXZlQXJlYSI6eyJBZG1pbmlzdHJhdGl2ZUFyZWFO
173
+ YW1lIjoiRGlzdHJpdG8gRmVkZXJhbCIsIkxvY2FsaXR5Ijp7IkxvY2FsaXR5
174
+ TmFtZSI6Ik1leGljbyBDaXR5IiwiRGVwZW5kZW50TG9jYWxpdHkiOnsiRGVw
175
+ ZW5kZW50TG9jYWxpdHlOYW1lIjoiw4FsdmFybyBPYnJlZ8OzbiIsIkRlcGVu
176
+ ZGVudExvY2FsaXR5Ijp7IkRlcGVuZGVudExvY2FsaXR5TmFtZSI6IlNhY3Jh
177
+ bWVudG8ifX19fX19fX0sImRlc2NyaXB0aW9uIjoiw4FsdmFybyBPYnJlZ8Oz
178
+ biwgTWV4aWNvIENpdHksIERpc3RyaXRvIEZlZGVyYWwsIE1leGljbyIsIm5h
179
+ bWUiOiJTYWNyYW1lbnRvIiwiYm91bmRlZEJ5Ijp7IkVudmVsb3BlIjp7Imxv
180
+ d2VyQ29ybmVyIjoiLTk5LjIxMzQwNyAxOS4zNjUwNzgiLCJ1cHBlckNvcm5l
181
+ ciI6Ii05OS4xODA0NzUgMTkuMzk2MzMifX0sIlBvaW50Ijp7InBvcyI6Ii05
182
+ OS4xOTY5NDEgMTkuMzgwNzA1In19fSx7Ikdlb09iamVjdCI6eyJtZXRhRGF0
183
+ YVByb3BlcnR5Ijp7Ikdlb2NvZGVyTWV0YURhdGEiOnsia2luZCI6ImRpc3Ry
184
+ aWN0IiwidGV4dCI6IlJ1c3NpYW4gRmVkZXJhdGlvbiwgTW9za292c2theWEg
185
+ b2JsYXN0LCBCYWxhc2hpa2hhLCBtaWtyb3JheW9uIFNha3JhbWVudG8iLCJw
186
+ cmVjaXNpb24iOiJvdGhlciIsIkFkZHJlc3NEZXRhaWxzIjp7IkNvdW50cnki
187
+ OnsiQWRkcmVzc0xpbmUiOiJNb3Nrb3Zza2F5YSBvYmxhc3QsIEJhbGFzaGlr
188
+ aGEsIG1pa3JvcmF5b24gU2FrcmFtZW50byIsIkNvdW50cnlOYW1lQ29kZSI6
189
+ IlJVIiwiQ291bnRyeU5hbWUiOiJSdXNzaWFuIEZlZGVyYXRpb24iLCJBZG1p
190
+ bmlzdHJhdGl2ZUFyZWEiOnsiQWRtaW5pc3RyYXRpdmVBcmVhTmFtZSI6Ik1v
191
+ c2tvdnNrYXlhIG9ibGFzdCIsIlN1YkFkbWluaXN0cmF0aXZlQXJlYSI6eyJT
192
+ dWJBZG1pbmlzdHJhdGl2ZUFyZWFOYW1lIjoiZ29yb2Rza295IG9rcnVnIEJh
193
+ bGFzaGlraGEiLCJMb2NhbGl0eSI6eyJMb2NhbGl0eU5hbWUiOiJCYWxhc2hp
194
+ a2hhIiwiRGVwZW5kZW50TG9jYWxpdHkiOnsiRGVwZW5kZW50TG9jYWxpdHlO
195
+ YW1lIjoibWlrcm9yYXlvbiBTYWtyYW1lbnRvIn19fX19fX19LCJkZXNjcmlw
196
+ dGlvbiI6IkJhbGFzaGlraGEsIE1vc2tvdnNrYXlhIG9ibGFzdCwgUnVzc2lh
197
+ biBGZWRlcmF0aW9uIiwibmFtZSI6Im1pa3JvcmF5b24gU2FrcmFtZW50byIs
198
+ ImJvdW5kZWRCeSI6eyJFbnZlbG9wZSI6eyJsb3dlckNvcm5lciI6IjM4LjA0
199
+ Njc4NyA1NS44MDc1OTIiLCJ1cHBlckNvcm5lciI6IjM4LjA2MjIxMSA1NS44
200
+ MTI3NTcifX0sIlBvaW50Ijp7InBvcyI6IjM4LjA1MjkyMyA1NS44MDk2OTci
201
+ fX19XX19fQ==
202
+ http_version:
203
+ recorded_at: Wed, 29 Oct 2014 16:56:50 GMT
204
+ recorded_with: VCR 2.9.3
metadata ADDED
@@ -0,0 +1,179 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: latlong
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1a
5
+ platform: ruby
6
+ authors:
7
+ - Roman Greshny
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-29 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.7'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
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: pry
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: vcr
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: webmock
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
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: turn
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
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: geocoder
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: Finds coordinates by address
126
+ email:
127
+ - greshny@gmail.com
128
+ executables: []
129
+ extensions: []
130
+ extra_rdoc_files: []
131
+ files:
132
+ - ".gitignore"
133
+ - ".travis.yml"
134
+ - Gemfile
135
+ - LICENSE.txt
136
+ - README.md
137
+ - Rakefile
138
+ - latlong.gemspec
139
+ - lib/latlong.rb
140
+ - lib/latlong/adapters.rb
141
+ - lib/latlong/adapters/base.rb
142
+ - lib/latlong/adapters/google.rb
143
+ - lib/latlong/adapters/yandex.rb
144
+ - lib/latlong/configuration.rb
145
+ - lib/latlong/location.rb
146
+ - lib/latlong/version.rb
147
+ - test/latlong_test.rb
148
+ - test/minitest_helper.rb
149
+ - test/vcr_cassettes/google.yml
150
+ - test/vcr_cassettes/yandex.yml
151
+ homepage: http://github.com/r-ideas/latlong
152
+ licenses:
153
+ - MIT
154
+ metadata: {}
155
+ post_install_message:
156
+ rdoc_options: []
157
+ require_paths:
158
+ - lib
159
+ required_ruby_version: !ruby/object:Gem::Requirement
160
+ requirements:
161
+ - - ">="
162
+ - !ruby/object:Gem::Version
163
+ version: '0'
164
+ required_rubygems_version: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - ">"
167
+ - !ruby/object:Gem::Version
168
+ version: 1.3.1
169
+ requirements: []
170
+ rubyforge_project:
171
+ rubygems_version: 2.2.2
172
+ signing_key:
173
+ specification_version: 4
174
+ summary: Finds coordinates by address
175
+ test_files:
176
+ - test/latlong_test.rb
177
+ - test/minitest_helper.rb
178
+ - test/vcr_cassettes/google.yml
179
+ - test/vcr_cassettes/yandex.yml