periplus 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.
@@ -1,17 +1,23 @@
1
1
  = periplus
2
2
 
3
- Bing Maps REST API client.
3
+ Simple Bing Maps REST API client.
4
+
5
+ Currently supports:
6
+
7
+ * Routing
8
+ * Geocoding
9
+ * Mapping
4
10
 
5
11
  == Use it
6
12
  require 'periplus'
7
13
 
8
- my_request = Periplus::Request.new 'my_bing_key'
9
- response = my_request.route [{:street => "1600 Pennsylvania Ave.",
10
- :city => "Washington",
11
- :state => "DC",
12
- :postal_code => "20500"},
13
- {:postal_code => "90210"}],
14
- :distanceUnit => :mi
14
+ response = Periplus.route_details 'my_bing_key',
15
+ [{:street => "1600 Pennsylvania Ave.",
16
+ :city => "Washington",
17
+ :state => "DC",
18
+ :postal_code => "20500"},
19
+ {:postal_code => "90210"}],
20
+ :distanceUnit => :mi
15
21
 
16
22
  puts "#{response.distance} #{response.distance_units.to_s}.pluralize, #{response.duration} seconds"
17
23
  # "2665.06415 miles, 137797 seconds"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.3.0
@@ -8,6 +8,16 @@ module Periplus
8
8
  include HTTParty
9
9
  format :json
10
10
 
11
+ @verbose = false
12
+
13
+ def self.verbose=(value)
14
+ @verbose = value
15
+ end
16
+
17
+ def self.verbose
18
+ @verbose
19
+ end
20
+
11
21
  def self.route_details(key, waypoints, options = {})
12
22
  request = Request.new key
13
23
  url = request.route_details_url waypoints, options
@@ -20,13 +30,13 @@ module Periplus
20
30
  Location.new (get url)
21
31
  end
22
32
 
23
- def self.route_map_url(key, waypoints, options = {})
33
+ def self.route_map_url(key, waypoints, pushpins = [], options = {})
24
34
  request = Request.new key
25
- request.route_map_url waypoints, options
35
+ request.route_map_url waypoints, pushpins, options
26
36
  end
27
37
 
28
- def self.address_map_url(key, address, options = {})
38
+ def self.address_map_url(key, address, pushpins = [], options = {})
29
39
  request = Request.new key
30
- request.address_map_url address, options
40
+ request.address_map_url address, pushpins, options
31
41
  end
32
42
  end
@@ -1,13 +1,11 @@
1
+ require 'pp'
2
+
1
3
  module Periplus
2
4
  class BingResponse
3
5
  def initialize(httparty_response)
4
6
  @response = httparty_response
5
7
 
6
- if @response.response.kind_of? Net::HTTPClientError
7
- http_code = @response.response.code
8
- http_message = @response.response.message
9
- raise "An error has occurred communicating with the Bing Maps service. HTTP Status: #{http_code} (#{http_message})"
10
- end
8
+ raise error if @response.response.kind_of? Net::HTTPClientError
11
9
 
12
10
  parse
13
11
  end
@@ -21,5 +19,17 @@ module Periplus
21
19
 
22
20
  @primary_resource = resources.first
23
21
  end
22
+
23
+ def error
24
+ http_code = @response.response.code
25
+ http_message = @response.response.message
26
+ message = "An error has occurred communicating with the Bing Maps service. HTTP Status: #{http_code} (#{http_message})"
27
+ if Periplus.verbose
28
+ message << "\n URL: #{@response.request.path}"
29
+ message << "\n Response:"
30
+ message << "\n #{PP.pp(@response.response.body, "")}"
31
+ end
32
+ message
33
+ end
24
34
  end
25
35
  end
@@ -7,7 +7,7 @@ module Periplus
7
7
  @api_key = api_key
8
8
  end
9
9
 
10
- BING_URL = "http://dev.virtualearth.net/REST/v1/"
10
+ BING_MAPS_URL = "http://dev.virtualearth.net/REST/v1/"
11
11
  ROUTE_PATH = "Routes"
12
12
  LOCATION_PATH = "Locations"
13
13
  ROUTE_IMAGE_PATH = "Imagery/Map/Road/Routes/Driving"
@@ -17,24 +17,48 @@ module Periplus
17
17
  options = default_options(options).merge(hashify_waypoints(waypoints))
18
18
  .merge(:o => "json")
19
19
 
20
- "#{BING_URL}#{ROUTE_PATH}?#{options.to_params}"
20
+ "#{BING_MAPS_URL}#{ROUTE_PATH}?#{options.to_params}"
21
21
  end
22
22
 
23
- def route_map_url(waypoints, options = {})
23
+ # Generate a URL for a routes map.
24
+ #
25
+ # * waypoints is a list of hashes or objects with properties or keys like
26
+ # street, address, city, state, province, etc.
27
+ # * pushpins is an optional list of hashes with :latitude, :longitude,
28
+ # :type (optional -- 1, 2, 3, etc. per the bing spec) or :label (optional -- no longer than 2 characters per bing spec)
29
+ # * options is a hash that gets turned directly into url params for bing
30
+ def route_map_url(waypoints, pushpins = [], options = {})
24
31
  options = options.merge(hashify_waypoints(waypoints))
25
32
  .merge(:key => @api_key)
26
- "#{BING_URL}#{ROUTE_IMAGE_PATH}?#{options.to_params}"
33
+ base = "#{BING_MAPS_URL}#{ROUTE_IMAGE_PATH}?#{options.to_params}"
34
+ if pushpins and pushpins.length > 0
35
+ formatted_pins = pushpins.map {|p| "pp=#{format_pushpin(p)}" }.join '&'
36
+ base = "#{base}&#{formatted_pins}" if pushpins
37
+ end
38
+ base
27
39
  end
28
40
 
29
- def address_map_url(address, options = {})
41
+ # Generate a URL for a location map
42
+ #
43
+ # * address is a hash or object with properties or keys like
44
+ # street, address, city, state, province, etc.
45
+ # * pushpins is an optional list of hashes with :latitude, :longitude,
46
+ # :type (optional -- 1, 2, 3, etc. per the bing spec) or :label (optional -- no longer than 2 characters per bing spec)
47
+ # * options is a hash that gets turned directly into url params for bing
48
+ def address_map_url(address, pushpins = [], options = {})
30
49
  options = default_options(options)
31
- "#{BING_URL}#{QUERY_IMAGE_PATH}#{URI.escape(format_waypoint(address))}?#{options.to_params}"
50
+ base = "#{BING_MAPS_URL}#{QUERY_IMAGE_PATH}#{URI.escape(format_waypoint(address))}?#{options.to_params}"
51
+ if pushpins and pushpins.length > 0
52
+ formatted_pins = pushpins.map {|p| "pp=#{format_pushpin(p)}" }.join '&'
53
+ base = "#{base}&#{formatted_pins}" if pushpins
54
+ end
55
+ base
32
56
  end
33
57
 
34
58
  def location_details_url(address, options = {})
35
59
  options = default_options(options).merge(:o => "json")
36
60
  .merge(structure_address(address))
37
- "#{BING_URL}#{LOCATION_PATH}?#{options.to_params}"
61
+ "#{BING_MAPS_URL}#{LOCATION_PATH}?#{options.to_params}"
38
62
  end
39
63
 
40
64
  private
@@ -66,10 +90,15 @@ module Periplus
66
90
  object.send key_or_attribute
67
91
  end
68
92
  end
93
+
94
+ def format_pushpin(pushpin)
95
+ "#{pushpin[:latitude]},#{pushpin[:longitude]};#{pushpin[:type] || ""};#{pushpin[:label] || ""}"
96
+ end
69
97
 
70
98
  ADDRESS_STRUCTURE = {
71
99
  :street => :addressLine,
72
100
  :address => :addressLine,
101
+ :name => :addressLine,
73
102
  :city => :locality,
74
103
  :state => :adminDistrict,
75
104
  :province => :adminDistrict,
@@ -82,13 +111,15 @@ module Periplus
82
111
  }
83
112
 
84
113
  def structure_address(address)
114
+ return {:query => address} if address.kind_of? String
115
+
85
116
  ADDRESS_STRUCTURE.inject({}) do |structured, key_val|
86
117
  unconverted, converted = key_val
87
118
 
88
119
  if has_key_or_attribute? address, converted
89
- structured[converted] = get_by_key_or_attribute address, converted
120
+ structured[converted] ||= get_by_key_or_attribute address, converted
90
121
  elsif has_key_or_attribute? address, unconverted
91
- structured[converted] = get_by_key_or_attribute address, unconverted
122
+ structured[converted] ||= get_by_key_or_attribute address, unconverted
92
123
  end
93
124
  structured
94
125
  end
@@ -110,6 +141,14 @@ module Periplus
110
141
  def format_waypoint(waypoint)
111
142
  return waypoint if waypoint.instance_of? String
112
143
 
144
+ # use lat/long if provided
145
+ if has_key_or_attribute?(waypoint, :latitude) and
146
+ has_key_or_attribute?(waypoint, :longitude)
147
+ latitude = get_by_key_or_attribute waypoint, :latitude
148
+ longitude = get_by_key_or_attribute waypoint, :longitude
149
+ return "#{latitude},#{longitude}" if latitude and longitude
150
+ end
151
+
113
152
  if WAYPOINT_FORMAT
114
153
  .find_all { |el| el.instance_of? Symbol }
115
154
  .any? { |key| has_key_or_attribute?(waypoint, key) }
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{periplus}
8
- s.version = "0.2.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
- s.authors = ["Ryan Crum"]
12
- s.date = %q{2011-06-22}
11
+ s.authors = [%q{Ryan Crum}]
12
+ s.date = %q{2011-08-03}
13
13
  s.description = %q{A library that behaves as a client for the Bing Maps REST sdk}
14
14
  s.email = %q{ryan.j.crum@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -31,7 +31,7 @@ Gem::Specification.new do |s|
31
31
  "lib/periplus/request.rb",
32
32
  "lib/periplus/route.rb",
33
33
  "periplus.gemspec",
34
- "spec/bing_response.spec",
34
+ "spec/bing_response_spec.rb",
35
35
  "spec/location_spec.rb",
36
36
  "spec/periplus_spec.rb",
37
37
  "spec/request_spec.rb",
@@ -39,9 +39,9 @@ Gem::Specification.new do |s|
39
39
  "spec/spec_helper.rb"
40
40
  ]
41
41
  s.homepage = %q{http://github.com/thorstadt/periplus}
42
- s.licenses = ["MIT"]
43
- s.require_paths = ["lib"]
44
- s.rubygems_version = %q{1.6.2}
42
+ s.licenses = [%q{MIT}]
43
+ s.require_paths = [%q{lib}]
44
+ s.rubygems_version = %q{1.8.5.1}
45
45
  s.summary = %q{Bing Maps REST Client}
46
46
 
47
47
  if s.respond_to? :specification_version then
@@ -0,0 +1,60 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe Periplus::BingResponse do
4
+ it "throws an exception if the httparty response is HTTP status 4xx" do
5
+ http_error = Net::HTTPUnauthorized.new "1_1", 401, "Unauthorized"
6
+ response = mock HTTParty::Response, :response => http_error
7
+
8
+ lambda do
9
+ Periplus::BingResponse.new(response)
10
+ end.should raise_error(RuntimeError, "An error has occurred communicating with the Bing Maps service. HTTP Status: 401 (Unauthorized)")
11
+ end
12
+
13
+ it "provides helpful debugging information for service failrues" do
14
+ http_error = Net::HTTPNotFound.new("1_1", 404, "Not Found")
15
+ http_error.stub!(:body).and_return(
16
+ {:some_really_long_properties_that_extend => {:deeply_past_the_place_where => {:they_wrap => "stuff"}}}
17
+ )
18
+ http_request = HTTParty::Request.new "GET", "/API/cheese"
19
+ response = mock HTTParty::Response, :response => http_error,
20
+ :request => http_request
21
+
22
+ Periplus.verbose = true
23
+
24
+ lambda do
25
+ begin
26
+ Periplus::BingResponse.new(response)
27
+ rescue RuntimeError => e
28
+ e.message.should == <<-EOF
29
+ An error has occurred communicating with the Bing Maps service. HTTP Status: 404 (Not Found)
30
+ URL: /API/cheese
31
+ Response:
32
+ {:some_really_long_properties_that_extend=>
33
+ {:deeply_past_the_place_where=>{:they_wrap=>"stuff"}}}
34
+ EOF
35
+ raise e
36
+ end
37
+ end.should raise_error(RuntimeError)
38
+ end
39
+
40
+ it "throws an exception if the httparty response contains no routes" do
41
+ http_ok = Net::HTTPOK.new "1_1", 200, "OK"
42
+ empty_resource_sets = {
43
+ "resourceSets" => []
44
+ }
45
+
46
+ empty_single_resource_set = {
47
+ "resourceSets" => [{"resources" => []}]
48
+ }
49
+
50
+ [empty_resource_sets, empty_single_resource_set].each do |parsed_response|
51
+ response = mock HTTParty::Response, :response => http_ok, :parsed_response => parsed_response
52
+
53
+ begin
54
+ Periplus::BingResponse.new(response)
55
+ rescue Exception => e
56
+ e.message.should == "Not found."
57
+ end
58
+ end
59
+ end
60
+ end
@@ -47,11 +47,11 @@ describe "Request" do
47
47
 
48
48
  it "formats an address object correctly" do
49
49
  class PeriplusAddress
50
- attr_accessor :address
51
- attr_accessor :city
52
- attr_accessor :state
53
- attr_accessor :country
54
- attr_accessor :postal_code
50
+ attr_accessor :address,
51
+ :city,
52
+ :state,
53
+ :country,
54
+ :postal_code
55
55
  end
56
56
 
57
57
  address = PeriplusAddress.new
@@ -67,6 +67,32 @@ describe "Request" do
67
67
  formatted.should == "1600 Pennsylvania Ave Washington, DC US 20500"
68
68
  end
69
69
 
70
+ it "formats an address object correctly with latitude/longitude" do
71
+ class PeriplusAddress
72
+ attr_accessor :address,
73
+ :city,
74
+ :state,
75
+ :country,
76
+ :postal_code,
77
+ :latitude,
78
+ :longitude
79
+ end
80
+
81
+ address = PeriplusAddress.new
82
+ address.address = "1600 Pennsylvania Ave"
83
+ address.city = "Washington"
84
+ address.state = "DC"
85
+ address.country = "US"
86
+ address.postal_code = 20500
87
+ address.latitude = "40.32332"
88
+ address.longitude = "-2.32142"
89
+
90
+ req = Periplus::Request.new 'fake key'
91
+ formatted = req.send :format_waypoint, address
92
+
93
+ formatted.should == "40.32332,-2.32142"
94
+ end
95
+
70
96
  it "builds a location details url correctly" do
71
97
  address = {
72
98
  :street => "1600 Pennsylvania Ave",
@@ -80,4 +106,64 @@ describe "Request" do
80
106
  url = req.location_details_url address
81
107
  url.should == "http://dev.virtualearth.net/REST/v1/Locations?key=fake%20key&o=json&addressLine=1600%20Pennsylvania%20Ave&locality=Washington&adminDistrict=DC&countryRegion=US&postalCode=20500"
82
108
  end
109
+
110
+ it "builds a location details url from a query string correctly" do
111
+ address = "1600 Pennsylvania Ave Washington, DC"
112
+ req = Periplus::Request.new 'fake key'
113
+ url = req.location_details_url address
114
+ url.should == "http://dev.virtualearth.net/REST/v1/Locations?key=fake%20key&o=json&query=1600%20Pennsylvania%20Ave%20Washington%2C%20DC"
115
+ end
116
+
117
+ it "builds a location details url correctly with a place name" do
118
+ address = {
119
+ :name => "The White House",
120
+ :city => "Washington",
121
+ :state => "DC",
122
+ :country => "US",
123
+ :zip => 20500
124
+ }
125
+
126
+ req = Periplus::Request.new 'fake key'
127
+ url = req.location_details_url address
128
+ url.should == "http://dev.virtualearth.net/REST/v1/Locations?key=fake%20key&o=json&addressLine=The%20White%20House&locality=Washington&adminDistrict=DC&countryRegion=US&postalCode=20500"
129
+ end
130
+
131
+ it "builds a location details url correctly with a place name and an address" do
132
+ address = {
133
+ :name => "The White House",
134
+ :street => "1600 Pennsylvania Ave",
135
+ :city => "Washington",
136
+ :state => "DC",
137
+ :country => "US",
138
+ :zip => 20500
139
+ }
140
+
141
+ req = Periplus::Request.new 'fake key'
142
+ url = req.location_details_url address
143
+ url.should == "http://dev.virtualearth.net/REST/v1/Locations?key=fake%20key&o=json&addressLine=1600%20Pennsylvania%20Ave&locality=Washington&adminDistrict=DC&countryRegion=US&postalCode=20500"
144
+ end
145
+
146
+ it "formats pushpins correctly" do
147
+ req = Periplus::Request.new 'fake key'
148
+
149
+ pushpin = {:latitude => 1337, :longitude => 42.24}
150
+ formatted = req.send :format_pushpin, pushpin
151
+ formatted.should == "1337,42.24;;"
152
+
153
+ pushpin = {:latitude => 1337, :longitude => 42.24, :label => "pi"}
154
+ formatted = req.send :format_pushpin, pushpin
155
+ formatted.should == "1337,42.24;;pi"
156
+
157
+ pushpin = {:latitude => 1337, :longitude => 42.24, :type => 3, :label => "pi"}
158
+ formatted = req.send :format_pushpin, pushpin
159
+ formatted.should == "1337,42.24;3;pi"
160
+ end
161
+
162
+ it "formats a route url correctly with pushpins" do
163
+ req = Periplus::Request.new 'fake_key'
164
+
165
+ waypoints = ["New York, NY", "Buffalo, NY", "Louisville, KY"]
166
+ url = req.route_map_url waypoints, [{:latitude => 1337, :longitude => 42}, {:latitude => 42, :longitude => 1337, :label => "sw"}]
167
+ url.should == "http://dev.virtualearth.net/REST/v1/Imagery/Map/Road/Routes/Driving?wp.1=New%20York%2C%20NY&wp.2=Buffalo%2C%20NY&wp.3=Louisville%2C%20KY&key=fake_key&pp=1337,42;;&pp=42,1337;;sw"
168
+ end
83
169
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: periplus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,12 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-06-22 00:00:00.000000000 -04:00
13
- default_executable:
12
+ date: 2011-08-03 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: httparty
17
- requirement: &2168771280 !ruby/object:Gem::Requirement
16
+ requirement: &7342460 !ruby/object:Gem::Requirement
18
17
  none: false
19
18
  requirements:
20
19
  - - ! '>='
@@ -22,10 +21,10 @@ dependencies:
22
21
  version: '0'
23
22
  type: :runtime
24
23
  prerelease: false
25
- version_requirements: *2168771280
24
+ version_requirements: *7342460
26
25
  - !ruby/object:Gem::Dependency
27
26
  name: activesupport
28
- requirement: &2168769920 !ruby/object:Gem::Requirement
27
+ requirement: &7341160 !ruby/object:Gem::Requirement
29
28
  none: false
30
29
  requirements:
31
30
  - - ! '>='
@@ -33,10 +32,10 @@ dependencies:
33
32
  version: '0'
34
33
  type: :runtime
35
34
  prerelease: false
36
- version_requirements: *2168769920
35
+ version_requirements: *7341160
37
36
  - !ruby/object:Gem::Dependency
38
37
  name: rspec
39
- requirement: &2168769200 !ruby/object:Gem::Requirement
38
+ requirement: &7339640 !ruby/object:Gem::Requirement
40
39
  none: false
41
40
  requirements:
42
41
  - - ~>
@@ -44,10 +43,10 @@ dependencies:
44
43
  version: 2.4.0
45
44
  type: :development
46
45
  prerelease: false
47
- version_requirements: *2168769200
46
+ version_requirements: *7339640
48
47
  - !ruby/object:Gem::Dependency
49
48
  name: bundler
50
- requirement: &2168768480 !ruby/object:Gem::Requirement
49
+ requirement: &7338260 !ruby/object:Gem::Requirement
51
50
  none: false
52
51
  requirements:
53
52
  - - ~>
@@ -55,10 +54,10 @@ dependencies:
55
54
  version: 1.0.0
56
55
  type: :development
57
56
  prerelease: false
58
- version_requirements: *2168768480
57
+ version_requirements: *7338260
59
58
  - !ruby/object:Gem::Dependency
60
59
  name: jeweler
61
- requirement: &2168790180 !ruby/object:Gem::Requirement
60
+ requirement: &7337440 !ruby/object:Gem::Requirement
62
61
  none: false
63
62
  requirements:
64
63
  - - ~>
@@ -66,10 +65,10 @@ dependencies:
66
65
  version: 1.6.2
67
66
  type: :development
68
67
  prerelease: false
69
- version_requirements: *2168790180
68
+ version_requirements: *7337440
70
69
  - !ruby/object:Gem::Dependency
71
70
  name: rcov
72
- requirement: &2168817340 !ruby/object:Gem::Requirement
71
+ requirement: &7336020 !ruby/object:Gem::Requirement
73
72
  none: false
74
73
  requirements:
75
74
  - - ! '>='
@@ -77,7 +76,7 @@ dependencies:
77
76
  version: '0'
78
77
  type: :development
79
78
  prerelease: false
80
- version_requirements: *2168817340
79
+ version_requirements: *7336020
81
80
  description: A library that behaves as a client for the Bing Maps REST sdk
82
81
  email: ryan.j.crum@gmail.com
83
82
  executables: []
@@ -100,13 +99,12 @@ files:
100
99
  - lib/periplus/request.rb
101
100
  - lib/periplus/route.rb
102
101
  - periplus.gemspec
103
- - spec/bing_response.spec
102
+ - spec/bing_response_spec.rb
104
103
  - spec/location_spec.rb
105
104
  - spec/periplus_spec.rb
106
105
  - spec/request_spec.rb
107
106
  - spec/route_spec.rb
108
107
  - spec/spec_helper.rb
109
- has_rdoc: true
110
108
  homepage: http://github.com/thorstadt/periplus
111
109
  licenses:
112
110
  - MIT
@@ -122,7 +120,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
122
120
  version: '0'
123
121
  segments:
124
122
  - 0
125
- hash: -1957350740199156852
123
+ hash: 94696388149448647
126
124
  required_rubygems_version: !ruby/object:Gem::Requirement
127
125
  none: false
128
126
  requirements:
@@ -131,7 +129,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
131
129
  version: '0'
132
130
  requirements: []
133
131
  rubyforge_project:
134
- rubygems_version: 1.6.2
132
+ rubygems_version: 1.8.5.1
135
133
  signing_key:
136
134
  specification_version: 3
137
135
  summary: Bing Maps REST Client
@@ -1,36 +0,0 @@
1
- require 'periplus'
2
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
3
-
4
- describe "BingResponse" do
5
- it "throws an exception if the httparty response is HTTP status 4xx" do
6
- http_error = Net::HTTPUnauthorized.new "1_1", 401, "Unauthorized"
7
- response = mock HTTParty::Response, :response => http_error
8
-
9
- begin
10
- Periplus::BingResponse.new(response)
11
- rescue Exception => e
12
- e.message.should == "An error has occurred communicating with the Bing Maps service. HTTP Status: 401 (Unauthorized)"
13
- end
14
- end
15
-
16
- it "throws an exception if the httparty response contains no routes" do
17
- http_ok = Net::HTTPOK.new "1_1", 200, "OK"
18
- empty_resource_sets = {
19
- "resourceSets" => []
20
- }
21
-
22
- empty_single_resource_set = {
23
- "resourceSets" => [{"resources" => []}]
24
- }
25
-
26
- [empty_resource_sets, empty_single_resource_set].each do |parsed_response|
27
- response = mock HTTParty::Response, :response => http_ok, :parsed_response => parsed_response
28
-
29
- begin
30
- Periplus::BingResponse.new(response)
31
- rescue Exception => e
32
- e.message.should == "Not found."
33
- end
34
- end
35
- end
36
- end