geokit_here_geocoder 0.0.5 → 0.0.6

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
- SHA1:
3
- metadata.gz: a076e3332f386976e6c4000d09159775f0474aaf
4
- data.tar.gz: 2c3fb6086bd2eb59b01bc0d9cb91874d9c738c4b
2
+ SHA256:
3
+ metadata.gz: 889adc09d233eca49d7c162ed78748e1a5bad09f9ca53e711b4e1d3c6d5451e2
4
+ data.tar.gz: 3da09d69053fca0b88ef29db82c541c94628be0bdc408e3cc2cf39f4c345ed41
5
5
  SHA512:
6
- metadata.gz: 8c9107363db9735c80f8493684093a5aee241ce46823f810e7aa0c772eef24df0e97223dc62cd2deb690f2218d60117c9a747498d93d748244e624004260f29c
7
- data.tar.gz: a43a5a41978ecfee3a7b4a21335e227dfcb0d80407681cd42fa9226daea946bdd35351e9ecc41cb139799ffe2480112d1e8bf71674b40855fa0cd90b840b7d99
6
+ metadata.gz: 3f3fe90b615c7f9d7e122f02b5b3fbfd040596a1333b89b4f00d1565c19f96122c60737b2594fe0aac91adbb4e9a6ec591ab4de4a051704a8733112239fc7ea4
7
+ data.tar.gz: '059e31caeed8e9b01b0f4fbe78ce96f606b0befa63e055b2b008bc0336f9204d89ac777035aaf27def0a9a537d9fba12b4dc53daad5bb68015fff0a73ec62b7f'
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "geokit_here_geocoder"
7
- spec.version = "0.0.5"
7
+ spec.version = "0.0.6"
8
8
  spec.authors = ["Serhiy Rozum"]
9
9
  spec.email = ["contact@easypost.com"]
10
10
  spec.summary = %q{Geokit custom geocoder for Here.com service}
@@ -5,20 +5,33 @@ module Geokit
5
5
  module Geocoders
6
6
  class HereGeocoder < Geocoder
7
7
 
8
+ PROX = 250 # proximity 250 meters
9
+
10
+ XML_MAPPINGS = {
11
+ street_number: "Location/Address/HouseNumber",
12
+ street_name: "Location/Address/Street",
13
+ city: "Location/Address/City",
14
+ state_name: "Location/Address/AdditionalData[@key='StateName']",
15
+ state_code: "Location/Address/State",
16
+ zip: "Location/Address/PostalCode",
17
+ country_code: "Location/Address/AdditionalData[@key='Country2']",
18
+ country: "Location/Address/AdditionalData[@key='CountryName']",
19
+ lat: "Location/DisplayPosition/Latitude",
20
+ lng: "Location/DisplayPosition/Longitude",
21
+ }
22
+
8
23
  config :app_id, :app_code
9
24
 
10
25
  private
11
26
 
12
27
  def self.do_geocode(address, options = {})
13
-
14
28
  if (app_id.nil? || app_id.empty?) || (app_code.nil? || app_code.empty?)
15
29
  raise(Geokit::Geocoders::GeocodeError, "Here geocoder API requires auth id and code to use their service.")
16
30
  end
17
-
18
- process :xml, submit_url(address)
31
+ process :xml, geocode_url(address)
19
32
  end
20
33
 
21
- def self.submit_url(address)
34
+ def self.geocode_url(address)
22
35
  args = []
23
36
  args << ["app_id", app_id]
24
37
  args << ["app_code", app_code]
@@ -30,10 +43,10 @@ module Geokit
30
43
 
31
44
  args << ["searchtext", address_str]
32
45
 
33
- [api_endpoint, '?', URI.encode_www_form(args)].join('')
46
+ [geocode_endpoint, '?', URI.encode_www_form(args)].join('')
34
47
  end
35
48
 
36
- def self.api_endpoint
49
+ def self.geocode_endpoint
37
50
  if ENV['RAKE_ENV'] == 'test'
38
51
  "https://geocoder.cit.api.here.com/6.2/geocode.xml"
39
52
  else
@@ -41,18 +54,37 @@ module Geokit
41
54
  end
42
55
  end
43
56
 
44
- XML_MAPPINGS = {
45
- street_number: "Location/Address/HouseNumber",
46
- street_name: "Location/Address/Street",
47
- city: "Location/Address/City",
48
- state_name: "Location/Address/AdditionalData[@key='StateName']",
49
- state_code: "Location/Address/State",
50
- zip: "Location/Address/PostalCode",
51
- country_code: "Location/Address/AdditionalData[@key='Country2']",
52
- country: "Location/Address/AdditionalData[@key='CountryName']",
53
- lat: "Location/DisplayPosition/Latitude",
54
- lng: "Location/DisplayPosition/Longitude",
55
- }
57
+ def self.do_reverse_geocode(latlng, options = {})
58
+ if (app_id.nil? || app_id.empty?) || (app_code.nil? || app_code.empty?)
59
+ raise(Geokit::Geocoders::GeocodeError, "Here geocoder API requires auth id and code to use their service.")
60
+ end
61
+ process :xml, reverse_geocode_url(latlng)
62
+ end
63
+
64
+ def self.reverse_geocode_url(latlng)
65
+ args = []
66
+ args << ["app_id", app_id]
67
+ args << ["app_code", app_code]
68
+ args << ["additionaldata", "Country2,1"]
69
+ args << ["language", "en-US"]
70
+ args << ["gen", "9"]
71
+ args << ["maxresults", 1]
72
+ args << ["mode", "retrieveAddresses"]
73
+
74
+ latlng = LatLng.normalize(latlng)
75
+
76
+ args << ["prox", "#{latlng.lat},#{latlng.lng},#{PROX}"]
77
+
78
+ [reverse_geocode_endpoint, '?', URI.encode_www_form(args)].join('')
79
+ end
80
+
81
+ def self.reverse_geocode_endpoint
82
+ if ENV['RAKE_ENV'] == 'test'
83
+ "https://reverse.geocoder.cit.api.here.com/6.2/reversegeocode.xml"
84
+ else
85
+ "https://reverse.geocoder.api.here.com/6.2/reversegeocode.xml"
86
+ end
87
+ end
56
88
 
57
89
  def self.parse_xml(xml)
58
90
  results = xml.elements.to_a("//Result")
@@ -18,31 +18,31 @@ http_interactions:
18
18
  code: 200
19
19
  message: OK
20
20
  headers:
21
- Access-Control-Allow-Origin:
22
- - "*"
23
- Cache-Control:
24
- - public, max-age=86400
21
+ Date:
22
+ - Mon, 11 Nov 2019 22:03:24 GMT
25
23
  Content-Type:
26
24
  - application/xml;charset=utf-8
27
- Date:
28
- - Thu, 08 Sep 2016 22:12:01 GMT
25
+ Content-Length:
26
+ - '182'
27
+ Connection:
28
+ - keep-alive
29
29
  Server:
30
30
  - nginx-clojure
31
- X-Nlp-Irt:
32
- - '5502'
31
+ Cache-Control:
32
+ - public, max-age=86400
33
+ Access-Control-Allow-Origin:
34
+ - "*"
35
+ X-Served-By:
36
+ - i-09a2ce08fa1f4510d.us-west-2b
33
37
  X-Nlp-Log:
34
38
  - Z2NfYz0tIGdjX2w9LSBnY19tPWFk
35
39
  X-Nlp-Tid:
36
- - 2f747c34-bc45-4e2a-a3a2-31b5f5ccce59
37
- X-Served-By:
38
- - i-0a61c712.us-west-2a
39
- Content-Length:
40
- - '185'
41
- Connection:
42
- - keep-alive
40
+ - 31f95ed6-7884-4e46-86b8-31a10c266ea2
41
+ X-Nlp-Irt:
42
+ - '734'
43
43
  body:
44
44
  encoding: ASCII-8BIT
45
- string: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><ns2:Search xmlns:ns2="http://www.navteq.com/lbsp/Search-Search/4"><Response><MetaInfo><Timestamp>2016-09-08T22:12:01.564Z</Timestamp></MetaInfo></Response></ns2:Search>
45
+ string: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><ns2:Search xmlns:ns2="http://www.navteq.com/lbsp/Search-Search/4"><Response><MetaInfo><Timestamp>2019-11-11T21:59:15.580Z</Timestamp></MetaInfo></Response></ns2:Search>
46
46
  http_version:
47
- recorded_at: Thu, 08 Sep 2016 22:12:01 GMT
48
- recorded_with: VCR 3.0.3
47
+ recorded_at: Mon, 11 Nov 2019 22:03:24 GMT
48
+ recorded_with: VCR 5.0.0
@@ -18,30 +18,30 @@ http_interactions:
18
18
  code: 401
19
19
  message: Unauthorized
20
20
  headers:
21
- Access-Control-Allow-Origin:
22
- - "*"
21
+ Date:
22
+ - Mon, 11 Nov 2019 22:03:24 GMT
23
23
  Content-Type:
24
24
  - application/xml;charset=utf-8
25
- Date:
26
- - Thu, 08 Sep 2016 22:12:01 GMT
25
+ Content-Length:
26
+ - '170'
27
+ Connection:
28
+ - keep-alive
27
29
  Server:
28
30
  - nginx-clojure
29
- X-Nlp-Irt:
30
- - '955'
31
+ Access-Control-Allow-Origin:
32
+ - "*"
33
+ X-Served-By:
34
+ - i-09a2ce08fa1f4510d.us-west-2b
31
35
  X-Nlp-Log:
32
36
  - ''
33
37
  X-Nlp-Tid:
34
- - 08b8079e-9848-45d2-ba7c-537c48d49e46
35
- X-Served-By:
36
- - i-0a61c712.us-west-2a
37
- Content-Length:
38
- - '170'
39
- Connection:
40
- - keep-alive
38
+ - 2cbaf860-4741-4a7a-af9b-79a78c57d6bc
39
+ X-Nlp-Irt:
40
+ - '603'
41
41
  body:
42
42
  encoding: UTF-8
43
43
  string: <ns2:Error xmlns:ns2="http://www.navteq.com/lbsp/Errors/1" type="PermissionError"
44
44
  subtype="InvalidCredentials"><Details>invalid credentials for test</Details></ns2:Error>
45
45
  http_version:
46
- recorded_at: Thu, 08 Sep 2016 22:12:01 GMT
47
- recorded_with: VCR 3.0.3
46
+ recorded_at: Mon, 11 Nov 2019 22:03:24 GMT
47
+ recorded_with: VCR 5.0.0
@@ -18,37 +18,37 @@ http_interactions:
18
18
  code: 200
19
19
  message: OK
20
20
  headers:
21
- Access-Control-Allow-Origin:
22
- - "*"
23
- Cache-Control:
24
- - public, max-age=86400
21
+ Date:
22
+ - Mon, 11 Nov 2019 22:03:24 GMT
25
23
  Content-Type:
26
24
  - application/xml;charset=utf-8
27
- Date:
28
- - Thu, 08 Sep 2016 22:12:01 GMT
25
+ Content-Length:
26
+ - '626'
27
+ Connection:
28
+ - keep-alive
29
29
  Server:
30
30
  - nginx-clojure
31
- X-Nlp-Irt:
32
- - '4414'
31
+ Cache-Control:
32
+ - public, max-age=86400
33
+ Access-Control-Allow-Origin:
34
+ - "*"
35
+ X-Served-By:
36
+ - i-09a2ce08fa1f4510d.us-west-2b
33
37
  X-Nlp-Log:
34
38
  - Z2NfYz1VU0EgZ2NfbD1jaXR5IGdjX209YXI=
35
39
  X-Nlp-Tid:
36
- - 06eae949-4ffa-4aaa-9bc2-9b018d2f6a63
37
- X-Served-By:
38
- - i-0a61c712.us-west-2a
39
- Content-Length:
40
- - '626'
41
- Connection:
42
- - keep-alive
40
+ - 24f2b4d6-8794-4a58-9f02-49a7221446e4
41
+ X-Nlp-Irt:
42
+ - '843'
43
43
  body:
44
44
  encoding: ASCII-8BIT
45
- string: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><ns2:Search xmlns:ns2="http://www.navteq.com/lbsp/Search-Search/4"><Response><MetaInfo><Timestamp>2016-09-08T22:12:01.403Z</Timestamp></MetaInfo><View
46
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:SearchResultsViewType"><ViewId>0</ViewId><Result><Relevance>1.0</Relevance><MatchLevel>city</MatchLevel><MatchQuality><State>1.0</State><City>1.0</City></MatchQuality><Location><LocationId>NT_FE3T7HawlbK76SxDmyKlUA</LocationId><LocationType>area</LocationType><DisplayPosition><Latitude>37.37172</Latitude><Longitude>-122.03801</Longitude></DisplayPosition><NavigationPosition><Latitude>37.37172</Latitude><Longitude>-122.03801</Longitude></NavigationPosition><MapView><TopLeft><Latitude>37.45103</Latitude><Longitude>-122.06566</Longitude></TopLeft><BottomRight><Latitude>37.3323</Latitude><Longitude>-121.98241</Longitude></BottomRight></MapView><Address><Label>Sunnyvale,
45
+ string: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><ns2:Search xmlns:ns2="http://www.navteq.com/lbsp/Search-Search/4"><Response><MetaInfo><Timestamp>2019-11-11T21:59:15.406Z</Timestamp></MetaInfo><View
46
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:SearchResultsViewType"><ViewId>0</ViewId><Result><Relevance>1.0</Relevance><MatchLevel>city</MatchLevel><MatchQuality><State>1.0</State><City>1.0</City></MatchQuality><Location><LocationId>NT_FE3T7HawlbK76SxDmyKlUA</LocationId><LocationType>area</LocationType><DisplayPosition><Latitude>37.37172</Latitude><Longitude>-122.03801</Longitude></DisplayPosition><NavigationPosition><Latitude>37.37172</Latitude><Longitude>-122.03801</Longitude></NavigationPosition><MapView><TopLeft><Latitude>37.45103</Latitude><Longitude>-122.06566</Longitude></TopLeft><BottomRight><Latitude>37.33227</Latitude><Longitude>-121.98241</Longitude></BottomRight></MapView><Address><Label>Sunnyvale,
47
47
  CA, United States</Label><Country>USA</Country><State>CA</State><County>Santa
48
48
  Clara</County><City>Sunnyvale</City><PostalCode>94086</PostalCode><AdditionalData
49
49
  key="Country2">US</AdditionalData><AdditionalData key="CountryName">United
50
50
  States</AdditionalData><AdditionalData key="StateName">California</AdditionalData><AdditionalData
51
51
  key="CountyName">Santa Clara</AdditionalData><AdditionalData key="PostalCodeType">N</AdditionalData></Address></Location></Result></View></Response></ns2:Search>
52
52
  http_version:
53
- recorded_at: Thu, 08 Sep 2016 22:12:01 GMT
54
- recorded_with: VCR 3.0.3
53
+ recorded_at: Mon, 11 Nov 2019 22:03:24 GMT
54
+ recorded_with: VCR 5.0.0
@@ -0,0 +1,46 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://reverse.geocoder.cit.api.here.com/6.2/reversegeocode.xml?additionaldata=Country2,1&app_code=<HERE_APP_CODE>&app_id=<HERE_APP_ID>&gen=9&language=en-US&maxresults=1&mode=retrieveAddresses&prox=37.7692014,-122.7737106,250
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
+ - Mon, 11 Nov 2019 22:03:25 GMT
23
+ Content-Type:
24
+ - application/xml;charset=utf-8
25
+ Content-Length:
26
+ - '224'
27
+ Connection:
28
+ - keep-alive
29
+ Server:
30
+ - nginx-clojure
31
+ Cache-Control:
32
+ - public, max-age=86400
33
+ Access-Control-Allow-Origin:
34
+ - "*"
35
+ X-Served-By:
36
+ - i-0febd699fbbdcf495.us-west-2b
37
+ X-Nlp-Tid:
38
+ - c33e88aa-254f-4bc0-b262-152cab69100c
39
+ X-Nlp-Irt:
40
+ - '1629'
41
+ body:
42
+ encoding: UTF-8
43
+ string: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><ns2:Search xmlns:ns2="http://www.navteq.com/lbsp/Search-Search/4"><Response><MetaInfo><Timestamp>2019-11-11T22:03:25.046Z</Timestamp></MetaInfo></Response></ns2:Search>
44
+ http_version:
45
+ recorded_at: Mon, 11 Nov 2019 22:03:25 GMT
46
+ recorded_with: VCR 5.0.0
@@ -0,0 +1,45 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://reverse.geocoder.cit.api.here.com/6.2/reversegeocode.xml?additionaldata=Country2,1&app_code=fake&app_id=test&gen=9&language=en-US&maxresults=1&mode=retrieveAddresses&prox=37.93053,-122.34358,250
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
+ Date:
22
+ - Mon, 11 Nov 2019 22:03:24 GMT
23
+ Content-Type:
24
+ - application/xml;charset=utf-8
25
+ Content-Length:
26
+ - '170'
27
+ Connection:
28
+ - keep-alive
29
+ Server:
30
+ - nginx-clojure
31
+ Access-Control-Allow-Origin:
32
+ - "*"
33
+ X-Served-By:
34
+ - i-0febd699fbbdcf495.us-west-2b
35
+ X-Nlp-Tid:
36
+ - 61641ef6-5f06-48ee-a285-ff7dfe8e0215
37
+ X-Nlp-Irt:
38
+ - '962'
39
+ body:
40
+ encoding: UTF-8
41
+ string: <ns2:Error xmlns:ns2="http://www.navteq.com/lbsp/Errors/1" type="PermissionError"
42
+ subtype="InvalidCredentials"><Details>invalid credentials for test</Details></ns2:Error>
43
+ http_version:
44
+ recorded_at: Mon, 11 Nov 2019 22:03:24 GMT
45
+ recorded_with: VCR 5.0.0
@@ -0,0 +1,55 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://reverse.geocoder.cit.api.here.com/6.2/reversegeocode.xml?additionaldata=Country2,1&app_code=<HERE_APP_CODE>&app_id=<HERE_APP_ID>&gen=9&language=en-US&maxresults=1&mode=retrieveAddresses&prox=37.93053,-122.34358,250
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
+ - Mon, 11 Nov 2019 22:03:24 GMT
23
+ Content-Type:
24
+ - application/xml;charset=utf-8
25
+ Transfer-Encoding:
26
+ - chunked
27
+ Connection:
28
+ - keep-alive
29
+ Server:
30
+ - nginx-clojure
31
+ Cache-Control:
32
+ - public, max-age=86400
33
+ Access-Control-Allow-Origin:
34
+ - "*"
35
+ X-Served-By:
36
+ - i-0febd699fbbdcf495.us-west-2b
37
+ X-Nlp-Tid:
38
+ - 6d2e46a2-7d90-4156-aab1-8c595e4b23f4
39
+ Vary:
40
+ - Accept-Encoding
41
+ X-Nlp-Irt:
42
+ - '4558'
43
+ body:
44
+ encoding: ASCII-8BIT
45
+ string: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><ns2:Search xmlns:ns2="http://www.navteq.com/lbsp/Search-Search/4"><Response><MetaInfo><Timestamp>2019-11-11T22:03:24.849Z</Timestamp><NextPageInformation>2</NextPageInformation></MetaInfo><View
46
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:SearchResultsViewType"><ViewId>0</ViewId><Result><Relevance>1.0</Relevance><Distance>3.5</Distance><MatchLevel>houseNumber</MatchLevel><MatchQuality><Country>1.0</Country><State>1.0</State><County>1.0</County><City>1.0</City><District>1.0</District><Street>1.0</Street><HouseNumber>1.0</HouseNumber><PostalCode>1.0</PostalCode></MatchQuality><MatchType>interpolated</MatchType><Location><LocationId>NT_O1ECr0RHU.ggJtLGox-33A_l_23635076_R_xEDO</LocationId><LocationType>address</LocationType><DisplayPosition><Latitude>37.9305301</Latitude><Longitude>-122.3434851</Longitude></DisplayPosition><NavigationPosition><Latitude>37.9305301</Latitude><Longitude>-122.34362</Longitude></NavigationPosition><MapView><TopLeft><Latitude>37.9316542</Latitude><Longitude>-122.3449103</Longitude></TopLeft><BottomRight><Latitude>37.9294059</Latitude><Longitude>-122.3420599</Longitude></BottomRight></MapView><Address><Label>118
47
+ S 27th St, Richmond, CA 94804, United States</Label><Country>USA</Country><State>CA</State><County>Contra
48
+ Costa</County><City>Richmond</City><District>Pullman</District><Street>S 27th
49
+ St</Street><HouseNumber>118</HouseNumber><PostalCode>94804</PostalCode><AdditionalData
50
+ key="Country2">US</AdditionalData><AdditionalData key="CountryName">United
51
+ States</AdditionalData><AdditionalData key="StateName">California</AdditionalData><AdditionalData
52
+ key="CountyName">Contra Costa</AdditionalData><AdditionalData key="PostalCodeType">N</AdditionalData></Address><MapReference><ReferenceId>23635076</ReferenceId><MapId>NAAM19134</MapId><MapVersion>Q1/2019</MapVersion><MapReleaseDate>2019-10-25</MapReleaseDate><Spot>0.49</Spot><SideOfStreet>right</SideOfStreet><CountryId>21000001</CountryId><StateId>21009408</StateId><CountyId>21009456</CountyId><CityId>21009489</CityId></MapReference></Location></Result></View></Response></ns2:Search>
53
+ http_version:
54
+ recorded_at: Mon, 11 Nov 2019 22:03:24 GMT
55
+ recorded_with: VCR 5.0.0
@@ -2,68 +2,153 @@ require 'spec_helper'
2
2
 
3
3
  describe Geokit::Geocoders::HereGeocoder do
4
4
 
5
- let(:address) { "Sunnyvale, CA" }
5
+ context "Geocode address" do
6
6
 
7
- subject { described_class.geocode(address) }
7
+ let(:address) { "Sunnyvale, CA" }
8
8
 
9
- context "when missing credentials" do
9
+ subject { described_class.geocode(address) }
10
10
 
11
- it 'raises an error' do
12
- expect { subject }.to raise_error Geokit::Geocoders::GeocodeError
11
+ context "when missing credentials" do
12
+
13
+ before do
14
+ Geokit::Geocoders::HereGeocoder.app_id = nil
15
+ Geokit::Geocoders::HereGeocoder.app_code = nil
16
+ end
17
+
18
+ it 'raises an error' do
19
+ expect { subject }.to raise_error Geokit::Geocoders::GeocodeError
20
+ end
13
21
  end
14
- end
15
22
 
16
- context "with invalid credentials" do
23
+ context "with invalid credentials" do
24
+
25
+ before do
26
+ Geokit::Geocoders::HereGeocoder.app_id = "test"
27
+ Geokit::Geocoders::HereGeocoder.app_code = "fake"
28
+ end
17
29
 
18
- before do
19
- Geokit::Geocoders::HereGeocoder.app_id = "test"
20
- Geokit::Geocoders::HereGeocoder.app_code = "fake"
30
+ it 'returns invalid location' do
31
+ VCR.use_cassette("geocode_permission_denied") do
32
+ expect( subject.success? ).to be false
33
+ end
34
+ end
21
35
  end
22
36
 
23
- it 'returns invalid location' do
24
- VCR.use_cassette("permission_denied") do
25
- expect( subject.success? ).to be false
37
+ context "with correct credentials" do
38
+
39
+ before do
40
+ Geokit::Geocoders::HereGeocoder.app_id = ENV['HERE_APP_ID']
41
+ Geokit::Geocoders::HereGeocoder.app_code = ENV['HERE_APP_CODE']
42
+ end
43
+
44
+ it 'not raises an error' do
45
+ VCR.use_cassette("geocode_sunnyvale_location") do
46
+ expect { subject }.not_to raise_error
47
+ end
48
+ end
49
+
50
+ it 'returns valid location' do
51
+ VCR.use_cassette("geocode_sunnyvale_location") do
52
+ expect( subject.success? ).to be true
53
+ expect( subject.city ).to eq "Sunnyvale"
54
+ expect( subject.state_name ).to eq "California"
55
+ expect( subject.state_code ).to eq "CA"
56
+ expect( subject.state ).to eq "CA"
57
+ expect( subject.zip ).to eq "94086"
58
+ expect( subject.country_code ).to eq "US"
59
+ expect( subject.country ).to eq "United States"
60
+ expect( subject.lat ).to eq 37.37172
61
+ expect( subject.lng ).to eq -122.03801
62
+ end
63
+ end
64
+
65
+ context "fake location" do
66
+
67
+ let(:address) { "Abcdefg" }
68
+
69
+ it 'returns invalid location' do
70
+ VCR.use_cassette("geocode_fake_location") do
71
+ expect( subject.success? ).to be false
72
+ end
73
+ end
74
+
26
75
  end
76
+
27
77
  end
78
+
28
79
  end
29
80
 
30
- context "with correct credentials" do
81
+ context "Reverse geocode location" do
31
82
 
32
- before do
33
- Geokit::Geocoders::HereGeocoder.app_id = ENV['HERE_APP_ID']
34
- Geokit::Geocoders::HereGeocoder.app_code = ENV['HERE_APP_CODE']
35
- end
83
+ let(:latlng) { "37.930530, -122.343580" }
36
84
 
37
- it 'not raises an error' do
38
- VCR.use_cassette("sunnyvale_location") do
39
- expect { subject }.not_to raise_error
85
+ subject { described_class.reverse_geocode(latlng) }
86
+
87
+ context "when missing credentials" do
88
+
89
+ before do
90
+ Geokit::Geocoders::HereGeocoder.app_id = nil
91
+ Geokit::Geocoders::HereGeocoder.app_code = nil
40
92
  end
41
- end
42
93
 
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 "94086"
51
- expect( subject.country_code ).to eq "US"
52
- expect( subject.country ).to eq "United States"
53
- expect( subject.lat ).to eq 37.37172
54
- expect( subject.lng ).to eq -122.03801
94
+ it 'raises an error' do
95
+ expect { subject }.to raise_error Geokit::Geocoders::GeocodeError
55
96
  end
56
97
  end
57
98
 
58
- context "fake location" do
99
+ context "with invalid credentials" do
59
100
 
60
- let(:address) { "Abcdefg" }
101
+ before do
102
+ Geokit::Geocoders::HereGeocoder.app_id = "test"
103
+ Geokit::Geocoders::HereGeocoder.app_code = "fake"
104
+ end
61
105
 
62
106
  it 'returns invalid location' do
63
- VCR.use_cassette("fake_location") do
107
+ VCR.use_cassette("reverse_geocode_permission_denied") do
64
108
  expect( subject.success? ).to be false
65
109
  end
66
110
  end
111
+ end
112
+
113
+ context "with correct credentials" do
114
+
115
+ before do
116
+ Geokit::Geocoders::HereGeocoder.app_id = ENV['HERE_APP_ID']
117
+ Geokit::Geocoders::HereGeocoder.app_code = ENV['HERE_APP_CODE']
118
+ end
119
+
120
+ it 'not raises an error' do
121
+ VCR.use_cassette("reverse_geocode_richmond_location") do
122
+ expect { subject }.not_to raise_error
123
+ end
124
+ end
125
+
126
+ it 'returns valid location' do
127
+ VCR.use_cassette("reverse_geocode_richmond_location") do
128
+ expect( subject.success? ).to be true
129
+ expect( subject.city ).to eq "Richmond"
130
+ expect( subject.state_name ).to eq "California"
131
+ expect( subject.state_code ).to eq "CA"
132
+ expect( subject.state ).to eq "CA"
133
+ expect( subject.zip ).to eq "94804"
134
+ expect( subject.country_code ).to eq "US"
135
+ expect( subject.country ).to eq "United States"
136
+ expect( subject.lat ).to eq 37.9305301
137
+ expect( subject.lng ).to eq -122.3434851
138
+ end
139
+ end
140
+
141
+ context "fake location" do
142
+
143
+ let(:latlng) { "37.7692014,-122.7737106" }
144
+
145
+ it 'returns invalid location' do
146
+ VCR.use_cassette("reverse_geocode_fake_location") do
147
+ expect( subject.success? ).to be false
148
+ end
149
+ end
150
+
151
+ end
67
152
 
68
153
  end
69
154
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geokit_here_geocoder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Serhiy Rozum
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-29 00:00:00.000000000 Z
11
+ date: 2019-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -110,9 +110,12 @@ files:
110
110
  - Rakefile
111
111
  - geokit_here_geocoder.gemspec
112
112
  - lib/geokit_here_geocoder.rb
113
- - spec/cassettes/fake_location.yml
114
- - spec/cassettes/permission_denied.yml
115
- - spec/cassettes/sunnyvale_location.yml
113
+ - spec/cassettes/geocode_fake_location.yml
114
+ - spec/cassettes/geocode_permission_denied.yml
115
+ - spec/cassettes/geocode_sunnyvale_location.yml
116
+ - spec/cassettes/reverse_geocode_fake_location.yml
117
+ - spec/cassettes/reverse_geocode_permission_denied.yml
118
+ - spec/cassettes/reverse_geocode_richmond_location.yml
116
119
  - spec/geokit_here_geocoder_spec.rb
117
120
  - spec/spec_helper.rb
118
121
  homepage: https://github.com/easypost/geokit_here_geocoder.git
@@ -134,14 +137,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
134
137
  - !ruby/object:Gem::Version
135
138
  version: '0'
136
139
  requirements: []
137
- rubyforge_project:
138
- rubygems_version: 2.2.2
140
+ rubygems_version: 3.0.6
139
141
  signing_key:
140
142
  specification_version: 4
141
143
  summary: Geokit custom geocoder for Here.com service
142
144
  test_files:
143
- - spec/cassettes/fake_location.yml
144
- - spec/cassettes/permission_denied.yml
145
- - spec/cassettes/sunnyvale_location.yml
145
+ - spec/cassettes/geocode_fake_location.yml
146
+ - spec/cassettes/geocode_permission_denied.yml
147
+ - spec/cassettes/geocode_sunnyvale_location.yml
148
+ - spec/cassettes/reverse_geocode_fake_location.yml
149
+ - spec/cassettes/reverse_geocode_permission_denied.yml
150
+ - spec/cassettes/reverse_geocode_richmond_location.yml
146
151
  - spec/geokit_here_geocoder_spec.rb
147
152
  - spec/spec_helper.rb