pinpoint 0.3.1 → 0.4.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/lib/pinpoint/address.rb +3 -0
- data/lib/pinpoint/mapable.rb +56 -0
- data/lib/pinpoint/mapable_services/google_maps.rb +37 -0
- data/lib/pinpoint/mapable_services/mapquest.rb +37 -0
- data/lib/pinpoint/mapable_services/yahoo_maps.rb +37 -0
- data/lib/pinpoint/version.rb +1 -1
- data/spec/mapable_services/google_maps_spec.rb +17 -0
- data/spec/mapable_services/mapquest_spec.rb +17 -0
- data/spec/mapable_services/yahoo_maps_spec.rb +17 -0
- data/spec/mapable_spec.rb +22 -0
- metadata +13 -1
data/lib/pinpoint/address.rb
CHANGED
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'active_support/core_ext/string/inflections'
|
2
|
+
require 'pinpoint/mapable_services/google_maps'
|
3
|
+
require 'pinpoint/mapable_services/yahoo_maps'
|
4
|
+
require 'pinpoint/mapable_services/mapquest'
|
5
|
+
|
6
|
+
module Pinpoint
|
7
|
+
module Mapable
|
8
|
+
|
9
|
+
##
|
10
|
+
# Public: Creates a URL which can be used to locate the Mapable on a map
|
11
|
+
# using one of the supported services:
|
12
|
+
#
|
13
|
+
# * Google Maps
|
14
|
+
# * Yahoo Maps
|
15
|
+
# * Mapquest
|
16
|
+
#
|
17
|
+
# options - A Hash of options which will apply to the map URL
|
18
|
+
#
|
19
|
+
# :via - A Symbol representing the service to use to create the
|
20
|
+
# map URL. Options include:
|
21
|
+
#
|
22
|
+
# * :google_maps
|
23
|
+
# * :yahoo_maps
|
24
|
+
# * :mapquest
|
25
|
+
#
|
26
|
+
# (defaults to google_maps)
|
27
|
+
#
|
28
|
+
# Returns a String representing the URL which will display the location in
|
29
|
+
# the browser.
|
30
|
+
#
|
31
|
+
def map_url(options = {})
|
32
|
+
service = options.fetch(:via, :google_maps)
|
33
|
+
service_class = service_class_for(service)
|
34
|
+
|
35
|
+
service_class.map_url location: self.to_s,
|
36
|
+
location_name: self.name
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
##
|
42
|
+
# Private: Finds the class name of the service that will be used to resolve
|
43
|
+
# the map URL in #map_url.
|
44
|
+
#
|
45
|
+
# service - A Symbol or String representing the service to be looked up
|
46
|
+
#
|
47
|
+
# Example
|
48
|
+
#
|
49
|
+
# service_class_for :google_maps
|
50
|
+
# # => <Class Pinpoint::MapableService::GoogleMaps>
|
51
|
+
#
|
52
|
+
def service_class_for(service)
|
53
|
+
"Pinpoint::MapableService::#{service.to_s.camelize}".constantize
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'cgi'
|
2
|
+
|
3
|
+
module Pinpoint
|
4
|
+
module MapableService
|
5
|
+
class GoogleMaps
|
6
|
+
|
7
|
+
##
|
8
|
+
# Private: Renders a URL for a given location and location name using the
|
9
|
+
# Google Maps mapping service.
|
10
|
+
#
|
11
|
+
# The location and location name will be properly escaped.
|
12
|
+
#
|
13
|
+
# options - A Hash of options used in the method
|
14
|
+
#
|
15
|
+
# :location - A String representing the location to display
|
16
|
+
# via the map URL
|
17
|
+
# :location_name - A String representing the name of the
|
18
|
+
# location to be displayed via the map URL
|
19
|
+
#
|
20
|
+
# Example
|
21
|
+
#
|
22
|
+
# map_url location: 'London, UK',
|
23
|
+
# location_name: 'Capital of the UK'
|
24
|
+
# # => http://maps.google.com?q=London%2C+UK+%28Capital+of+the+UK%29
|
25
|
+
#
|
26
|
+
def self.map_url(options = {})
|
27
|
+
escaped_map_location = CGI.escape options.fetch(:location).to_str
|
28
|
+
escaped_location_name = CGI.escape "(#{options.fetch(:location_name)})"
|
29
|
+
|
30
|
+
'http://maps.google.com?q=' +
|
31
|
+
escaped_map_location +
|
32
|
+
'+' +
|
33
|
+
escaped_location_name
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'cgi'
|
2
|
+
|
3
|
+
module Pinpoint
|
4
|
+
module MapableService
|
5
|
+
class Mapquest
|
6
|
+
|
7
|
+
##
|
8
|
+
# Private: Renders a URL for a given location and location name using the
|
9
|
+
# Mapquest mapping service.
|
10
|
+
#
|
11
|
+
# The location and location name will be properly escaped.
|
12
|
+
#
|
13
|
+
# options - A Hash of options used in the method
|
14
|
+
#
|
15
|
+
# :location - A String representing the location to display
|
16
|
+
# via the map URL
|
17
|
+
# :location_name - A String representing the name of the
|
18
|
+
# location to be displayed via the map URL
|
19
|
+
#
|
20
|
+
# Example
|
21
|
+
#
|
22
|
+
# map_url location: 'London, UK',
|
23
|
+
# location_name: 'Capital of the UK'
|
24
|
+
# # => http://mapquest.com?q=London%2C+UK+%28Capital+of+the+UK%29
|
25
|
+
#
|
26
|
+
def self.map_url(options = {})
|
27
|
+
escaped_map_location = CGI.escape options.fetch(:location).to_str
|
28
|
+
escaped_location_name = CGI.escape "(#{options.fetch(:location_name)})"
|
29
|
+
|
30
|
+
'http://mapquest.com?q=' +
|
31
|
+
escaped_map_location +
|
32
|
+
'+' +
|
33
|
+
escaped_location_name
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'cgi'
|
2
|
+
|
3
|
+
module Pinpoint
|
4
|
+
module MapableService
|
5
|
+
class YahooMaps
|
6
|
+
|
7
|
+
##
|
8
|
+
# Private: Renders a URL for a given location and location name using the
|
9
|
+
# Yahoo Maps mapping service.
|
10
|
+
#
|
11
|
+
# The location and location name will be properly escaped.
|
12
|
+
#
|
13
|
+
# options - A Hash of options used in the method
|
14
|
+
#
|
15
|
+
# :location - A String representing the location to display
|
16
|
+
# via the map URL
|
17
|
+
# :location_name - A String representing the name of the
|
18
|
+
# location to be displayed via the map URL
|
19
|
+
#
|
20
|
+
# Example
|
21
|
+
#
|
22
|
+
# map_url location: 'London, UK',
|
23
|
+
# location_name: 'Capital of the UK'
|
24
|
+
# # => http://maps.yahoo.com#q=London%2C+UK&tt=Capital+of+the+UK
|
25
|
+
#
|
26
|
+
def self.map_url(options = {})
|
27
|
+
escaped_map_location = CGI.escape options.fetch(:location).to_str
|
28
|
+
escaped_location_name = CGI.escape options.fetch(:location_name)
|
29
|
+
|
30
|
+
'http://maps.yahoo.com#q=' +
|
31
|
+
escaped_map_location +
|
32
|
+
'&tt=' +
|
33
|
+
escaped_location_name
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/pinpoint/version.rb
CHANGED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rspectacular'
|
2
|
+
require 'pinpoint/mapable_services/google_maps'
|
3
|
+
|
4
|
+
describe Pinpoint::MapableService::GoogleMaps do
|
5
|
+
it 'can create a GoogleMaps URL from the location string' do
|
6
|
+
map_url = Pinpoint::MapableService::GoogleMaps.map_url(
|
7
|
+
location_name: 'name with \\stuff/',
|
8
|
+
location: 'location with \\stuff/')
|
9
|
+
|
10
|
+
map_url.should eql(
|
11
|
+
'http://maps.google.com?q=' +
|
12
|
+
'location+with+%5Cstuff%2F' +
|
13
|
+
'+' +
|
14
|
+
'%28name+with+%5Cstuff%2F%29'
|
15
|
+
)
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rspectacular'
|
2
|
+
require 'pinpoint/mapable_services/mapquest'
|
3
|
+
|
4
|
+
describe Pinpoint::MapableService::Mapquest do
|
5
|
+
it 'can create a Mapquest URL from the location string' do
|
6
|
+
map_url = Pinpoint::MapableService::Mapquest.map_url(
|
7
|
+
location_name: 'name with \\stuff/',
|
8
|
+
location: 'location with \\stuff/')
|
9
|
+
|
10
|
+
map_url.should eql(
|
11
|
+
'http://mapquest.com?q=' +
|
12
|
+
'location+with+%5Cstuff%2F' +
|
13
|
+
'+' +
|
14
|
+
'%28name+with+%5Cstuff%2F%29'
|
15
|
+
)
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rspectacular'
|
2
|
+
require 'pinpoint/mapable_services/yahoo_maps'
|
3
|
+
|
4
|
+
describe Pinpoint::MapableService::YahooMaps do
|
5
|
+
it 'can create a YahooMaps URL from the location string' do
|
6
|
+
map_url = Pinpoint::MapableService::YahooMaps.map_url(
|
7
|
+
location_name: 'name with \\stuff/',
|
8
|
+
location: 'location with \\stuff/')
|
9
|
+
|
10
|
+
map_url.should eql(
|
11
|
+
'http://maps.yahoo.com#q=' +
|
12
|
+
'location+with+%5Cstuff%2F' +
|
13
|
+
'&tt=' +
|
14
|
+
'name+with+%5Cstuff%2F'
|
15
|
+
)
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'rspectacular'
|
2
|
+
require 'pinpoint/mapable'
|
3
|
+
|
4
|
+
class MyMapableClass
|
5
|
+
include Pinpoint::Mapable
|
6
|
+
end
|
7
|
+
|
8
|
+
describe Pinpoint::Mapable do
|
9
|
+
let(:mapable) { MyMapableClass.new }
|
10
|
+
|
11
|
+
it 'can locate the map URL for itself via a given service' do
|
12
|
+
Pinpoint::MapableService::GoogleMaps.should_receive(:map_url)
|
13
|
+
.with(location_name: 'my_name',
|
14
|
+
location: 'my_location')
|
15
|
+
.and_return('map_url')
|
16
|
+
|
17
|
+
mapable.should_receive(:to_s).and_return 'my_location'
|
18
|
+
mapable.should_receive(:name).and_return 'my_name'
|
19
|
+
|
20
|
+
mapable.map_url(:via => :google_maps)
|
21
|
+
end
|
22
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pinpoint
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -100,6 +100,10 @@ files:
|
|
100
100
|
- lib/pinpoint/format/tokenizer.rb
|
101
101
|
- lib/pinpoint/format.rb
|
102
102
|
- lib/pinpoint/formatter.rb
|
103
|
+
- lib/pinpoint/mapable.rb
|
104
|
+
- lib/pinpoint/mapable_services/google_maps.rb
|
105
|
+
- lib/pinpoint/mapable_services/mapquest.rb
|
106
|
+
- lib/pinpoint/mapable_services/yahoo_maps.rb
|
103
107
|
- lib/pinpoint/model_support.rb
|
104
108
|
- lib/pinpoint/validations.rb
|
105
109
|
- lib/pinpoint/version.rb
|
@@ -117,6 +121,10 @@ files:
|
|
117
121
|
- spec/format/tokenizer_spec.rb
|
118
122
|
- spec/format_spec.rb
|
119
123
|
- spec/formatter_spec.rb
|
124
|
+
- spec/mapable_services/google_maps_spec.rb
|
125
|
+
- spec/mapable_services/mapquest_spec.rb
|
126
|
+
- spec/mapable_services/yahoo_maps_spec.rb
|
127
|
+
- spec/mapable_spec.rb
|
120
128
|
- spec/model_support_spec.rb
|
121
129
|
- spec/spec_helper.rb
|
122
130
|
- spec/support/focused.rb
|
@@ -158,6 +166,10 @@ test_files:
|
|
158
166
|
- spec/format/tokenizer_spec.rb
|
159
167
|
- spec/format_spec.rb
|
160
168
|
- spec/formatter_spec.rb
|
169
|
+
- spec/mapable_services/google_maps_spec.rb
|
170
|
+
- spec/mapable_services/mapquest_spec.rb
|
171
|
+
- spec/mapable_services/yahoo_maps_spec.rb
|
172
|
+
- spec/mapable_spec.rb
|
161
173
|
- spec/model_support_spec.rb
|
162
174
|
- spec/spec_helper.rb
|
163
175
|
- spec/support/focused.rb
|