gmaps_directions 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -5,7 +5,7 @@ Google Maps on your server-side and not on the client. The Google Maps API for
5
5
  that is dead simple and due to this I wrapped calling the API in this little gem.
6
6
 
7
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/
8
+ for that can be found here[http://code.google.com/apis/maps/documentation/directions]
9
9
  This API allows up to 2.500 direction requests. At the current version there is no
10
10
  way to use the non-public interface for Google Premium Maps customers. If you want that
11
11
  feature right now drop me a patch or wait until I need it too (which might not take too
@@ -21,16 +21,17 @@ Here is an example of how to use the Gem. As you can see, it is really more than
21
21
  require 'rubygems'
22
22
  require 'gmaps_directions'
23
23
 
24
- route = GmapsDirections::API.find_directions :from => "1 Infinite Loop, Cupertino",
24
+ routes = GmapsDirections::API.find_directions :from => "1 Infinite Loop, Cupertino",
25
25
  :to => "1200 Park Avenue, Emmerville"
26
+ route = routes.first
26
27
 
27
- route.duration.should == 3462
28
+ route.duration.should == 3482
28
29
  route.formatted_duration.should == "58 mins"
29
- route.distance.should == 84826
30
+ route.distance.should == 84827
30
31
  route.formatted_distance.should == "84.8 km"
31
32
  route.start_address.should == "1 Infinite Loop, Cupertino, CA 95014, USA"
32
33
  route.end_address.should == "1200 Park Ave, Emeryville, CA 94608, USA"
33
- route.start_location.should == { "lat" => 37.3316900, "lng" => -122.0312600 }
34
+ route.start_location.should == { "lng" => -122.03125, "lat" => 37.3317 }
34
35
  route.end_location.should == { "lat" => 37.8317100, "lng" => -122.2833000 }
35
36
  route.status.should == "OK"
36
37
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
@@ -0,0 +1,83 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{gmaps_directions}
8
+ s.version = "0.2.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Dirk Breuer"]
12
+ s.date = %q{2011-07-12}
13
+ s.description = %q{
14
+ Sometimes you need to calculate the directions between two different points
15
+ via Google Maps on your server-side and not on the client. The Google Maps
16
+ API for that is dead simple and due to this I wrapped calling the API in
17
+ this little gem.
18
+ }
19
+ s.email = %q{dirk.breuer@gmail.com}
20
+ s.extra_rdoc_files = [
21
+ "LICENSE.txt",
22
+ "README.rdoc"
23
+ ]
24
+ s.files = [
25
+ ".document",
26
+ ".rspec",
27
+ "Gemfile",
28
+ "LICENSE.txt",
29
+ "README.rdoc",
30
+ "Rakefile",
31
+ "VERSION",
32
+ "gmaps_directions.gemspec",
33
+ "lib/gmaps_directions.rb",
34
+ "spec/gmaps_directions_spec.rb",
35
+ "spec/spec_helper.rb"
36
+ ]
37
+ s.homepage = %q{http://github.com/railsbros_dirk/gmaps_directions}
38
+ s.licenses = ["MIT"]
39
+ s.require_paths = ["lib"]
40
+ s.rubygems_version = %q{1.6.2}
41
+ s.summary = %q{A simple Gem to use the Google Maps distance API from Ruby}
42
+ s.test_files = [
43
+ "spec/gmaps_directions_spec.rb",
44
+ "spec/spec_helper.rb"
45
+ ]
46
+
47
+ if s.respond_to? :specification_version then
48
+ s.specification_version = 3
49
+
50
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
51
+ s.add_runtime_dependency(%q<activesupport>, ["~> 3.0.4"])
52
+ s.add_runtime_dependency(%q<yajl-ruby>, ["~> 0.8.1"])
53
+ s.add_development_dependency(%q<rspec>, ["~> 2.5.0"])
54
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
55
+ s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
56
+ s.add_development_dependency(%q<rcov>, [">= 0"])
57
+ s.add_runtime_dependency(%q<yajl-ruby>, ["~> 0.8.1"])
58
+ s.add_runtime_dependency(%q<activesupport>, ["~> 3.0.4"])
59
+ s.add_development_dependency(%q<rspec>, ["~> 2.5"])
60
+ else
61
+ s.add_dependency(%q<activesupport>, ["~> 3.0.4"])
62
+ s.add_dependency(%q<yajl-ruby>, ["~> 0.8.1"])
63
+ s.add_dependency(%q<rspec>, ["~> 2.5.0"])
64
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
65
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
66
+ s.add_dependency(%q<rcov>, [">= 0"])
67
+ s.add_dependency(%q<yajl-ruby>, ["~> 0.8.1"])
68
+ s.add_dependency(%q<activesupport>, ["~> 3.0.4"])
69
+ s.add_dependency(%q<rspec>, ["~> 2.5"])
70
+ end
71
+ else
72
+ s.add_dependency(%q<activesupport>, ["~> 3.0.4"])
73
+ s.add_dependency(%q<yajl-ruby>, ["~> 0.8.1"])
74
+ s.add_dependency(%q<rspec>, ["~> 2.5.0"])
75
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
76
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
77
+ s.add_dependency(%q<rcov>, [">= 0"])
78
+ s.add_dependency(%q<yajl-ruby>, ["~> 0.8.1"])
79
+ s.add_dependency(%q<activesupport>, ["~> 3.0.4"])
80
+ s.add_dependency(%q<rspec>, ["~> 2.5"])
81
+ end
82
+ end
83
+
@@ -1,6 +1,7 @@
1
1
  require 'yajl'
2
2
  require 'yajl/http_stream'
3
3
  require 'uri'
4
+ require 'active_support/core_ext/object/blank'
4
5
  require 'active_support/configurable'
5
6
  require 'active_support/ordered_options'
6
7
 
@@ -32,7 +33,13 @@ module GmapsDirections
32
33
  def find_directions(options = {})
33
34
  api_driver = new(:start_address => options[:from], :end_address => options[:to])
34
35
  api_driver.call_google
35
- return Route.new(api_driver.parsed_directions_response)
36
+ if api_driver.parsed_directions_response.present? && api_driver.parsed_directions_response["routes"].present?
37
+ return api_driver.parsed_directions_response["routes"].inject([]) do |routes, route_hash|
38
+ routes << Route.new(route_hash, api_driver.parsed_directions_response["status"])
39
+ end
40
+ else
41
+ return []
42
+ end
36
43
  end
37
44
  end
38
45
 
@@ -63,16 +70,16 @@ module GmapsDirections
63
70
  :start_address, :end_address, :start_location, :end_location,
64
71
  :status
65
72
 
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"]
73
+ def initialize(gmaps_route_hash, status)
74
+ @duration = gmaps_route_hash["legs"].first["duration"]["value"]
75
+ @formatted_duration = gmaps_route_hash["legs"].first["duration"]["text"]
76
+ @distance = gmaps_route_hash["legs"].first["distance"]["value"]
77
+ @formatted_distance = gmaps_route_hash["legs"].first["distance"]["text"]
78
+ @start_address = gmaps_route_hash["legs"].first["start_address"]
79
+ @end_address = gmaps_route_hash["legs"].first["end_address"]
80
+ @start_location = gmaps_route_hash["legs"].first["start_location"]
81
+ @end_location = gmaps_route_hash["legs"].first["end_location"]
82
+ @status = status
76
83
  end
77
84
  end
78
85
 
@@ -7,7 +7,7 @@ describe "GmapsDirections" do
7
7
  end_address = "Just Avenue 42, 11111 Sin City"
8
8
 
9
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)
10
+ Yajl::HttpStream.should_receive(:get).with(directions_api_url).and_yield({"routes" => [double("route_hash")], "status" => "OK"})
11
11
  GmapsDirections::Route.should_receive(:new)
12
12
 
13
13
  GmapsDirections::API.find_directions :from => start_address, :to => end_address
@@ -55,40 +55,38 @@ describe "GmapsDirections" do
55
55
  before(:each) do
56
56
  @route = GmapsDirections::Route.new(
57
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
- },
58
+ "summary" => "Luxemburger Str./B265",
59
+ "legs" => [ {
60
+ "steps" => [ {
61
+ "travel_mode" => "DRIVING",
79
62
  "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" => [ ]
63
+ "end_location" => { "lat" => 50.9274800, "lng" => 6.9397800 },
64
+ "polyline" => { },
65
+ "duration" => { "value" => 11, "text" => "1 min" },
66
+ "html_instructions" => "",
67
+ "distance" => { "value" => 63, "text" => "63 m" }
84
68
  } ],
85
- "copyrights" => "Map data ©2011 Tele Atlas",
86
- "overview_polyline" => { },
87
- "warnings" => [ ],
88
- "waypoint_order" => [ ],
89
- "bounds" => { }
90
- } ]
91
- }
69
+ "duration" => {
70
+ "value" => 476,
71
+ "text" => "8 mins"
72
+ },
73
+ "distance" => {
74
+ "value" => 3166,
75
+ "text" => "3.2 km"
76
+ },
77
+ "start_location" => { "lat" => 50.9280500, "lng" => 6.9397100 },
78
+ "end_location" => { "lat" => 50.9093600, "lng" => 6.9246200 },
79
+ "start_address" => "Somestr. 23, 99999 Any City, USA",
80
+ "end_address" => "Just Avenue 42, 11111 Sin City, USA",
81
+ "via_waypoint" => [ ]
82
+ } ],
83
+ "copyrights" => "Map data ©2011 Tele Atlas",
84
+ "overview_polyline" => { },
85
+ "warnings" => [ ],
86
+ "waypoint_order" => [ ],
87
+ "bounds" => { }
88
+ },
89
+ "OK"
92
90
  )
93
91
  end
94
92
 
@@ -131,16 +129,18 @@ describe "GmapsDirections" do
131
129
  end
132
130
 
133
131
  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"
132
+ routes = GmapsDirections::API.find_directions :from => "1 Infinite Loop, Cupertino",
133
+ :to => "1200 Park Avenue, Emmerville"
136
134
 
137
- route.duration.should == 3462
135
+ route = routes.first
136
+
137
+ route.duration.should == 3482
138
138
  route.formatted_duration.should == "58 mins"
139
- route.distance.should == 84826
139
+ route.distance.should == 84827
140
140
  route.formatted_distance.should == "84.8 km"
141
141
  route.start_address.should == "1 Infinite Loop, Cupertino, CA 95014, USA"
142
142
  route.end_address.should == "1200 Park Ave, Emeryville, CA 94608, USA"
143
- route.start_location.should == { "lat" => 37.3316900, "lng" => -122.0312600 }
143
+ route.start_location.should == { "lng" => -122.03125, "lat" => 37.3317 }
144
144
  route.end_location.should == { "lat" => 37.8317100, "lng" => -122.2833000 }
145
145
  route.status.should == "OK"
146
146
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gmaps_directions
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 1
8
+ - 2
9
9
  - 0
10
- version: 0.1.0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Dirk Breuer
@@ -15,13 +15,14 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-03-13 00:00:00 +01:00
18
+ date: 2011-07-12 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
+ name: activesupport
22
23
  prerelease: false
23
24
  type: :runtime
24
- requirement: &id001 !ruby/object:Gem::Requirement
25
+ version_requirements: &id001 !ruby/object:Gem::Requirement
25
26
  none: false
26
27
  requirements:
27
28
  - - ~>
@@ -32,12 +33,12 @@ dependencies:
32
33
  - 0
33
34
  - 4
34
35
  version: 3.0.4
35
- name: activesupport
36
- version_requirements: *id001
36
+ requirement: *id001
37
37
  - !ruby/object:Gem::Dependency
38
+ name: yajl-ruby
38
39
  prerelease: false
39
40
  type: :runtime
40
- requirement: &id002 !ruby/object:Gem::Requirement
41
+ version_requirements: &id002 !ruby/object:Gem::Requirement
41
42
  none: false
42
43
  requirements:
43
44
  - - ~>
@@ -48,12 +49,12 @@ dependencies:
48
49
  - 8
49
50
  - 1
50
51
  version: 0.8.1
51
- name: yajl-ruby
52
- version_requirements: *id002
52
+ requirement: *id002
53
53
  - !ruby/object:Gem::Dependency
54
+ name: rspec
54
55
  prerelease: false
55
56
  type: :development
56
- requirement: &id003 !ruby/object:Gem::Requirement
57
+ version_requirements: &id003 !ruby/object:Gem::Requirement
57
58
  none: false
58
59
  requirements:
59
60
  - - ~>
@@ -64,12 +65,12 @@ dependencies:
64
65
  - 5
65
66
  - 0
66
67
  version: 2.5.0
67
- name: rspec
68
- version_requirements: *id003
68
+ requirement: *id003
69
69
  - !ruby/object:Gem::Dependency
70
+ name: bundler
70
71
  prerelease: false
71
72
  type: :development
72
- requirement: &id004 !ruby/object:Gem::Requirement
73
+ version_requirements: &id004 !ruby/object:Gem::Requirement
73
74
  none: false
74
75
  requirements:
75
76
  - - ~>
@@ -80,12 +81,12 @@ dependencies:
80
81
  - 0
81
82
  - 0
82
83
  version: 1.0.0
83
- name: bundler
84
- version_requirements: *id004
84
+ requirement: *id004
85
85
  - !ruby/object:Gem::Dependency
86
+ name: jeweler
86
87
  prerelease: false
87
88
  type: :development
88
- requirement: &id005 !ruby/object:Gem::Requirement
89
+ version_requirements: &id005 !ruby/object:Gem::Requirement
89
90
  none: false
90
91
  requirements:
91
92
  - - ~>
@@ -96,12 +97,12 @@ dependencies:
96
97
  - 5
97
98
  - 2
98
99
  version: 1.5.2
99
- name: jeweler
100
- version_requirements: *id005
100
+ requirement: *id005
101
101
  - !ruby/object:Gem::Dependency
102
+ name: rcov
102
103
  prerelease: false
103
104
  type: :development
104
- requirement: &id006 !ruby/object:Gem::Requirement
105
+ version_requirements: &id006 !ruby/object:Gem::Requirement
105
106
  none: false
106
107
  requirements:
107
108
  - - ">="
@@ -110,12 +111,12 @@ dependencies:
110
111
  segments:
111
112
  - 0
112
113
  version: "0"
113
- name: rcov
114
- version_requirements: *id006
114
+ requirement: *id006
115
115
  - !ruby/object:Gem::Dependency
116
+ name: yajl-ruby
116
117
  prerelease: false
117
118
  type: :runtime
118
- requirement: &id007 !ruby/object:Gem::Requirement
119
+ version_requirements: &id007 !ruby/object:Gem::Requirement
119
120
  none: false
120
121
  requirements:
121
122
  - - ~>
@@ -126,12 +127,12 @@ dependencies:
126
127
  - 8
127
128
  - 1
128
129
  version: 0.8.1
129
- name: yajl-ruby
130
- version_requirements: *id007
130
+ requirement: *id007
131
131
  - !ruby/object:Gem::Dependency
132
+ name: activesupport
132
133
  prerelease: false
133
134
  type: :runtime
134
- requirement: &id008 !ruby/object:Gem::Requirement
135
+ version_requirements: &id008 !ruby/object:Gem::Requirement
135
136
  none: false
136
137
  requirements:
137
138
  - - ~>
@@ -142,12 +143,12 @@ dependencies:
142
143
  - 0
143
144
  - 4
144
145
  version: 3.0.4
145
- name: activesupport
146
- version_requirements: *id008
146
+ requirement: *id008
147
147
  - !ruby/object:Gem::Dependency
148
+ name: rspec
148
149
  prerelease: false
149
150
  type: :development
150
- requirement: &id009 !ruby/object:Gem::Requirement
151
+ version_requirements: &id009 !ruby/object:Gem::Requirement
151
152
  none: false
152
153
  requirements:
153
154
  - - ~>
@@ -157,8 +158,7 @@ dependencies:
157
158
  - 2
158
159
  - 5
159
160
  version: "2.5"
160
- name: rspec
161
- version_requirements: *id009
161
+ requirement: *id009
162
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
163
  email: dirk.breuer@gmail.com
164
164
  executables: []
@@ -176,6 +176,7 @@ files:
176
176
  - README.rdoc
177
177
  - Rakefile
178
178
  - VERSION
179
+ - gmaps_directions.gemspec
179
180
  - lib/gmaps_directions.rb
180
181
  - spec/gmaps_directions_spec.rb
181
182
  - spec/spec_helper.rb