google_maps 0.2.0 → 0.3.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.
- data/VERSION +1 -1
- data/google_maps.gemspec +2 -2
- data/lib/google_maps.rb +9 -8
- data/lib/google_maps/geocoder.rb +23 -10
- data/test/google_maps/geocoder_test.rb +9 -9
- data/test/google_maps_test.rb +6 -12
- metadata +4 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/google_maps.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "google_maps"
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.3.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Tushar Ranka"]
|
12
|
-
s.date = "2012-05-
|
12
|
+
s.date = "2012-05-30"
|
13
13
|
s.description = "General Purpose Library to interact with Google Maps v3 api. Geocoder. "
|
14
14
|
s.email = "tusharranka@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
data/lib/google_maps.rb
CHANGED
@@ -11,6 +11,14 @@ module GoogleMaps
|
|
11
11
|
block.call(self)
|
12
12
|
end
|
13
13
|
|
14
|
+
def self.client(*args)
|
15
|
+
if args.present?
|
16
|
+
@@client = args.first
|
17
|
+
else
|
18
|
+
@@client
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
14
22
|
def self.key(*args)
|
15
23
|
if args.present?
|
16
24
|
@@key = args.first
|
@@ -18,7 +26,7 @@ module GoogleMaps
|
|
18
26
|
@@key
|
19
27
|
end
|
20
28
|
end
|
21
|
-
|
29
|
+
|
22
30
|
def self.use_enterprise_account(*args)
|
23
31
|
if args.first.present? && args.first == false
|
24
32
|
@@enterprise_account = false
|
@@ -31,11 +39,4 @@ module GoogleMaps
|
|
31
39
|
@@enterprise_account || false
|
32
40
|
end
|
33
41
|
|
34
|
-
def self.key_name
|
35
|
-
enterprise_account? ? :client : :key
|
36
|
-
end
|
37
|
-
|
38
|
-
def self.geocoder_key_name
|
39
|
-
:clientId if enterprise_account?
|
40
|
-
end
|
41
42
|
end
|
data/lib/google_maps/geocoder.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'base64'
|
2
|
+
require 'openssl'
|
1
3
|
require 'google_maps/geocoder/result'
|
2
4
|
require 'google_maps/geocoder/location'
|
3
5
|
|
@@ -10,7 +12,8 @@ module GoogleMaps
|
|
10
12
|
|
11
13
|
module Geocoder
|
12
14
|
|
13
|
-
|
15
|
+
URI_DOMAIN = "maps.googleapis.com"
|
16
|
+
URI_BASE = "/maps/api/geocode/json"
|
14
17
|
|
15
18
|
def self.locate!(address, options = { })
|
16
19
|
options = {
|
@@ -26,22 +29,32 @@ module GoogleMaps
|
|
26
29
|
end
|
27
30
|
|
28
31
|
def self.url(options)
|
29
|
-
ssl
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
end
|
32
|
+
ssl = options.delete(:ssl)
|
33
|
+
# for enterprise account
|
34
|
+
client = options.delete(:client) || ::GoogleMaps.client
|
35
|
+
key = options.delete(:key) || ::GoogleMaps.key
|
34
36
|
|
35
37
|
parameters = []
|
36
|
-
options.each do |
|
37
|
-
parameters << "#{
|
38
|
+
options.each do |k, v|
|
39
|
+
parameters << "#{k}=#{CGI.escape(v.to_s)}"
|
40
|
+
end
|
41
|
+
|
42
|
+
if ::GoogleMaps.enterprise_account? && client && key
|
43
|
+
parameters << "client=#{CGI.escape(client)}"
|
44
|
+
sign_str = "#{URI_BASE}?#{parameters.join('&')}"
|
45
|
+
sha1 = OpenSSL::Digest::Digest.new('sha1')
|
46
|
+
binary_key = Base64.decode64(key.tr('-_','+/'))
|
47
|
+
binary_signature = OpenSSL::HMAC.digest(sha1, binary_key, sign_str)
|
48
|
+
signature = Base64.encode64(binary_signature).tr('+/','-_').strip
|
49
|
+
parameters << "signature=#{signature}"
|
38
50
|
end
|
51
|
+
|
39
52
|
"#{uri_base_path(:ssl => ssl)}?#{parameters.join('&')}"
|
40
53
|
end
|
41
54
|
|
42
55
|
def self.uri_base_path(options = { })
|
43
56
|
protocol = options[:ssl] ? "https" : "http"
|
44
|
-
"#{protocol}://#{URI_BASE}"
|
57
|
+
"#{protocol}://#{URI_DOMAIN}#{URI_BASE}"
|
45
58
|
end
|
46
59
|
end
|
47
|
-
end
|
60
|
+
end
|
@@ -64,9 +64,9 @@ class GoogleMaps::GeocoderTest < ActiveSupport::TestCase
|
|
64
64
|
|
65
65
|
|
66
66
|
def test_url_base_path
|
67
|
-
assert_equal "http://#{GoogleMaps::Geocoder::URI_BASE}", GoogleMaps::Geocoder.uri_base_path
|
68
|
-
assert_equal "http://#{GoogleMaps::Geocoder::URI_BASE}", GoogleMaps::Geocoder.uri_base_path(:ssl => false)
|
69
|
-
assert_equal "https://#{GoogleMaps::Geocoder::URI_BASE}", GoogleMaps::Geocoder.uri_base_path(:ssl => true)
|
67
|
+
assert_equal "http://#{GoogleMaps::Geocoder::URI_DOMAIN}#{GoogleMaps::Geocoder::URI_BASE}", GoogleMaps::Geocoder.uri_base_path
|
68
|
+
assert_equal "http://#{GoogleMaps::Geocoder::URI_DOMAIN}#{GoogleMaps::Geocoder::URI_BASE}", GoogleMaps::Geocoder.uri_base_path(:ssl => false)
|
69
|
+
assert_equal "https://#{GoogleMaps::Geocoder::URI_DOMAIN}#{GoogleMaps::Geocoder::URI_BASE}", GoogleMaps::Geocoder.uri_base_path(:ssl => true)
|
70
70
|
end
|
71
71
|
|
72
72
|
def test_url
|
@@ -74,11 +74,11 @@ class GoogleMaps::GeocoderTest < ActiveSupport::TestCase
|
|
74
74
|
assert_url_parts expected_url("address=50+Castilian+Drive%2C+Goleta%2C+CA&sensor=false", true), GoogleMaps::Geocoder.url(ordered_hash(:sensor => false, :ssl => true, :address => "50 Castilian Drive, Goleta, CA"))
|
75
75
|
end
|
76
76
|
|
77
|
-
def
|
78
|
-
GoogleMaps.
|
77
|
+
def test_url__with_enterprise_account
|
78
|
+
GoogleMaps.client "clientID"
|
79
|
+
GoogleMaps.key "vNIXE0xscrmjlyV-12Nj_BvUPaw="
|
79
80
|
GoogleMaps.use_enterprise_account
|
80
|
-
|
81
|
-
assert_url_parts expected_url("address=A&sensor=false&clientId=bar"), GoogleMaps::Geocoder.url(ordered_hash(:sensor => false, :address => "A"))
|
81
|
+
assert_equal expected_url("address=New+York&sensor=false&client=clientID&signature=KrU1TzVQM7Ur0i8i7K3huiw3MsA="), GoogleMaps::Geocoder.url(ordered_hash(:address => "New York", :sensor => false))
|
82
82
|
end
|
83
83
|
|
84
84
|
private
|
@@ -102,7 +102,7 @@ class GoogleMaps::GeocoderTest < ActiveSupport::TestCase
|
|
102
102
|
end
|
103
103
|
|
104
104
|
def expected_url(parameters, ssl = false)
|
105
|
-
"http#{'s' if ssl}://#{GoogleMaps::Geocoder::URI_BASE}?#{parameters}"
|
105
|
+
"http#{'s' if ssl}://#{GoogleMaps::Geocoder::URI_DOMAIN}#{GoogleMaps::Geocoder::URI_BASE}?#{parameters}"
|
106
106
|
end
|
107
107
|
|
108
108
|
def ordered_hash(hash)
|
@@ -113,4 +113,4 @@ class GoogleMaps::GeocoderTest < ActiveSupport::TestCase
|
|
113
113
|
oh.merge!(hash)
|
114
114
|
oh
|
115
115
|
end
|
116
|
-
end
|
116
|
+
end
|
data/test/google_maps_test.rb
CHANGED
@@ -1,28 +1,22 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
class GoogleMaps::GeocoderTest < ActiveSupport::TestCase
|
4
|
-
def
|
4
|
+
def test_configure__free_account
|
5
5
|
GoogleMaps.configure do |maps|
|
6
|
-
maps.key "foobar"
|
7
6
|
end
|
8
7
|
|
9
|
-
assert_equal "foobar", GoogleMaps.key
|
10
8
|
assert_equal false, GoogleMaps.enterprise_account?
|
11
|
-
assert_equal :key, GoogleMaps.key_name
|
12
|
-
assert_equal nil, GoogleMaps.geocoder_key_name
|
13
9
|
end
|
14
10
|
|
15
|
-
def
|
11
|
+
def test_configure__enterprise_account
|
16
12
|
GoogleMaps.configure do |maps|
|
17
|
-
maps.
|
13
|
+
maps.client "foobar"
|
14
|
+
maps.key "foobarkey"
|
18
15
|
maps.use_enterprise_account
|
19
16
|
end
|
20
17
|
|
21
|
-
assert_equal "
|
18
|
+
assert_equal "foobar", GoogleMaps.client
|
19
|
+
assert_equal "foobarkey", GoogleMaps.key
|
22
20
|
assert GoogleMaps.enterprise_account?
|
23
|
-
assert_equal :client, GoogleMaps.key_name
|
24
|
-
assert_equal :clientId, GoogleMaps.geocoder_key_name
|
25
21
|
end
|
26
|
-
|
27
|
-
|
28
22
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: google_maps
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 3
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.3.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Tushar Ranka
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-05-
|
18
|
+
date: 2012-05-30 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
type: :runtime
|