gmaps_directions 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/.rspec +1 -0
- data/Gemfile +14 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +70 -0
- data/Rakefile +56 -0
- data/VERSION +1 -0
- data/lib/gmaps_directions.rb +79 -0
- data/spec/gmaps_directions_spec.rb +147 -0
- data/spec/spec_helper.rb +11 -0
- metadata +218 -0
data/.document
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/Gemfile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
source "http://rubygems.org"
|
2
|
+
# Add dependencies required to use your gem here.
|
3
|
+
# Example:
|
4
|
+
gem "activesupport", "~> 3.0.4"
|
5
|
+
gem "yajl-ruby", "~> 0.8.1", :require => "yajl"
|
6
|
+
|
7
|
+
# Add dependencies to develop your gem here.
|
8
|
+
# Include everything needed to run rake, tests, features, etc.
|
9
|
+
group :development do
|
10
|
+
gem "rspec", "~> 2.5.0"
|
11
|
+
gem "bundler", "~> 1.0.0"
|
12
|
+
gem "jeweler", "~> 1.5.2"
|
13
|
+
gem "rcov", ">= 0"
|
14
|
+
end
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2011 Dirk Breuer
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
= gmaps_directions
|
2
|
+
|
3
|
+
Sometimes you need to calculate the directions between two different points via
|
4
|
+
Google Maps on your server-side and not on the client. The Google Maps API for
|
5
|
+
that is dead simple and due to this I wrapped calling the API in this little gem.
|
6
|
+
|
7
|
+
The gem talks to the Google Maps Directions Web Service API. Detailed documentation
|
8
|
+
for that can be found here: http://code.google.com/apis/maps/documentation/directions/
|
9
|
+
This API allows up to 2.500 direction requests. At the current version there is no
|
10
|
+
way to use the non-public interface for Google Premium Maps customers. If you want that
|
11
|
+
feature right now drop me a patch or wait until I need it too (which might not take too
|
12
|
+
long anyway).
|
13
|
+
|
14
|
+
One last thing for the interested: The gem consumes the JSON response format from Google
|
15
|
+
API and parses it through the Ruby Yajl JSON parser.
|
16
|
+
|
17
|
+
== Example
|
18
|
+
|
19
|
+
Here is an example of how to use the Gem. As you can see, it is really more than simple:
|
20
|
+
|
21
|
+
require 'rubygems'
|
22
|
+
require 'gmaps_directions'
|
23
|
+
|
24
|
+
route = GmapsDirections::API.find_directions :from => "1 Infinite Loop, Cupertino",
|
25
|
+
:to => "1200 Park Avenue, Emmerville"
|
26
|
+
|
27
|
+
route.duration.should == 3462
|
28
|
+
route.formatted_duration.should == "58 mins"
|
29
|
+
route.distance.should == 84826
|
30
|
+
route.formatted_distance.should == "84.8 km"
|
31
|
+
route.start_address.should == "1 Infinite Loop, Cupertino, CA 95014, USA"
|
32
|
+
route.end_address.should == "1200 Park Ave, Emeryville, CA 94608, USA"
|
33
|
+
route.start_location.should == { "lat" => 37.3316900, "lng" => -122.0312600 }
|
34
|
+
route.end_location.should == { "lat" => 37.8317100, "lng" => -122.2833000 }
|
35
|
+
route.status.should == "OK"
|
36
|
+
|
37
|
+
== Configuration
|
38
|
+
|
39
|
+
Despite the fact that you cannot provide an API-Key I already built some kind of configuration.
|
40
|
+
In detail you can configure the following options when talking to Google:
|
41
|
+
|
42
|
+
* The type of transportation to use when calculate the direction ('driving', 'walking', 'bicycling')
|
43
|
+
* The unit system to use ('metric', 'imperial')
|
44
|
+
* The language in which the results is outputted (this includes number formats)
|
45
|
+
* The availability of a GPS-sensor
|
46
|
+
* Should there alternative routes be calculated
|
47
|
+
|
48
|
+
The following snippet shows how to configure those options and what are the defaults:
|
49
|
+
|
50
|
+
GmapsDirections::Config.mode = :driving
|
51
|
+
GmapsDirections::Config.units = :metric
|
52
|
+
GmapsDirections::Config.language = :en
|
53
|
+
GmapsDirections::Config.sensor = false
|
54
|
+
GmapsDirections::Config.alternatives = false
|
55
|
+
|
56
|
+
== Contributing to gmaps_directions
|
57
|
+
|
58
|
+
* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
|
59
|
+
* Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
|
60
|
+
* Fork the project
|
61
|
+
* Start a feature/bugfix branch
|
62
|
+
* Commit and push until you are happy with your contribution
|
63
|
+
* Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
|
64
|
+
* Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
|
65
|
+
|
66
|
+
== Copyright
|
67
|
+
|
68
|
+
Copyright (c) 2011 Dirk Breuer. See LICENSE.txt for
|
69
|
+
further details.
|
70
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
begin
|
4
|
+
Bundler.setup(:default, :development)
|
5
|
+
rescue Bundler::BundlerError => e
|
6
|
+
$stderr.puts e.message
|
7
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
+
exit e.status_code
|
9
|
+
end
|
10
|
+
require 'rake'
|
11
|
+
|
12
|
+
require 'jeweler'
|
13
|
+
Jeweler::Tasks.new do |gem|
|
14
|
+
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
15
|
+
gem.name = "gmaps_directions"
|
16
|
+
gem.homepage = "http://github.com/railsbros_dirk/gmaps_directions"
|
17
|
+
gem.license = "MIT"
|
18
|
+
gem.summary = %Q{A simple Gem to use the Google Maps distance API from Ruby}
|
19
|
+
gem.description = %Q{
|
20
|
+
Sometimes you need to calculate the directions between two different points
|
21
|
+
via Google Maps on your server-side and not on the client. The Google Maps
|
22
|
+
API for that is dead simple and due to this I wrapped calling the API in
|
23
|
+
this little gem.
|
24
|
+
}
|
25
|
+
gem.email = "dirk.breuer@gmail.com"
|
26
|
+
gem.authors = ["Dirk Breuer"]
|
27
|
+
# Include your dependencies below. Runtime dependencies are required when using your gem,
|
28
|
+
# and development dependencies are only needed for development (ie running rake tasks, tests, etc)
|
29
|
+
gem.add_runtime_dependency 'yajl-ruby', '~> 0.8.1'
|
30
|
+
gem.add_runtime_dependency 'activesupport', '~> 3.0.4'
|
31
|
+
gem.add_development_dependency 'rspec', '~> 2.5'
|
32
|
+
end
|
33
|
+
Jeweler::RubygemsDotOrgTasks.new
|
34
|
+
|
35
|
+
require 'rspec/core'
|
36
|
+
require 'rspec/core/rake_task'
|
37
|
+
RSpec::Core::RakeTask.new(:spec) do |spec|
|
38
|
+
spec.pattern = FileList['spec/**/*_spec.rb']
|
39
|
+
end
|
40
|
+
|
41
|
+
RSpec::Core::RakeTask.new(:rcov) do |spec|
|
42
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
43
|
+
spec.rcov = true
|
44
|
+
end
|
45
|
+
|
46
|
+
task :default => :spec
|
47
|
+
|
48
|
+
require 'rake/rdoctask'
|
49
|
+
Rake::RDocTask.new do |rdoc|
|
50
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
51
|
+
|
52
|
+
rdoc.rdoc_dir = 'rdoc'
|
53
|
+
rdoc.title = "gmaps_directions #{version}"
|
54
|
+
rdoc.rdoc_files.include('README*')
|
55
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
56
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'yajl'
|
2
|
+
require 'yajl/http_stream'
|
3
|
+
require 'uri'
|
4
|
+
require 'active_support/configurable'
|
5
|
+
require 'active_support/ordered_options'
|
6
|
+
|
7
|
+
module GmapsDirections
|
8
|
+
|
9
|
+
class Config
|
10
|
+
DEFAULTS = [:mode, :driving, :units, :metric, :language, :en, :sensor, false, :alternatives, false]
|
11
|
+
|
12
|
+
class <<self
|
13
|
+
include ActiveSupport::Configurable
|
14
|
+
config_accessor :mode, :units, :language, :sensor, :alternatives
|
15
|
+
|
16
|
+
def config
|
17
|
+
@config ||= ActiveSupport::OrderedOptions[*DEFAULTS]
|
18
|
+
end
|
19
|
+
|
20
|
+
def reset_to_defaults!
|
21
|
+
@config = ActiveSupport::OrderedOptions[*DEFAULTS]
|
22
|
+
end
|
23
|
+
|
24
|
+
def to_url_options
|
25
|
+
config.inject([]) { |url_options, option| url_options << "#{option.first.to_s}=#{URI.escape(option.last.to_s)}" }.join("&")
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class API
|
31
|
+
class <<self
|
32
|
+
def find_directions(options = {})
|
33
|
+
api_driver = new(:start_address => options[:from], :end_address => options[:to])
|
34
|
+
api_driver.call_google
|
35
|
+
return Route.new(api_driver.parsed_directions_response)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
DIRECTIONS_API_BASE_URL = "http://maps.googleapis.com/maps/api/directions/json"
|
40
|
+
|
41
|
+
attr_reader :start_address, :end_address, :parsed_directions_response
|
42
|
+
|
43
|
+
def initialize(attributes)
|
44
|
+
@start_address = attributes[:start_address]
|
45
|
+
@end_address = attributes[:end_address]
|
46
|
+
end
|
47
|
+
|
48
|
+
def call_google
|
49
|
+
Yajl::HttpStream.get(directions_api_url) do |results_hash|
|
50
|
+
@parsed_directions_response = results_hash
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def directions_api_url
|
57
|
+
URI.parse("#{DIRECTIONS_API_BASE_URL}?origin=#{URI.escape(start_address)}&destination=#{URI.escape(end_address)}&#{Config.to_url_options}")
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
class Route
|
62
|
+
attr_reader :duration, :formatted_duration, :distance, :formatted_distance,
|
63
|
+
:start_address, :end_address, :start_location, :end_location,
|
64
|
+
:status
|
65
|
+
|
66
|
+
def initialize(directions_api_response_hash)
|
67
|
+
@duration = directions_api_response_hash["routes"].first["legs"].first["duration"]["value"]
|
68
|
+
@formatted_duration = directions_api_response_hash["routes"].first["legs"].first["duration"]["text"]
|
69
|
+
@distance = directions_api_response_hash["routes"].first["legs"].first["distance"]["value"]
|
70
|
+
@formatted_distance = directions_api_response_hash["routes"].first["legs"].first["distance"]["text"]
|
71
|
+
@start_address = directions_api_response_hash["routes"].first["legs"].first["start_address"]
|
72
|
+
@end_address = directions_api_response_hash["routes"].first["legs"].first["end_address"]
|
73
|
+
@start_location = directions_api_response_hash["routes"].first["legs"].first["start_location"]
|
74
|
+
@end_location = directions_api_response_hash["routes"].first["legs"].first["end_location"]
|
75
|
+
@status = directions_api_response_hash["status"]
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
@@ -0,0 +1,147 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe "GmapsDirections" do
|
4
|
+
|
5
|
+
it 'should provide a way to calculate the directions between points speficied by address' do
|
6
|
+
start_address = "Somestr. 23, 99999 Any City"
|
7
|
+
end_address = "Just Avenue 42, 11111 Sin City"
|
8
|
+
|
9
|
+
directions_api_url = URI.parse("http://maps.googleapis.com/maps/api/directions/json?origin=#{URI.encode(start_address)}&destination=#{URI.encode(end_address)}&mode=driving&units=metric&language=en&sensor=false&alternatives=false")
|
10
|
+
Yajl::HttpStream.should_receive(:get).with(directions_api_url)
|
11
|
+
GmapsDirections::Route.should_receive(:new)
|
12
|
+
|
13
|
+
GmapsDirections::API.find_directions :from => start_address, :to => end_address
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "should have a Config object" do
|
17
|
+
|
18
|
+
before(:each) do
|
19
|
+
GmapsDirections::Config.reset_to_defaults!
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should provide a way to configure some defaults when talking with the directions API' do
|
23
|
+
GmapsDirections::Config.mode = :walking
|
24
|
+
GmapsDirections::Config.mode.should == :walking
|
25
|
+
|
26
|
+
GmapsDirections::Config.units = :imperial
|
27
|
+
GmapsDirections::Config.units.should == :imperial
|
28
|
+
|
29
|
+
GmapsDirections::Config.language = :de
|
30
|
+
GmapsDirections::Config.language.should == :de
|
31
|
+
|
32
|
+
GmapsDirections::Config.sensor = true
|
33
|
+
GmapsDirections::Config.sensor.should be(true)
|
34
|
+
|
35
|
+
GmapsDirections::Config.alternatives = true
|
36
|
+
GmapsDirections::Config.alternatives.should be(true)
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'should provide a meaningful default configuration out of the box' do
|
40
|
+
GmapsDirections::Config.mode.should == :driving
|
41
|
+
GmapsDirections::Config.units.should == :metric
|
42
|
+
GmapsDirections::Config.language.should == :en
|
43
|
+
GmapsDirections::Config.sensor.should be(false)
|
44
|
+
GmapsDirections::Config.alternatives.should be(false)
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'should transform the config to URL options' do
|
48
|
+
GmapsDirections::Config.to_url_options.should == "mode=driving&units=metric&language=en&sensor=false&alternatives=false"
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
describe "should wrap Google's JSON response in a nice object and" do
|
54
|
+
|
55
|
+
before(:each) do
|
56
|
+
@route = GmapsDirections::Route.new(
|
57
|
+
{
|
58
|
+
"status" => "OK",
|
59
|
+
"routes" => [ {
|
60
|
+
"summary" => "Luxemburger Str./B265",
|
61
|
+
"legs" => [ {
|
62
|
+
"steps" => [ {
|
63
|
+
"travel_mode" => "DRIVING",
|
64
|
+
"start_location" => { "lat" => 50.9280500, "lng" => 6.9397100 },
|
65
|
+
"end_location" => { "lat" => 50.9274800, "lng" => 6.9397800 },
|
66
|
+
"polyline" => { },
|
67
|
+
"duration" => { "value" => 11, "text" => "1 min" },
|
68
|
+
"html_instructions" => "",
|
69
|
+
"distance" => { "value" => 63, "text" => "63 m" }
|
70
|
+
} ],
|
71
|
+
"duration" => {
|
72
|
+
"value" => 476,
|
73
|
+
"text" => "8 mins"
|
74
|
+
},
|
75
|
+
"distance" => {
|
76
|
+
"value" => 3166,
|
77
|
+
"text" => "3.2 km"
|
78
|
+
},
|
79
|
+
"start_location" => { "lat" => 50.9280500, "lng" => 6.9397100 },
|
80
|
+
"end_location" => { "lat" => 50.9093600, "lng" => 6.9246200 },
|
81
|
+
"start_address" => "Somestr. 23, 99999 Any City, USA",
|
82
|
+
"end_address" => "Just Avenue 42, 11111 Sin City, USA",
|
83
|
+
"via_waypoint" => [ ]
|
84
|
+
} ],
|
85
|
+
"copyrights" => "Map data ©2011 Tele Atlas",
|
86
|
+
"overview_polyline" => { },
|
87
|
+
"warnings" => [ ],
|
88
|
+
"waypoint_order" => [ ],
|
89
|
+
"bounds" => { }
|
90
|
+
} ]
|
91
|
+
}
|
92
|
+
)
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'should provide a getter to the duration' do
|
96
|
+
@route.duration.should == 476
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'should provide a getter to the localized and formatted duration' do
|
100
|
+
@route.formatted_duration.should == "8 mins"
|
101
|
+
end
|
102
|
+
|
103
|
+
it 'should provide a getter to the distance' do
|
104
|
+
@route.distance.should == 3166
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'should provide a getter to the localized and formatted distance' do
|
108
|
+
@route.formatted_distance.should == "3.2 km"
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'should provide a getter to the submitted start address' do
|
112
|
+
@route.start_address.should == "Somestr. 23, 99999 Any City, USA"
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'should provide a getter to the submitted end address' do
|
116
|
+
@route.end_address.should == "Just Avenue 42, 11111 Sin City, USA"
|
117
|
+
end
|
118
|
+
|
119
|
+
it 'should provide a getter to the geocoordinates of the start address' do
|
120
|
+
@route.start_location.should == { "lat" => 50.9280500, "lng" => 6.9397100 }
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'should provide a getter to the geocoordinates of the end address' do
|
124
|
+
@route.end_location.should == { "lat" => 50.9093600, "lng" => 6.9246200 }
|
125
|
+
end
|
126
|
+
|
127
|
+
it 'should provide a getter to status of the Google response' do
|
128
|
+
@route.status.should == "OK"
|
129
|
+
end
|
130
|
+
|
131
|
+
end
|
132
|
+
|
133
|
+
it 'should perform a real request see if everything is parsed correctly' do
|
134
|
+
route = GmapsDirections::API.find_directions :from => "1 Infinite Loop, Cupertino",
|
135
|
+
:to => "1200 Park Avenue, Emmerville"
|
136
|
+
|
137
|
+
route.duration.should == 3462
|
138
|
+
route.formatted_duration.should == "58 mins"
|
139
|
+
route.distance.should == 84826
|
140
|
+
route.formatted_distance.should == "84.8 km"
|
141
|
+
route.start_address.should == "1 Infinite Loop, Cupertino, CA 95014, USA"
|
142
|
+
route.end_address.should == "1200 Park Ave, Emeryville, CA 94608, USA"
|
143
|
+
route.start_location.should == { "lat" => 37.3316900, "lng" => -122.0312600 }
|
144
|
+
route.end_location.should == { "lat" => 37.8317100, "lng" => -122.2833000 }
|
145
|
+
route.status.should == "OK"
|
146
|
+
end
|
147
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
+
require 'rspec'
|
4
|
+
require 'gmaps_directions'
|
5
|
+
|
6
|
+
# Requires supporting files with custom matchers and macros, etc,
|
7
|
+
# in ./support/ and its subdirectories.
|
8
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
9
|
+
|
10
|
+
RSpec.configure do |config|
|
11
|
+
end
|
metadata
ADDED
@@ -0,0 +1,218 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gmaps_directions
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Dirk Breuer
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-03-13 00:00:00 +01:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
prerelease: false
|
23
|
+
type: :runtime
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 15
|
30
|
+
segments:
|
31
|
+
- 3
|
32
|
+
- 0
|
33
|
+
- 4
|
34
|
+
version: 3.0.4
|
35
|
+
name: activesupport
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
prerelease: false
|
39
|
+
type: :runtime
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
hash: 61
|
46
|
+
segments:
|
47
|
+
- 0
|
48
|
+
- 8
|
49
|
+
- 1
|
50
|
+
version: 0.8.1
|
51
|
+
name: yajl-ruby
|
52
|
+
version_requirements: *id002
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
prerelease: false
|
55
|
+
type: :development
|
56
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
hash: 27
|
62
|
+
segments:
|
63
|
+
- 2
|
64
|
+
- 5
|
65
|
+
- 0
|
66
|
+
version: 2.5.0
|
67
|
+
name: rspec
|
68
|
+
version_requirements: *id003
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
prerelease: false
|
71
|
+
type: :development
|
72
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
hash: 23
|
78
|
+
segments:
|
79
|
+
- 1
|
80
|
+
- 0
|
81
|
+
- 0
|
82
|
+
version: 1.0.0
|
83
|
+
name: bundler
|
84
|
+
version_requirements: *id004
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
prerelease: false
|
87
|
+
type: :development
|
88
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
hash: 7
|
94
|
+
segments:
|
95
|
+
- 1
|
96
|
+
- 5
|
97
|
+
- 2
|
98
|
+
version: 1.5.2
|
99
|
+
name: jeweler
|
100
|
+
version_requirements: *id005
|
101
|
+
- !ruby/object:Gem::Dependency
|
102
|
+
prerelease: false
|
103
|
+
type: :development
|
104
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
hash: 3
|
110
|
+
segments:
|
111
|
+
- 0
|
112
|
+
version: "0"
|
113
|
+
name: rcov
|
114
|
+
version_requirements: *id006
|
115
|
+
- !ruby/object:Gem::Dependency
|
116
|
+
prerelease: false
|
117
|
+
type: :runtime
|
118
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
119
|
+
none: false
|
120
|
+
requirements:
|
121
|
+
- - ~>
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
hash: 61
|
124
|
+
segments:
|
125
|
+
- 0
|
126
|
+
- 8
|
127
|
+
- 1
|
128
|
+
version: 0.8.1
|
129
|
+
name: yajl-ruby
|
130
|
+
version_requirements: *id007
|
131
|
+
- !ruby/object:Gem::Dependency
|
132
|
+
prerelease: false
|
133
|
+
type: :runtime
|
134
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
135
|
+
none: false
|
136
|
+
requirements:
|
137
|
+
- - ~>
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
hash: 15
|
140
|
+
segments:
|
141
|
+
- 3
|
142
|
+
- 0
|
143
|
+
- 4
|
144
|
+
version: 3.0.4
|
145
|
+
name: activesupport
|
146
|
+
version_requirements: *id008
|
147
|
+
- !ruby/object:Gem::Dependency
|
148
|
+
prerelease: false
|
149
|
+
type: :development
|
150
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
151
|
+
none: false
|
152
|
+
requirements:
|
153
|
+
- - ~>
|
154
|
+
- !ruby/object:Gem::Version
|
155
|
+
hash: 9
|
156
|
+
segments:
|
157
|
+
- 2
|
158
|
+
- 5
|
159
|
+
version: "2.5"
|
160
|
+
name: rspec
|
161
|
+
version_requirements: *id009
|
162
|
+
description: "\n Sometimes you need to calculate the directions between two different points\n via Google Maps on your server-side and not on the client. The Google Maps\n API for that is dead simple and due to this I wrapped calling the API in\n this little gem.\n "
|
163
|
+
email: dirk.breuer@gmail.com
|
164
|
+
executables: []
|
165
|
+
|
166
|
+
extensions: []
|
167
|
+
|
168
|
+
extra_rdoc_files:
|
169
|
+
- LICENSE.txt
|
170
|
+
- README.rdoc
|
171
|
+
files:
|
172
|
+
- .document
|
173
|
+
- .rspec
|
174
|
+
- Gemfile
|
175
|
+
- LICENSE.txt
|
176
|
+
- README.rdoc
|
177
|
+
- Rakefile
|
178
|
+
- VERSION
|
179
|
+
- lib/gmaps_directions.rb
|
180
|
+
- spec/gmaps_directions_spec.rb
|
181
|
+
- spec/spec_helper.rb
|
182
|
+
has_rdoc: true
|
183
|
+
homepage: http://github.com/railsbros_dirk/gmaps_directions
|
184
|
+
licenses:
|
185
|
+
- MIT
|
186
|
+
post_install_message:
|
187
|
+
rdoc_options: []
|
188
|
+
|
189
|
+
require_paths:
|
190
|
+
- lib
|
191
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
192
|
+
none: false
|
193
|
+
requirements:
|
194
|
+
- - ">="
|
195
|
+
- !ruby/object:Gem::Version
|
196
|
+
hash: 3
|
197
|
+
segments:
|
198
|
+
- 0
|
199
|
+
version: "0"
|
200
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
201
|
+
none: false
|
202
|
+
requirements:
|
203
|
+
- - ">="
|
204
|
+
- !ruby/object:Gem::Version
|
205
|
+
hash: 3
|
206
|
+
segments:
|
207
|
+
- 0
|
208
|
+
version: "0"
|
209
|
+
requirements: []
|
210
|
+
|
211
|
+
rubyforge_project:
|
212
|
+
rubygems_version: 1.6.2
|
213
|
+
signing_key:
|
214
|
+
specification_version: 3
|
215
|
+
summary: A simple Gem to use the Google Maps distance API from Ruby
|
216
|
+
test_files:
|
217
|
+
- spec/gmaps_directions_spec.rb
|
218
|
+
- spec/spec_helper.rb
|