geokit 1.8.5 → 1.9.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.
Files changed (76) hide show
  1. checksums.yaml +7 -0
  2. data/.travis.yml +0 -1
  3. data/CHANGELOG.md +7 -0
  4. data/README.markdown +31 -14
  5. data/fixtures/vcr_cassettes/geonames_geocode.yml +1 -1
  6. data/fixtures/vcr_cassettes/geonames_geocode_premium.yml +42 -0
  7. data/fixtures/vcr_cassettes/google_country_code_biased_result_orly.yml +160 -0
  8. data/fixtures/vcr_cassettes/google_country_code_biased_result_toledo.yml +111 -0
  9. data/fixtures/vcr_cassettes/google_result_toledo_default_bias.yml +275 -0
  10. data/fixtures/vcr_cassettes/google_sublocality.yml +126 -0
  11. data/fixtures/vcr_cassettes/mapbox_forward_geocode.yml +59 -0
  12. data/fixtures/vcr_cassettes/mapbox_reverse_geocode.yml +63 -0
  13. data/fixtures/vcr_cassettes/opencage_city.yml +51 -0
  14. data/fixtures/vcr_cassettes/opencage_full.yml +65 -0
  15. data/fixtures/vcr_cassettes/opencage_language_response_es.yml +66 -0
  16. data/fixtures/vcr_cassettes/opencage_reverse_madrid.yml +51 -0
  17. data/fixtures/vcr_cassettes/opencage_reverse_prilep.yml +53 -0
  18. data/geokit.gemspec +5 -3
  19. data/lib/geokit/bounds.rb +40 -31
  20. data/lib/geokit/core_ext.rb +1 -1
  21. data/lib/geokit/geo_loc.rb +63 -41
  22. data/lib/geokit/geocoders.rb +13 -13
  23. data/lib/geokit/geocoders/bing.rb +9 -9
  24. data/lib/geokit/geocoders/ca_geocoder.rb +29 -29
  25. data/lib/geokit/geocoders/fcc.rb +4 -4
  26. data/lib/geokit/geocoders/free_geo_ip.rb +6 -7
  27. data/lib/geokit/geocoders/geo_plugin.rb +5 -6
  28. data/lib/geokit/geocoders/geocodio.rb +2 -2
  29. data/lib/geokit/geocoders/geonames.rb +18 -12
  30. data/lib/geokit/geocoders/google.rb +31 -30
  31. data/lib/geokit/geocoders/ip.rb +3 -4
  32. data/lib/geokit/geocoders/mapbox.rb +94 -0
  33. data/lib/geokit/geocoders/mapquest.rb +5 -5
  34. data/lib/geokit/geocoders/opencage.rb +93 -0
  35. data/lib/geokit/geocoders/openstreetmap.rb +9 -6
  36. data/lib/geokit/geocoders/ripe.rb +3 -3
  37. data/lib/geokit/geocoders/us_geocoder.rb +10 -9
  38. data/lib/geokit/geocoders/yahoo.rb +33 -34
  39. data/lib/geokit/geocoders/yandex.rb +17 -17
  40. data/lib/geokit/inflectors.rb +4 -10
  41. data/lib/geokit/lat_lng.rb +50 -26
  42. data/lib/geokit/mappable.rb +83 -83
  43. data/lib/geokit/multi_geocoder.rb +25 -20
  44. data/lib/geokit/net_adapter/net_http.rb +7 -4
  45. data/lib/geokit/polygon.rb +36 -4
  46. data/lib/geokit/version.rb +1 -1
  47. data/test/helper.rb +15 -13
  48. data/test/test_base_geocoder.rb +6 -7
  49. data/test/test_bing_geocoder.rb +20 -21
  50. data/test/test_bounds.rb +26 -28
  51. data/test/test_ca_geocoder.rb +9 -10
  52. data/test/test_fcc_geocoder.rb +1 -1
  53. data/test/test_free_geo_ip_geocoder.rb +1 -1
  54. data/test/test_geo_plugin_geocoder.rb +9 -9
  55. data/test/test_geoloc.rb +7 -6
  56. data/test/test_geonames_geocoder.rb +28 -6
  57. data/test/test_google_geocoder.rb +210 -176
  58. data/test/test_inflector.rb +0 -1
  59. data/test/test_ipgeocoder.rb +17 -18
  60. data/test/test_latlng.rb +105 -85
  61. data/test/test_map_quest.rb +18 -21
  62. data/test/test_mapbox_geocoder.rb +31 -0
  63. data/test/test_mappable.rb +46 -0
  64. data/test/test_maxmind_geocoder.rb +1 -3
  65. data/test/test_multi_geocoder.rb +8 -9
  66. data/test/test_multi_ip_geocoder.rb +3 -5
  67. data/test/test_net_adapter.rb +4 -4
  68. data/test/test_opencage_geocoder.rb +108 -0
  69. data/test/test_openstreetmap_geocoder.rb +62 -44
  70. data/test/{test_polygon_contains.rb → test_polygon.rb} +30 -20
  71. data/test/test_ripe_geocoder.rb +2 -0
  72. data/test/test_us_geocoder.rb +7 -8
  73. data/test/test_yahoo_geocoder.rb +20 -21
  74. data/test/test_yandex_geocoder.rb +34 -35
  75. metadata +79 -56
  76. data/fixtures/vcr_cassettes/google_country_code_biased_result.yml +0 -401
@@ -0,0 +1,63 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.tiles.mapbox.com/v4/geocode/mapbox.places-v1/-77.032458,38.913175.json?access_token=
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/vnd.geo+json; charset=utf-8
23
+ Content-Length:
24
+ - '1902'
25
+ Connection:
26
+ - keep-alive
27
+ Access-Control-Allow-Methods:
28
+ - GET
29
+ Access-Control-Allow-Origin:
30
+ - '*'
31
+ Cache-Control:
32
+ - max-age=3600
33
+ Date:
34
+ - Thu, 21 Aug 2014 05:46:02 GMT
35
+ Etag:
36
+ - '"90af4b2c9697b67786ad9039a4174ff1"'
37
+ Last-Modified:
38
+ - Thu, 21 Aug 2014 05:46:02 GMT
39
+ Server:
40
+ - nginx
41
+ X-Powered-By:
42
+ - Express
43
+ X-Cache:
44
+ - Miss from cloudfront
45
+ Via:
46
+ - 1.1 565d425ab1cf4d8d6fb4c465f8b73889.cloudfront.net (CloudFront)
47
+ X-Amz-Cf-Id:
48
+ - 8KyW9WZU-vDaHl2_CwBdm0F-eiOtOKIUOnRSgiE3MBU4vnHikk_rUA==
49
+ body:
50
+ encoding: UTF-8
51
+ string: '{"type":"FeatureCollection","query":[-77.032458,38.913175],"features":[{"id":"city.20001","type":"Feature","text":"Washington","place_name":"Washington,
52
+ 20009, District of Columbia, United States","relevance":1,"center":[-76.992695,38.899393],"geometry":{"type":"Point","coordinates":[-76.992695,38.899393]},"bbox":[-77.11976790632382,38.80310600134152,-76.90938401684849,38.99555498159024],"properties":{"title":"Washington"},"context":[{"id":"postcode-us.1308149819","text":"20009"},{"id":"province.1190806886","text":"District
53
+ of Columbia"},{"id":"country.4150104525","text":"United States"}]},{"id":"postcode-us.1308149819","type":"Feature","text":"20009","place_name":"20009,
54
+ District of Columbia, United States","relevance":1,"center":[-77.038291,38.920148],"geometry":{"type":"Point","coordinates":[-77.038291,38.920148]},"bbox":[-77.050216,38.911122999999996,-77.02703300000002,38.92974399999999],"properties":{"title":"20009"},"context":[{"id":"province.1190806886","text":"District
55
+ of Columbia"},{"id":"country.4150104525","text":"United States"}]},{"id":"province.1190806886","type":"Feature","text":"District
56
+ of Columbia","place_name":"District of Columbia, United States","relevance":1,"center":[-76.987826,38.893698],"geometry":{"type":"Point","coordinates":[-76.987826,38.893698]},"bbox":[-77.119759,38.791644999999995,-76.90939299999998,38.99554799999999],"properties":{"title":"District
57
+ of Columbia"},"context":[{"id":"country.4150104525","text":"United States"}]},{"id":"country.4150104525","type":"Feature","text":"United
58
+ States","place_name":"United States","relevance":1,"center":[-99.041476,37.940855],"geometry":{"type":"Point","coordinates":[-99.041476,37.940855]},"bbox":[-179.23108600000003,18.865459999999985,179.85968099999997,71.441059],"properties":{"title":"United
59
+ States"}}],"attribution":"<a href=''https://www.mapbox.com/about/maps/'' target=''_blank''>&copy;
60
+ Mapbox</a>"}'
61
+ http_version:
62
+ recorded_at: Thu, 21 Aug 2014 05:46:00 GMT
63
+ recorded_with: VCR 2.9.2
@@ -0,0 +1,51 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.opencagedata.com/geocode/v1/json?key=someopencageapikey&no_annotations=1&query=San%20Francisco,%20CA
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
+ Date:
22
+ - Wed, 03 Sep 2014 14:08:51 GMT
23
+ Server:
24
+ - Apache/2.4.7 (Ubuntu)
25
+ X-Ratelimit-Reset:
26
+ - '1409788800'
27
+ X-Ratelimit-Remaining:
28
+ - '2466'
29
+ X-Ratelimit-Limit:
30
+ - '2500'
31
+ Access-Control-Allow-Origin:
32
+ - '*'
33
+ Strict-Transport-Security:
34
+ - max-age=31536000; includeSubDomains
35
+ Transfer-Encoding:
36
+ - chunked
37
+ Content-Type:
38
+ - application/json; charset=utf-8
39
+ body:
40
+ encoding: UTF-8
41
+ string: '{"licenses":[{"name":"CC-BY-SA","url":"http://creativecommons.org/licenses/by-sa/3.0/"},{"name":"ODbL","url":"http://opendatacommons.org/licenses/odbl/summary/"}],"rate":{"limit":2500,"remaining":2466,"reset":1409788800},"results":[{"bounds":{"northeast":{"lat":37.9298443,"lng":-122.2817799},"southwest":{"lat":37.63983,"lng":-123.1738249}},"components":{"city":"San
42
+ Francisco","country":"United States of America","country_code":"US","county":"San
43
+ Francisco City and County","state":"California"},"confidence":1,"formatted":"San
44
+ Francisco, San Francisco City and County, California, United States of America","geometry":{"lat":37.7792768,"lng":-122.4192704}},{"bounds":{"northeast":{"lat":37.9298443,"lng":-122.2817799},"southwest":{"lat":37.63983,"lng":-123.1738249}},"components":{"country":"United
45
+ States of America","country_code":"US","county":"San Francisco City and County","state":"California"},"confidence":1,"formatted":"San
46
+ Francisco City and County, California, United States of America","geometry":{"lat":37.7647993,"lng":-122.4629897}}],"status":{"code":200,"message":"OK"},"thanks":"For
47
+ using an OpenCage Data API","timestamp":{"created_http":"Wed, 03 Sep 2014
48
+ 14:08:51 GMT","created_unix":1409753331},"total_results":2,"we_are_hiring":"http://lokku.com/#jobs"}'
49
+ http_version:
50
+ recorded_at: Wed, 03 Sep 2014 14:03:54 GMT
51
+ recorded_with: VCR 2.9.2
@@ -0,0 +1,65 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.opencagedata.com/geocode/v1/json?key=someopencageapikey&no_annotations=1&query=100%20Spear%20St,%20San%20Francisco,%20CA,%2094105,%20US
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
+ Date:
22
+ - Wed, 03 Sep 2014 13:51:27 GMT
23
+ Server:
24
+ - Apache/2.4.7 (Ubuntu)
25
+ Access-Control-Allow-Origin:
26
+ - '*'
27
+ X-Ratelimit-Remaining:
28
+ - '2468'
29
+ X-Ratelimit-Reset:
30
+ - '1409788800'
31
+ X-Ratelimit-Limit:
32
+ - '2500'
33
+ Strict-Transport-Security:
34
+ - max-age=31536000; includeSubDomains
35
+ Transfer-Encoding:
36
+ - chunked
37
+ Content-Type:
38
+ - application/json; charset=utf-8
39
+ body:
40
+ encoding: UTF-8
41
+ string: '{"licenses":[{"name":"CC-BY-SA","url":"http://creativecommons.org/licenses/by-sa/3.0/"},{"name":"ODbL","url":"http://opendatacommons.org/licenses/odbl/summary/"}],"rate":{"limit":2500,"remaining":2468,"reset":1409788800},"results":[{"bounds":{"northeast":{"lat":37.7923419,"lng":-122.394032},"southwest":{"lat":37.7922419,"lng":-122.394132}},"components":{"bank":"Wells
42
+ Fargo","city":"San Francisco","country":"United States of America","country_code":"US","county":"San
43
+ Francisco City and County","house_number":100,"neighbourhood":"Financial District","postcode":94103,"road":"Spear
44
+ Street","state":"California"},"confidence":10,"formatted":"100, Spear Street,
45
+ Financial District, San Francisco, San Francisco City and County, 94103, California,
46
+ United States of America, Wells Fargo","geometry":{"lat":37.7922919,"lng":-122.394082}},{"bounds":{"northeast":{"lat":37.7923695,"lng":-122.3937501},"southwest":{"lat":37.7919565,"lng":-122.3942877}},"components":{"city":"San
47
+ Francisco","country":"United States of America","country_code":"US","county":"San
48
+ Francisco City and County","house_number":100,"neighbourhood":"Financial District","postcode":94103,"road":"Spear
49
+ Street","state":"California"},"confidence":10,"formatted":"100, Spear Street,
50
+ Financial District, San Francisco, San Francisco City and County, 94103, California,
51
+ United States of America","geometry":{"lat":37.79215775,"lng":-122.393995576645}},{"bounds":{"northeast":{"lat":37.7923685,"lng":-122.3939964},"southwest":{"lat":37.7922685,"lng":-122.3940964}},"components":{"atm":"Wells
52
+ Fargo","city":"San Francisco","country":"United States of America","country_code":"US","county":"San
53
+ Francisco City and County","house_number":100,"neighbourhood":"Financial District","postcode":94103,"road":"Spear
54
+ Street","state":"California"},"confidence":10,"formatted":"100, Spear Street,
55
+ Financial District, San Francisco, San Francisco City and County, 94103, California,
56
+ United States of America, Wells Fargo","geometry":{"lat":37.7923185,"lng":-122.3940464}},{"components":{"country_name":"United
57
+ States","locality":"San Francisco","region":"CA","street_name":"Spear St","street_number":100},"confidence":0,"formatted":"San
58
+ Francisco, CA, United States, Spear St, 100","geometry":{"lat":37.792536,"lng":-122.39406}},{"bounds":{"northeast":{"lat":37.796628,"lng":-122.385181},"southwest":{"lat":37.784205,"lng":-122.403431}},"components":{"country":"United
59
+ States","county":"San Francisco County","postal code":94105,"state":"California"},"confidence":8,"formatted":"San
60
+ Francisco County, California, United States, 94105","geometry":{"lat":37.7864,"lng":-122.3892}}],"status":{"code":200,"message":"OK"},"thanks":"For
61
+ using an OpenCage Data API","timestamp":{"created_http":"Wed, 03 Sep 2014
62
+ 13:51:27 GMT","created_unix":1409752287},"total_results":5,"we_are_hiring":"http://lokku.com/#jobs"}'
63
+ http_version:
64
+ recorded_at: Wed, 03 Sep 2014 13:46:30 GMT
65
+ recorded_with: VCR 2.9.2
@@ -0,0 +1,66 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.opencagedata.com/geocode/v1/json?key=someopencageapikey&language=es&no_annotations=1&query=London
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
+ Date:
22
+ - Wed, 03 Sep 2014 14:32:11 GMT
23
+ Server:
24
+ - Apache/2.4.7 (Ubuntu)
25
+ X-Ratelimit-Limit:
26
+ - '2500'
27
+ X-Ratelimit-Remaining:
28
+ - '2458'
29
+ X-Ratelimit-Reset:
30
+ - '1409788800'
31
+ Access-Control-Allow-Origin:
32
+ - '*'
33
+ Strict-Transport-Security:
34
+ - max-age=31536000; includeSubDomains
35
+ Transfer-Encoding:
36
+ - chunked
37
+ Content-Type:
38
+ - application/json; charset=utf-8
39
+ body:
40
+ encoding: UTF-8
41
+ string: '{"licenses":[{"name":"CC-BY-SA","url":"http://creativecommons.org/licenses/by-sa/3.0/"},{"name":"ODbL","url":"http://opendatacommons.org/licenses/odbl/summary/"}],"rate":{"limit":2500,"remaining":2458,"reset":1409788800},"results":[{"bounds":{"northeast":{"lat":51.6918741,"lng":0.3340155},"southwest":{"lat":51.2867602,"lng":-0.510375}},"components":{"city":"Londres","country":"Reino
42
+ Unido","country_code":"gb","county":"Londres","state":"Inglaterra","state_district":"Greater
43
+ London"},"confidence":1,"formatted":"Londres, Reino Unido","geometry":{"lat":51.5073219,"lng":-0.1276474}},{"bounds":{"northeast":{"lat":43.148097,"lng":-81.0860295},"southwest":{"lat":42.828097,"lng":-81.4060295}},"components":{"city":"London","country":"Canad\u00e1","country_code":"CA","state":"Ontario"},"confidence":3,"formatted":"London,
44
+ Ontario, Canad\u00e1","geometry":{"lat":42.988097,"lng":-81.2460295}},{"bounds":{"northeast":{"lat":37.15226,"lng":-84.0359569},"southwest":{"lat":37.079759,"lng":-84.1262619}},"components":{"city":"London","country":"Estados
45
+ Unidos de Am\u00e9rica","country_code":"US","county":"Laurel County","state":"Kentucky"},"confidence":7,"formatted":"London,
46
+ Laurel County, Kentucky, Estados Unidos de Am\u00e9rica","geometry":{"lat":37.1289771,"lng":-84.0832646}},{"bounds":{"northeast":{"lat":43.0677775,"lng":-88.9928881},"southwest":{"lat":43.0277775,"lng":-89.0328881}},"components":{"country":"Estados
47
+ Unidos de Am\u00e9rica","country_code":"US","county":"Dane County","hamlet":"London","state":"Wisconsin"},"confidence":7,"formatted":"London,
48
+ Dane County, Wisconsin, Estados Unidos de Am\u00e9rica","geometry":{"lat":43.0477775,"lng":-89.0128881}},{"bounds":{"northeast":{"lat":39.921786,"lng":-83.3899969},"southwest":{"lat":39.85928,"lng":-83.4789229}},"components":{"city":"London","country":"Estados
49
+ Unidos de Am\u00e9rica","country_code":"US","county":"Madison County","state":"Ohio"},"confidence":7,"formatted":"London,
50
+ Madison County, Ohio, Estados Unidos de Am\u00e9rica","geometry":{"lat":39.8864493,"lng":-83.448253}},{"bounds":{"northeast":{"lat":36.4884367,"lng":-119.4385394},"southwest":{"lat":36.4734452,"lng":-119.4497698}},"components":{"country":"Estados
51
+ Unidos de Am\u00e9rica","country_code":"US","county":"Tulare County","state":"California","village":"London"},"confidence":8,"formatted":"London,
52
+ Tulare County, California, Estados Unidos de Am\u00e9rica","geometry":{"lat":36.4760619,"lng":-119.4431785}},{"bounds":{"northeast":{"lat":35.33814,"lng":-93.1873749},"southwest":{"lat":35.315577,"lng":-93.2726929}},"components":{"city":"London","country":"Estados
53
+ Unidos de Am\u00e9rica","country_code":"US","county":"Pope County","state":"Arkansas"},"confidence":7,"formatted":"London,
54
+ Pope County, Arkansas, Estados Unidos de Am\u00e9rica","geometry":{"lat":35.326859,"lng":-93.2405016007635}},{"bounds":{"northeast":{"lat":38.2143567,"lng":-81.3486944},"southwest":{"lat":38.1743567,"lng":-81.3886944}},"components":{"country":"Estados
55
+ Unidos de Am\u00e9rica","country_code":"US","county":"Kanawha County","hamlet":"London","state":"Virginia
56
+ Occidental"},"confidence":7,"formatted":"London, Kanawha County, Virginia
57
+ Occidental, Estados Unidos de Am\u00e9rica","geometry":{"lat":38.1943567,"lng":-81.3686944}},{"bounds":{"northeast":{"lat":41.1636709,"lng":-80.1286716},"southwest":{"lat":41.1236709,"lng":-80.1686716}},"components":{"country":"Estados
58
+ Unidos de Am\u00e9rica","country_code":"US","county":"Mercer County","hamlet":"London","state":"Pensilvania"},"confidence":7,"formatted":"London,
59
+ Mercer County, Pensilvania, Estados Unidos de Am\u00e9rica","geometry":{"lat":41.1436709,"lng":-80.1486716}},{"bounds":{"northeast":{"lat":32.2509892,"lng":-94.9243839},"southwest":{"lat":32.2109892,"lng":-94.9643839}},"components":{"country":"Estados
60
+ Unidos de Am\u00e9rica","country_code":"US","county":"Rusk County","hamlet":"London","state":"Texas"},"confidence":7,"formatted":"London,
61
+ Rusk County, Texas, Estados Unidos de Am\u00e9rica","geometry":{"lat":32.2309892,"lng":-94.9443839}}],"status":{"code":200,"message":"OK"},"thanks":"For
62
+ using an OpenCage Data API","timestamp":{"created_http":"Wed, 03 Sep 2014
63
+ 14:32:11 GMT","created_unix":1409754731},"total_results":10,"we_are_hiring":"http://lokku.com/#jobs"}'
64
+ http_version:
65
+ recorded_at: Wed, 03 Sep 2014 14:27:15 GMT
66
+ recorded_with: VCR 2.9.2
@@ -0,0 +1,51 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.opencagedata.com/geocode/v1/json?key=someopencageapikey&no_annotations=1&query=40.4167413,-3.7032498
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
+ Date:
22
+ - Wed, 03 Sep 2014 14:12:59 GMT
23
+ Server:
24
+ - Apache/2.4.7 (Ubuntu)
25
+ Access-Control-Allow-Origin:
26
+ - '*'
27
+ X-Ratelimit-Limit:
28
+ - '2500'
29
+ X-Ratelimit-Remaining:
30
+ - '2465'
31
+ X-Ratelimit-Reset:
32
+ - '1409788800'
33
+ Strict-Transport-Security:
34
+ - max-age=31536000; includeSubDomains
35
+ Transfer-Encoding:
36
+ - chunked
37
+ Content-Type:
38
+ - application/json; charset=utf-8
39
+ body:
40
+ encoding: UTF-8
41
+ string: '{"licenses":[{"name":"CC-BY-SA","url":"http://creativecommons.org/licenses/by-sa/3.0/"},{"name":"ODbL","url":"http://opendatacommons.org/licenses/odbl/summary/"}],"rate":{"limit":2500,"remaining":2465,"reset":1409788800},"results":[{"bounds":{"northeast":{"lat":40.4679786,"lng":-3.6835385},"southwest":{"lat":40.4060007,"lng":-3.7033912}},"components":{"address29":"C-3
42
+ C-4","city":"Madrid","city_district":"Chamber\u00ed","country":"Spain","country_code":"ES","county":"\u00c1rea
43
+ metropolitana de Madrid y Corredor del Henares","postcode":28036,"road":"Calle
44
+ de Zurbano","state":"Community of Madrid","suburb":"Chamber\u00ed"},"confidence":7,"formatted":"Calle
45
+ de Zurbano, Chamber\u00ed, Chamber\u00ed, Madrid, \u00c1rea metropolitana
46
+ de Madrid y Corredor del Henares, 28036, Community of Madrid, Spain, C-3 C-4","geometry":{"lat":40.4341975,"lng":-3.6930528}}],"status":{"code":200,"message":"OK"},"thanks":"For
47
+ using an OpenCage Data API","timestamp":{"created_http":"Wed, 03 Sep 2014
48
+ 14:12:59 GMT","created_unix":1409753579},"total_results":1,"we_are_hiring":"http://lokku.com/#jobs"}'
49
+ http_version:
50
+ recorded_at: Wed, 03 Sep 2014 14:08:02 GMT
51
+ recorded_with: VCR 2.9.2
@@ -0,0 +1,53 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.opencagedata.com/geocode/v1/json?key=someopencageapikey&no_annotations=1&query=41.3527177,21.5497808
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
+ Date:
22
+ - Wed, 03 Sep 2014 14:19:24 GMT
23
+ Server:
24
+ - Apache/2.4.7 (Ubuntu)
25
+ X-Ratelimit-Remaining:
26
+ - '2463'
27
+ X-Ratelimit-Reset:
28
+ - '1409788800'
29
+ X-Ratelimit-Limit:
30
+ - '2500'
31
+ Access-Control-Allow-Origin:
32
+ - '*'
33
+ Strict-Transport-Security:
34
+ - max-age=31536000; includeSubDomains
35
+ Transfer-Encoding:
36
+ - chunked
37
+ Content-Type:
38
+ - application/json; charset=utf-8
39
+ body:
40
+ encoding: UTF-8
41
+ string: '{"licenses":[{"name":"CC-BY-SA","url":"http://creativecommons.org/licenses/by-sa/3.0/"},{"name":"ODbL","url":"http://opendatacommons.org/licenses/odbl/summary/"}],"rate":{"limit":2500,"remaining":2463,"reset":1409788800},"results":[{"bounds":{"northeast":{"lat":41.3516718,"lng":21.5508583},"southwest":{"lat":41.350177,"lng":21.54897}},"components":{"city":"Prilep","country":"Macedonia","country_code":"MK","county":"Municipality
42
+ of Prilep","neighbourhood":"\u0416\u0430\u0431\u0438\u043d\u043e \u041c\u0430\u0430\u043b\u043e","road":"\u041f\u0440\u0438\u043b\u0435\u043f\u0441\u043a\u0438
43
+ \u0411\u0440\u0430\u043d\u0438\u0442\u0435\u043b\u0438","school":"Gimnasium Mirche
44
+ Acev","state":"Pelagonia Region","suburb":"\u0411\u043e\u043d\u0447\u0435\u0458\u0446\u0430"},"confidence":10,"formatted":"Gimnasium
45
+ Mirche Acev, \u041f\u0440\u0438\u043b\u0435\u043f\u0441\u043a\u0438 \u0411\u0440\u0430\u043d\u0438\u0442\u0435\u043b\u0438,
46
+ \u0411\u043e\u043d\u0447\u0435\u0458\u0446\u0430, \u0416\u0430\u0431\u0438\u043d\u043e
47
+ \u041c\u0430\u0430\u043b\u043e, Prilep, Municipality of Prilep, Pelagonia
48
+ Region, Macedonia, Gimnasium Mirche Acev","geometry":{"lat":41.35125945,"lng":21.5498645766622}}],"status":{"code":200,"message":"OK"},"thanks":"For
49
+ using an OpenCage Data API","timestamp":{"created_http":"Wed, 03 Sep 2014
50
+ 14:19:24 GMT","created_unix":1409753964},"total_results":1,"we_are_hiring":"http://lokku.com/#jobs"}'
51
+ http_version:
52
+ recorded_at: Wed, 03 Sep 2014 14:14:27 GMT
53
+ recorded_with: VCR 2.9.2
@@ -22,13 +22,15 @@ Gem::Specification.new do |spec|
22
22
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
23
23
  spec.require_paths = ["lib"]
24
24
 
25
- spec.add_dependency "multi_json", ">= 1.3.2"
26
- spec.add_development_dependency "bundler", "> 1.0"
25
+ spec.add_dependency 'multi_json', '>= 1.3.2'
26
+ spec.add_development_dependency 'bundler', '> 1.0'
27
27
  spec.add_development_dependency 'simplecov'
28
- spec.add_development_dependency "simplecov-rcov"
28
+ spec.add_development_dependency 'simplecov-rcov'
29
29
  spec.add_development_dependency 'rake'
30
30
  spec.add_development_dependency 'mocha'
31
31
  spec.add_development_dependency 'coveralls'
32
+ spec.add_development_dependency 'rubocop'
33
+ spec.add_development_dependency 'pre-commit'
32
34
  spec.add_development_dependency 'vcr'
33
35
  spec.add_development_dependency 'webmock' # used in vcr
34
36
  spec.add_development_dependency 'typhoeus' # used in net_adapter
@@ -5,19 +5,21 @@ module Geokit
5
5
  attr_accessor :sw, :ne
6
6
 
7
7
  # provide sw and ne to instantiate a new Bounds instance
8
- def initialize(sw,ne)
9
- raise ArgumentError if !(sw.is_a?(Geokit::LatLng) && ne.is_a?(Geokit::LatLng))
10
- @sw,@ne=sw,ne
8
+ def initialize(sw, ne)
9
+ if !(sw.is_a?(Geokit::LatLng) && ne.is_a?(Geokit::LatLng))
10
+ raise ArgumentError
11
+ end
12
+ @sw, @ne = sw, ne
11
13
  end
12
14
 
13
- #returns the a single point which is the center of the rectangular bounds
15
+ # returns the a single point which is the center of the rectangular bounds
14
16
  def center
15
17
  @sw.midpoint_to(@ne)
16
18
  end
17
19
 
18
20
  # a simple string representation:sw,ne
19
21
  def to_s
20
- "#{@sw.to_s},#{@ne.to_s}"
22
+ "#{@sw},#{@ne}"
21
23
  end
22
24
 
23
25
  # a two-element array of two-element arrays: sw,ne
@@ -28,7 +30,7 @@ module Geokit
28
30
  # Returns true if the bounds contain the passed point.
29
31
  # allows for bounds which cross the meridian
30
32
  def contains?(point)
31
- point=Geokit::LatLng.normalize(point)
33
+ point = Geokit::LatLng.normalize(point)
32
34
  res = point.lat > @sw.lat && point.lat < @ne.lat
33
35
  if crosses_meridian?
34
36
  res &= point.lng < @ne.lng || point.lng > @sw.lng
@@ -43,8 +45,9 @@ module Geokit
43
45
  @sw.lng > @ne.lng
44
46
  end
45
47
 
46
- # Returns true if the candidate object is logically equal. Logical equivalence
47
- # is true if the lat and lng attributes are the same for both objects.
48
+ # Returns true if the candidate object is logically equal. Logical
49
+ # equivalence is true if the lat and lng attributes are the same for both
50
+ # objects.
48
51
  def ==(other)
49
52
  return false unless other.is_a?(Bounds)
50
53
  sw == other.sw && ne == other.ne
@@ -52,44 +55,50 @@ module Geokit
52
55
 
53
56
  # Equivalent to Google Maps API's .toSpan() method on GLatLng's.
54
57
  #
55
- # Returns a LatLng object, whose coordinates represent the size of a rectangle
56
- # defined by these bounds.
58
+ # Returns a LatLng object, whose coordinates represent the size of a
59
+ # rectangle defined by these bounds.
57
60
  def to_span
58
- lat_span = (@ne.lat - @sw.lat).abs
59
- lng_span = (crosses_meridian? ? 360 + @ne.lng - @sw.lng : @ne.lng - @sw.lng).abs
60
- Geokit::LatLng.new(lat_span, lng_span)
61
+ lat_span = @ne.lat - @sw.lat
62
+ lng_span = crosses_meridian? ? 360 + @ne.lng - @sw.lng : @ne.lng - @sw.lng
63
+ Geokit::LatLng.new(lat_span.abs, lng_span.abs)
61
64
  end
62
65
 
63
66
  class <<self
64
-
65
- # returns an instance of bounds which completely encompases the given circle
66
- def from_point_and_radius(point,radius,options={})
67
- point=LatLng.normalize(point)
68
- p0=point.endpoint(0,radius,options)
69
- p90=point.endpoint(90,radius,options)
70
- p180=point.endpoint(180,radius,options)
71
- p270=point.endpoint(270,radius,options)
72
- sw=Geokit::LatLng.new(p180.lat,p270.lng)
73
- ne=Geokit::LatLng.new(p0.lat,p90.lng)
74
- Geokit::Bounds.new(sw,ne)
67
+ # returns an instance of bounds which completely encompases the given
68
+ # circle
69
+ def from_point_and_radius(point, radius, options = {})
70
+ point = LatLng.normalize(point)
71
+ p0 = point.endpoint(0, radius, options)
72
+ p90 = point.endpoint(90, radius, options)
73
+ p180 = point.endpoint(180, radius, options)
74
+ p270 = point.endpoint(270, radius, options)
75
+ sw = Geokit::LatLng.new(p180.lat, p270.lng)
76
+ ne = Geokit::LatLng.new(p0.lat, p90.lng)
77
+ Geokit::Bounds.new(sw, ne)
75
78
  end
76
79
 
77
80
  # Takes two main combinations of arguments to create a bounds:
78
81
  # point,point (this is the only one which takes two arguments
79
82
  # [point,point]
80
- # . . . where a point is anything LatLng#normalize can handle (which is quite a lot)
83
+ # . . . where a point is anything LatLng#normalize can handle
84
+ # (which is quite a lot)
81
85
  #
82
- # NOTE: everything combination is assumed to pass points in the order sw, ne
83
- def normalize (thing,other=nil)
84
- # maybe this will be simple -- an actual bounds object is passed, and we can all go home
86
+ # NOTE: everything combination is assumed to pass points in the order
87
+ # sw, ne
88
+ def normalize (thing, other = nil)
89
+ # maybe this will be simple -- an actual bounds object is passed, and
90
+ # we can all go home
85
91
  return thing if thing.is_a? Bounds
86
92
 
87
93
  # no? OK, if there's no "other," the thing better be a two-element array
88
- thing,other=thing if !other && thing.is_a?(Array) && thing.size==2
94
+ thing, other = thing if !other && thing.is_a?(Array) && thing.size == 2
89
95
 
90
- # Now that we're set with a thing and another thing, let LatLng do the heavy lifting.
96
+ # Now that we're set with a thing and another thing, let LatLng do the
97
+ # heavy lifting.
91
98
  # Exceptions may be thrown
92
- Bounds.new(Geokit::LatLng.normalize(thing),Geokit::LatLng.normalize(other))
99
+ thing_ll = Geokit::LatLng.normalize(thing)
100
+ other_ll = Geokit::LatLng.normalize(other)
101
+ Bounds.new(thing_ll, other_ll)
93
102
  end
94
103
  end
95
104
  end