bing 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +13 -0
- data/Manifest.txt +3 -2
- data/lib/bing/core_ext.rb +41 -28
- data/lib/bing/errors.rb +42 -39
- data/lib/bing/location.rb +14 -20
- data/lib/bing/request.rb +3 -3
- data/lib/bing/rest_resource.rb +51 -0
- data/lib/bing/route/itinerary.rb +1 -1
- data/lib/bing/route.rb +10 -16
- data/lib/bing.rb +5 -8
- data/test/test_bing_location.rb +19 -13
- data/test/{test_request.rb → test_bing_request.rb} +3 -3
- data/test/test_bing_rest_resource.rb +66 -0
- data/test/test_bing_route.rb +22 -16
- data/test/test_bing_route_itinerary.rb +1 -1
- data/test/test_core_ext.rb +2 -2
- metadata +10 -8
- data/lib/bing/formatting_helper.rb +0 -21
data/History.txt
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
=== 0.2.0 / 2011-08-05
|
2
|
+
* 4 minor enhancement(s):
|
3
|
+
|
4
|
+
* Added ability for user to specify api version.
|
5
|
+
* Namespacing better, no more mixins, and added rest resource superclass.
|
6
|
+
* Only add core extensions if they are not already defined.
|
7
|
+
* Refined the rest resource and added more coverage.
|
8
|
+
|
9
|
+
* 2 unknown:
|
10
|
+
|
11
|
+
* Added tests for bing rest resource and various comments.
|
12
|
+
* Namespaced request object in favor of mixin.
|
13
|
+
|
1
14
|
=== 0.1.1 / 2011-07-25
|
2
15
|
* 5 unknown:
|
3
16
|
|
data/Manifest.txt
CHANGED
@@ -7,15 +7,16 @@ Rakefile
|
|
7
7
|
lib/bing.rb
|
8
8
|
lib/bing/core_ext.rb
|
9
9
|
lib/bing/errors.rb
|
10
|
-
lib/bing/formatting_helper.rb
|
11
10
|
lib/bing/location.rb
|
12
11
|
lib/bing/request.rb
|
12
|
+
lib/bing/rest_resource.rb
|
13
13
|
lib/bing/route.rb
|
14
14
|
lib/bing/route/itinerary.rb
|
15
15
|
test/helper.rb
|
16
16
|
test/test_bing.rb
|
17
17
|
test/test_bing_location.rb
|
18
|
+
test/test_bing_request.rb
|
19
|
+
test/test_bing_rest_resource.rb
|
18
20
|
test/test_bing_route.rb
|
19
21
|
test/test_bing_route_itinerary.rb
|
20
22
|
test/test_core_ext.rb
|
21
|
-
test/test_request.rb
|
data/lib/bing/core_ext.rb
CHANGED
@@ -1,46 +1,59 @@
|
|
1
|
-
# core extensions to ruby
|
2
|
-
class Object
|
1
|
+
# core extensions to ruby.
|
3
2
|
|
4
|
-
|
5
|
-
|
3
|
+
unless respond_to? :blank?
|
4
|
+
class Object
|
5
|
+
def blank?
|
6
|
+
respond_to?(:empty?) ? empty? : !self
|
7
|
+
end
|
6
8
|
end
|
9
|
+
end
|
10
|
+
|
7
11
|
|
8
|
-
|
9
|
-
|
12
|
+
unless respond_to? :to_param
|
13
|
+
class Object
|
14
|
+
def to_param
|
15
|
+
to_s
|
16
|
+
end
|
10
17
|
end
|
18
|
+
end
|
11
19
|
|
12
|
-
def to_query key
|
13
|
-
require 'cgi' unless defined?(CGI) && defined?(CGI::escape)
|
14
|
-
_key = CGI.escape(key.to_s.camelize(:lower)).gsub(/%(5B|5D)/n) {
|
15
|
-
[$1].pack('H*')
|
16
|
-
}
|
17
|
-
value = CGI.escape(to_param.to_s)
|
18
20
|
|
19
|
-
|
20
|
-
|
21
|
+
unless respond_to? :to_lower_camelized_query
|
22
|
+
class Object
|
23
|
+
def to_lower_camelized_query key
|
24
|
+
require 'cgi' unless defined?(CGI) && defined?(CGI::escape)
|
25
|
+
_key = CGI.escape(key.to_s.camelize(:lower)).gsub(/%(5B|5D)/n) {
|
26
|
+
[$1].pack('H*')
|
27
|
+
}
|
28
|
+
value = CGI.escape(to_param.to_s)
|
21
29
|
|
30
|
+
"#{_key}=#{value}"
|
31
|
+
end
|
32
|
+
end
|
22
33
|
end
|
23
34
|
|
24
|
-
class Hash
|
25
35
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
36
|
+
unless {}.respond_to? :to_lower_camelized_param
|
37
|
+
class Hash
|
38
|
+
def to_lower_camelized_param namespace = nil
|
39
|
+
collect do |key, value|
|
40
|
+
value.to_lower_camelized_query(namespace ? "#{namespace}[#{key}]" : key)
|
41
|
+
end.sort * '&'
|
42
|
+
end
|
30
43
|
end
|
31
|
-
|
32
44
|
end
|
33
45
|
|
34
|
-
class String
|
35
46
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
47
|
+
unless ''.respond_to? :camelize
|
48
|
+
class String
|
49
|
+
def camelize first_letter = :upper
|
50
|
+
case first_letter
|
51
|
+
when :upper then
|
52
|
+
self.gsub(/\/(.?)/) {"::#{$1.upcase}"}.gsub(/(?:^|_)(.)/) {$1.upcase}
|
53
|
+
when :lower then
|
54
|
+
self[0].chr.downcase + camelize()[1..-1]
|
55
|
+
end
|
42
56
|
end
|
43
57
|
end
|
44
|
-
|
45
58
|
end
|
46
59
|
|
data/lib/bing/errors.rb
CHANGED
@@ -1,55 +1,58 @@
|
|
1
|
-
|
2
|
-
# DO NOT use these classes. They are too generic.
|
1
|
+
module Bing
|
3
2
|
|
4
|
-
|
5
|
-
|
6
|
-
end
|
3
|
+
##
|
4
|
+
# DO NOT use these classes. They are too generic.
|
7
5
|
|
8
|
-
class
|
9
|
-
|
6
|
+
class ServiceError < StandardError
|
7
|
+
def status() 500 end
|
8
|
+
end
|
10
9
|
|
11
|
-
|
12
|
-
end
|
10
|
+
class ResourceMissing < StandardError
|
11
|
+
def status() 502 end
|
13
12
|
|
14
|
-
|
15
|
-
|
13
|
+
def message() 'Resource is empty or nil.' end
|
14
|
+
end
|
16
15
|
|
17
|
-
|
16
|
+
##
|
17
|
+
# Raised when we get an invalid response from an underlying server
|
18
18
|
|
19
|
-
|
20
|
-
error = new "parse error#{uri ? " from #{uri}" : nil} - #{text.inspect}"
|
21
|
-
error.text = text
|
22
|
-
error.uri = uri
|
23
|
-
error
|
24
|
-
end
|
19
|
+
class BadGateway < ServiceError
|
25
20
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
end
|
21
|
+
def self.parse_error text, uri = nil
|
22
|
+
error = new "parse error#{uri ? " from #{uri}" : nil} - #{text.inspect}"
|
23
|
+
error.text = text
|
24
|
+
error.uri = uri
|
25
|
+
error
|
26
|
+
end
|
33
27
|
|
34
|
-
|
35
|
-
|
28
|
+
def self.bad_response code, uri, server_message=nil
|
29
|
+
server_message = " with message #{server_message}" if server_message
|
30
|
+
error = new "#{uri} returned #{code}#{server_message}"
|
31
|
+
error.code = code
|
32
|
+
error.uri = uri
|
33
|
+
error
|
34
|
+
end
|
36
35
|
|
37
|
-
|
36
|
+
##
|
37
|
+
# Status code from underlying server
|
38
38
|
|
39
|
-
|
40
|
-
# Text we were unable to parse
|
39
|
+
attr_accessor :code
|
41
40
|
|
42
|
-
|
41
|
+
##
|
42
|
+
# Text we were unable to parse
|
43
43
|
|
44
|
-
|
45
|
-
# URI for this request
|
44
|
+
attr_accessor :text
|
46
45
|
|
47
|
-
|
46
|
+
##
|
47
|
+
# URI for this request
|
48
48
|
|
49
|
-
|
50
|
-
end
|
49
|
+
attr_accessor :uri
|
51
50
|
|
52
|
-
|
53
|
-
|
54
|
-
|
51
|
+
def status() 502 end
|
52
|
+
end
|
53
|
+
|
54
|
+
class ItineraryResourceMissing < ResourceMissing; end
|
55
|
+
class LocationResourceMissing < ResourceMissing; end
|
56
|
+
class RouteResourceMissing < ResourceMissing; end
|
55
57
|
|
58
|
+
end
|
data/lib/bing/location.rb
CHANGED
@@ -1,36 +1,30 @@
|
|
1
|
-
require 'bing'
|
1
|
+
require 'bing/rest_resource'
|
2
2
|
|
3
3
|
##
|
4
4
|
# Responsible for obtaining a location based off of data passed in.
|
5
|
-
# Most common method is to do:
|
6
|
-
#
|
7
|
-
# Bing::Location.find :query => '123 Address City State'
|
8
5
|
|
9
|
-
class Bing::Location
|
10
|
-
|
11
|
-
##
|
12
|
-
# Path to location resource.
|
13
|
-
|
14
|
-
PATH = '/REST/v1/Locations'
|
6
|
+
class Bing::Location < Bing::RestResource
|
15
7
|
|
16
8
|
##
|
17
9
|
# Will find locations based off of +query+ and return an array of
|
18
|
-
# Bing::Location objects.
|
10
|
+
# Bing::Location objects. Will support any param that bing supports.
|
11
|
+
#
|
12
|
+
# === Example
|
13
|
+
#
|
14
|
+
# Bing::Location.find :query => '123 Address City State'
|
19
15
|
|
20
16
|
def self.find opts
|
21
|
-
|
22
|
-
|
23
|
-
)
|
17
|
+
map_find opts.to_lower_camelized_param
|
18
|
+
end
|
24
19
|
|
25
|
-
|
20
|
+
##
|
21
|
+
# Path to route resource.
|
26
22
|
|
27
|
-
|
28
|
-
|
29
|
-
end.compact
|
23
|
+
def self.path
|
24
|
+
super '/Locations'
|
30
25
|
end
|
31
26
|
|
32
27
|
attr_reader :address
|
33
|
-
attr_reader :bounding_box
|
34
28
|
attr_reader :canonical_description
|
35
29
|
attr_reader :coordinates
|
36
30
|
attr_reader :city
|
@@ -42,7 +36,7 @@ class Bing::Location
|
|
42
36
|
attr_reader :zip
|
43
37
|
|
44
38
|
def initialize resource
|
45
|
-
raise LocationResourceMissing if resource.blank?
|
39
|
+
raise Bing::LocationResourceMissing if resource.blank?
|
46
40
|
|
47
41
|
@confidence = resource['confidence']
|
48
42
|
@entity_type = resource['entityType']
|
data/lib/bing/request.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
##
|
2
2
|
# Responsible for making requests to Bing. Uses persistent HTTP connections.
|
3
3
|
|
4
|
-
|
4
|
+
class Bing::Request
|
5
5
|
|
6
6
|
HTTP = Net::HTTP::Persistent.new
|
7
7
|
USER_AGENT = "Bing Client Version: #{Bing::VERSION}"
|
@@ -10,10 +10,10 @@ module Bing::Request
|
|
10
10
|
##
|
11
11
|
# Perform a get request and ensure that the response.code == 20\d,
|
12
12
|
# otherwise raise a BadGateway.
|
13
|
-
def get uri
|
13
|
+
def self.get uri
|
14
14
|
response = HTTP.request uri
|
15
15
|
|
16
|
-
raise BadGateway.bad_response(response.code, uri) unless
|
16
|
+
raise Bing::BadGateway.bad_response(response.code, uri) unless
|
17
17
|
response.code =~ /20\d/
|
18
18
|
|
19
19
|
response
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'bing'
|
2
|
+
|
3
|
+
class Bing::RestResource
|
4
|
+
|
5
|
+
##
|
6
|
+
# Base Bing Rest route.
|
7
|
+
|
8
|
+
BASE_PATH = "/REST/#{Bing.config[:api_version]}"
|
9
|
+
|
10
|
+
def self._find uri
|
11
|
+
body = JSON.parse Bing::Request.get(uri).body
|
12
|
+
|
13
|
+
body['resourceSets'].first['resources'].map do |resource|
|
14
|
+
new resource
|
15
|
+
end.compact
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.map_uri params
|
19
|
+
Bing.config[:map_uri].merge(
|
20
|
+
"#{path}?key=#{Bing.config[:api_key]}&#{params}"
|
21
|
+
)
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.map_find params
|
25
|
+
_find map_uri params
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.path subclass_path = nil
|
29
|
+
"#{BASE_PATH}#{subclass_path}"
|
30
|
+
end
|
31
|
+
|
32
|
+
##
|
33
|
+
# The map's bounding box.
|
34
|
+
|
35
|
+
attr_reader :bounding_box
|
36
|
+
|
37
|
+
##
|
38
|
+
# Decipher bounding box from bbox in Bing response.
|
39
|
+
|
40
|
+
def bbox box
|
41
|
+
south, west, north, east = *box
|
42
|
+
{
|
43
|
+
:north => north,
|
44
|
+
:east => east,
|
45
|
+
:south => south,
|
46
|
+
:west => west,
|
47
|
+
}
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
data/lib/bing/route/itinerary.rb
CHANGED
@@ -8,7 +8,7 @@ class Bing::Route::Itinerary
|
|
8
8
|
attr_reader :travel_mode
|
9
9
|
|
10
10
|
def initialize resource
|
11
|
-
raise ItineraryResourceMissing if resource.blank?
|
11
|
+
raise Bing::ItineraryResourceMissing if resource.blank?
|
12
12
|
|
13
13
|
@distance = resource['travelDistance']
|
14
14
|
@duration = resource['travelDuration']
|
data/lib/bing/route.rb
CHANGED
@@ -1,11 +1,6 @@
|
|
1
|
-
require 'bing'
|
1
|
+
require 'bing/rest_resource'
|
2
2
|
|
3
|
-
class Bing::Route
|
4
|
-
|
5
|
-
##
|
6
|
-
# Path to route resource.
|
7
|
-
|
8
|
-
PATH = '/REST/v1/Routes'
|
3
|
+
class Bing::Route < Bing::RestResource
|
9
4
|
|
10
5
|
##
|
11
6
|
# === Description
|
@@ -35,19 +30,18 @@ class Bing::Route
|
|
35
30
|
|
36
31
|
def self.find opts
|
37
32
|
waypoints = format_waypoints opts.delete :waypoints
|
33
|
+
params = [opts.to_lower_camelized_param, waypoints].join '&'
|
38
34
|
|
39
|
-
|
40
|
-
|
41
|
-
)
|
35
|
+
map_find params
|
36
|
+
end
|
42
37
|
|
43
|
-
|
38
|
+
##
|
39
|
+
# Path to route resource.
|
44
40
|
|
45
|
-
|
46
|
-
|
47
|
-
end.compact
|
41
|
+
def self.path
|
42
|
+
super '/Routes'
|
48
43
|
end
|
49
44
|
|
50
|
-
attr_reader :bounding_box
|
51
45
|
attr_reader :distance_unit
|
52
46
|
attr_reader :duration_unit
|
53
47
|
attr_reader :ending_coordinates
|
@@ -58,7 +52,7 @@ class Bing::Route
|
|
58
52
|
attr_reader :type
|
59
53
|
|
60
54
|
def initialize resource
|
61
|
-
raise RouteResourceMissing if resource.blank?
|
55
|
+
raise Bing::RouteResourceMissing if resource.blank?
|
62
56
|
|
63
57
|
@distance_unit = resource['distanceUnit']
|
64
58
|
@duration_unit = resource['durationUnit']
|
data/lib/bing.rb
CHANGED
@@ -5,12 +5,13 @@ require 'json'
|
|
5
5
|
|
6
6
|
module Bing
|
7
7
|
|
8
|
-
VERSION = '0.
|
8
|
+
VERSION = '0.2.0'
|
9
9
|
|
10
10
|
DEFAULTS = {
|
11
|
-
:api_key
|
12
|
-
:api_uri
|
13
|
-
:
|
11
|
+
:api_key => 'AtsQ7PXwSqL266EUdxMYj3b4-H5A6ubkf8DwH-B4k3rVmmPycUrhmH-lZKHeWXm-',
|
12
|
+
:api_uri => URI.parse('http://api.bing.net'),
|
13
|
+
:api_version => 'v1',
|
14
|
+
:map_uri => URI.parse('http://dev.virtualearth.net'),
|
14
15
|
}
|
15
16
|
|
16
17
|
class << self
|
@@ -30,9 +31,5 @@ end
|
|
30
31
|
|
31
32
|
require 'bing/core_ext'
|
32
33
|
require 'bing/errors'
|
33
|
-
require 'bing/formatting_helper'
|
34
34
|
require 'bing/request'
|
35
35
|
|
36
|
-
include Bing::FormattingHelper
|
37
|
-
# TODO figure out how to allow user defined request object.
|
38
|
-
include Bing::Request
|
data/test/test_bing_location.rb
CHANGED
@@ -2,6 +2,8 @@ require 'helper'
|
|
2
2
|
|
3
3
|
class TestBingLocation < MiniTest::Unit::TestCase
|
4
4
|
|
5
|
+
BL = Bing::Location
|
6
|
+
|
5
7
|
def test_cls_find_successful
|
6
8
|
body = {
|
7
9
|
'resourceSets' => [
|
@@ -11,21 +13,25 @@ class TestBingLocation < MiniTest::Unit::TestCase
|
|
11
13
|
]
|
12
14
|
}.to_json
|
13
15
|
|
14
|
-
mock_map_request 200,
|
16
|
+
mock_map_request 200, BL.path, body
|
15
17
|
|
16
|
-
locs =
|
18
|
+
locs = BL.find :query => '123'
|
17
19
|
|
18
20
|
assert_equal 'full name', locs.first.full_name
|
19
21
|
end
|
20
22
|
|
21
23
|
def test_cls_find_failure
|
22
|
-
mock_map_request 400,
|
24
|
+
mock_map_request 400, BL.path, '{}'
|
23
25
|
|
24
|
-
assert_raises BadGateway do
|
25
|
-
|
26
|
+
assert_raises Bing::BadGateway do
|
27
|
+
BL.find :query => '123'
|
26
28
|
end
|
27
29
|
end
|
28
30
|
|
31
|
+
def test_cls_path
|
32
|
+
assert_match %r[Locations], BL.path
|
33
|
+
end
|
34
|
+
|
29
35
|
def test_initialize_with_coordinates
|
30
36
|
resource = {
|
31
37
|
'point' => {
|
@@ -33,7 +39,7 @@ class TestBingLocation < MiniTest::Unit::TestCase
|
|
33
39
|
}
|
34
40
|
}
|
35
41
|
|
36
|
-
bl =
|
42
|
+
bl = BL.new resource
|
37
43
|
|
38
44
|
assert_equal [123, 456], bl.coordinates
|
39
45
|
end
|
@@ -49,7 +55,7 @@ class TestBingLocation < MiniTest::Unit::TestCase
|
|
49
55
|
}
|
50
56
|
}
|
51
57
|
|
52
|
-
bl =
|
58
|
+
bl = BL.new resource
|
53
59
|
|
54
60
|
assert_equal 'address', bl.address
|
55
61
|
assert_equal 'city', bl.city
|
@@ -61,7 +67,7 @@ class TestBingLocation < MiniTest::Unit::TestCase
|
|
61
67
|
def test_initialize_with_confidence
|
62
68
|
resource = { 'confidence' => 'High' }
|
63
69
|
|
64
|
-
bl =
|
70
|
+
bl = BL.new resource
|
65
71
|
|
66
72
|
assert_equal 'High', bl.confidence
|
67
73
|
end
|
@@ -69,7 +75,7 @@ class TestBingLocation < MiniTest::Unit::TestCase
|
|
69
75
|
def test_initialize_with_bbox
|
70
76
|
resource = { 'bbox' => %w[south west north east] }
|
71
77
|
|
72
|
-
bl =
|
78
|
+
bl = BL.new resource
|
73
79
|
|
74
80
|
assert_equal 'north', bl.bounding_box[:north]
|
75
81
|
assert_equal 'east', bl.bounding_box[:east]
|
@@ -80,7 +86,7 @@ class TestBingLocation < MiniTest::Unit::TestCase
|
|
80
86
|
def test_initialize_with_entity_type
|
81
87
|
resource = { 'entityType' => 'Postal' }
|
82
88
|
|
83
|
-
bl =
|
89
|
+
bl = BL.new resource
|
84
90
|
|
85
91
|
assert_equal 'Postal', bl.entity_type
|
86
92
|
end
|
@@ -88,14 +94,14 @@ class TestBingLocation < MiniTest::Unit::TestCase
|
|
88
94
|
def test_initialize_with_full_name
|
89
95
|
resource = { 'name' => '123 street, ca' }
|
90
96
|
|
91
|
-
bl =
|
97
|
+
bl = BL.new resource
|
92
98
|
|
93
99
|
assert_equal '123 street, ca', bl.full_name
|
94
100
|
end
|
95
101
|
|
96
102
|
def test_initialize_without_resource_raises
|
97
|
-
assert_raises LocationResourceMissing do
|
98
|
-
|
103
|
+
assert_raises Bing::LocationResourceMissing do
|
104
|
+
BL.new nil
|
99
105
|
end
|
100
106
|
end
|
101
107
|
|
@@ -9,15 +9,15 @@ class TestRequest < MiniTest::Unit::TestCase
|
|
9
9
|
def test_get_failure
|
10
10
|
stub_request(:any, "http://example.com").to_return(:status => 500)
|
11
11
|
|
12
|
-
assert_raises BadGateway do
|
13
|
-
get @uri
|
12
|
+
assert_raises Bing::BadGateway do
|
13
|
+
Bing::Request.get @uri
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
17
|
def test_get_success
|
18
18
|
stub_request(:any, "http://example.com").to_return(:status => 200)
|
19
19
|
|
20
|
-
response = get @uri
|
20
|
+
response = Bing::Request.get @uri
|
21
21
|
|
22
22
|
assert_equal '200', response.code
|
23
23
|
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class Bing::RestResource
|
4
|
+
def initialize *args
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
class TestBingRestResource < MiniTest::Unit::TestCase
|
9
|
+
|
10
|
+
BRR = Bing::RestResource # so cold
|
11
|
+
|
12
|
+
def test_base_path
|
13
|
+
assert_equal '/REST/v1', BRR::BASE_PATH
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_cls__find
|
17
|
+
stub_request(:any, /.*/).to_return(:status => 200, :body => body)
|
18
|
+
|
19
|
+
assert_resource BRR._find URI.parse 'http://example.com'
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_map_uri
|
23
|
+
assert_match %r[.*virtualearth.*REST.*key.*dunkey],
|
24
|
+
BRR.map_uri('dunkey').to_s
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_map_find
|
28
|
+
mock_map_request 200, BRR.path, body
|
29
|
+
|
30
|
+
assert_resource BRR.map_find 'dunkey'
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_path
|
34
|
+
assert_equal "#{BRR::BASE_PATH}", BRR.path
|
35
|
+
assert_equal "#{BRR::BASE_PATH}/chunky", BRR.path('/chunky')
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_bbox
|
39
|
+
box = %w[south west north east]
|
40
|
+
bbox = BRR.new.bbox box
|
41
|
+
|
42
|
+
assert_equal 'north', bbox[:north]
|
43
|
+
assert_equal 'east', bbox[:east]
|
44
|
+
assert_equal 'south', bbox[:south]
|
45
|
+
assert_equal 'west', bbox[:west]
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def assert_resource found
|
51
|
+
assert_kind_of Array, found
|
52
|
+
assert_equal BRR.new.class, found.first.class
|
53
|
+
end
|
54
|
+
|
55
|
+
def body
|
56
|
+
{
|
57
|
+
'resourceSets' => [
|
58
|
+
'resources' => [
|
59
|
+
{'name' => 'full name'}
|
60
|
+
]
|
61
|
+
]
|
62
|
+
}.to_json
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
data/test/test_bing_route.rb
CHANGED
@@ -8,6 +8,8 @@ end
|
|
8
8
|
|
9
9
|
class TestBingRoute < MiniTest::Unit::TestCase
|
10
10
|
|
11
|
+
BR = Bing::Route
|
12
|
+
|
11
13
|
def test_cls_find
|
12
14
|
body = {
|
13
15
|
'resourceSets' => [
|
@@ -17,29 +19,33 @@ class TestBingRoute < MiniTest::Unit::TestCase
|
|
17
19
|
]
|
18
20
|
}.to_json
|
19
21
|
|
20
|
-
mock_map_request 200,
|
22
|
+
mock_map_request 200, BR.path, body
|
21
23
|
|
22
|
-
route =
|
24
|
+
route = BR.find :waypoints => ['start', 'end']
|
23
25
|
end
|
24
26
|
|
25
27
|
def test_cls_format_waypoints
|
26
28
|
waypoints = ['start', 'end']
|
27
29
|
|
28
30
|
assert_equal 'waypoint.0=start&waypoint.1=end',
|
29
|
-
|
31
|
+
BR.format_waypoints(waypoints)
|
30
32
|
|
31
33
|
waypoints = ["4.9, -1.2", "1.2, 2.2"]
|
32
34
|
|
33
35
|
assert_equal 'waypoint.0=4.9%2C+-1.2&waypoint.1=1.2%2C+2.2',
|
34
|
-
|
36
|
+
BR.format_waypoints(waypoints)
|
37
|
+
|
38
|
+
assert_equal nil, BR.format_waypoints(nil)
|
39
|
+
end
|
35
40
|
|
36
|
-
|
41
|
+
def test_cls_path
|
42
|
+
assert_match %r[Route], BR.path
|
37
43
|
end
|
38
44
|
|
39
45
|
def test_initialize_with_bbox
|
40
46
|
resource = { 'bbox' => %w[south west north east] }
|
41
47
|
|
42
|
-
bl =
|
48
|
+
bl = BR.new resource
|
43
49
|
|
44
50
|
assert_equal 'north', bl.bounding_box[:north]
|
45
51
|
assert_equal 'east', bl.bounding_box[:east]
|
@@ -50,7 +56,7 @@ class TestBingRoute < MiniTest::Unit::TestCase
|
|
50
56
|
def test_initialize_with_distance_unit
|
51
57
|
resource = { 'distanceUnit' => 'miles' }
|
52
58
|
|
53
|
-
br =
|
59
|
+
br = BR.new resource
|
54
60
|
|
55
61
|
assert_equal 'miles', br.distance_unit
|
56
62
|
end
|
@@ -58,7 +64,7 @@ class TestBingRoute < MiniTest::Unit::TestCase
|
|
58
64
|
def test_initialize_with_duration_unit
|
59
65
|
resource = { 'durationUnit' => 'sec' }
|
60
66
|
|
61
|
-
br =
|
67
|
+
br = BR.new resource
|
62
68
|
|
63
69
|
assert_equal 'sec', br.duration_unit
|
64
70
|
end
|
@@ -70,7 +76,7 @@ class TestBingRoute < MiniTest::Unit::TestCase
|
|
70
76
|
}]
|
71
77
|
}
|
72
78
|
|
73
|
-
br =
|
79
|
+
br = BR.new resource
|
74
80
|
|
75
81
|
assert_equal [1,2], br.ending_coordinates
|
76
82
|
end
|
@@ -85,7 +91,7 @@ class TestBingRoute < MiniTest::Unit::TestCase
|
|
85
91
|
}]
|
86
92
|
}
|
87
93
|
|
88
|
-
br =
|
94
|
+
br = BR.new resource
|
89
95
|
|
90
96
|
assert_equal 1, br.itinerary.first.distance
|
91
97
|
assert_equal 2, br.itinerary.last.distance
|
@@ -98,7 +104,7 @@ class TestBingRoute < MiniTest::Unit::TestCase
|
|
98
104
|
}]
|
99
105
|
}
|
100
106
|
|
101
|
-
br =
|
107
|
+
br = BR.new resource
|
102
108
|
|
103
109
|
assert_equal [1,2], br.starting_coordinates
|
104
110
|
end
|
@@ -106,7 +112,7 @@ class TestBingRoute < MiniTest::Unit::TestCase
|
|
106
112
|
def test_initialize_with_total_distance
|
107
113
|
resource = { 'travelDistance' => 117.406223 }
|
108
114
|
|
109
|
-
br =
|
115
|
+
br = BR.new resource
|
110
116
|
|
111
117
|
assert_equal 117.406223, br.total_distance
|
112
118
|
end
|
@@ -114,7 +120,7 @@ class TestBingRoute < MiniTest::Unit::TestCase
|
|
114
120
|
def test_initialize_with_total_duration
|
115
121
|
resource = { 'travelDuration' => 11723 }
|
116
122
|
|
117
|
-
br =
|
123
|
+
br = BR.new resource
|
118
124
|
|
119
125
|
assert_equal 11723, br.total_duration
|
120
126
|
end
|
@@ -126,14 +132,14 @@ class TestBingRoute < MiniTest::Unit::TestCase
|
|
126
132
|
}]
|
127
133
|
}
|
128
134
|
|
129
|
-
br =
|
135
|
+
br = BR.new resource
|
130
136
|
|
131
137
|
assert_equal 'type', br.type
|
132
138
|
end
|
133
139
|
|
134
140
|
def test_initialize_without_resource_raises
|
135
|
-
assert_raises RouteResourceMissing do
|
136
|
-
|
141
|
+
assert_raises Bing::RouteResourceMissing do
|
142
|
+
BR.new nil
|
137
143
|
end
|
138
144
|
end
|
139
145
|
|
data/test/test_core_ext.rb
CHANGED
@@ -10,10 +10,10 @@ class TestCoreExt < MiniTest::Unit::TestCase
|
|
10
10
|
|
11
11
|
def test_to_param
|
12
12
|
query = {:hi_mom => true}
|
13
|
-
assert_equal 'hiMom=true', query.
|
13
|
+
assert_equal 'hiMom=true', query.to_lower_camelized_param
|
14
14
|
|
15
15
|
query[:yep] = false
|
16
|
-
assert_equal 'hiMom=true&yep=false', query.
|
16
|
+
assert_equal 'hiMom=true&yep=false', query.to_lower_camelized_param
|
17
17
|
end
|
18
18
|
|
19
19
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bing
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 2
|
9
|
+
- 0
|
10
|
+
version: 0.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Adam Avilla
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-08-
|
18
|
+
date: 2011-08-05 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: net-http-persistent
|
@@ -140,18 +140,19 @@ files:
|
|
140
140
|
- lib/bing.rb
|
141
141
|
- lib/bing/core_ext.rb
|
142
142
|
- lib/bing/errors.rb
|
143
|
-
- lib/bing/formatting_helper.rb
|
144
143
|
- lib/bing/location.rb
|
145
144
|
- lib/bing/request.rb
|
145
|
+
- lib/bing/rest_resource.rb
|
146
146
|
- lib/bing/route.rb
|
147
147
|
- lib/bing/route/itinerary.rb
|
148
148
|
- test/helper.rb
|
149
149
|
- test/test_bing.rb
|
150
150
|
- test/test_bing_location.rb
|
151
|
+
- test/test_bing_request.rb
|
152
|
+
- test/test_bing_rest_resource.rb
|
151
153
|
- test/test_bing_route.rb
|
152
154
|
- test/test_bing_route_itinerary.rb
|
153
155
|
- test/test_core_ext.rb
|
154
|
-
- test/test_request.rb
|
155
156
|
- .gemtest
|
156
157
|
homepage: https://github.com/hekaldama/bing
|
157
158
|
licenses: []
|
@@ -190,7 +191,8 @@ summary: Bing api client library that exposes all of Bing's api features.
|
|
190
191
|
test_files:
|
191
192
|
- test/test_bing.rb
|
192
193
|
- test/test_bing_location.rb
|
194
|
+
- test/test_bing_rest_resource.rb
|
193
195
|
- test/test_core_ext.rb
|
194
196
|
- test/test_bing_route.rb
|
195
197
|
- test/test_bing_route_itinerary.rb
|
196
|
-
- test/
|
198
|
+
- test/test_bing_request.rb
|
@@ -1,21 +0,0 @@
|
|
1
|
-
##
|
2
|
-
# Responsible for consolidating response formatting logic shared
|
3
|
-
# amongst resources.
|
4
|
-
|
5
|
-
module Bing::FormattingHelper
|
6
|
-
|
7
|
-
##
|
8
|
-
# Decipher bounding box from bbox in Bing response.
|
9
|
-
|
10
|
-
def bbox box
|
11
|
-
south, west, north, east = *box
|
12
|
-
{
|
13
|
-
:north => north,
|
14
|
-
:east => east,
|
15
|
-
:south => south,
|
16
|
-
:west => west,
|
17
|
-
}
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
21
|
-
|