bing 0.1.1 → 0.2.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/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
- def blank?
5
- respond_to?(:empty?) ? empty? : !self
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
- def to_param
9
- to_s
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
- "#{_key}=#{value}"
20
- end
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
- def to_param namespace = nil
27
- collect do |key, value|
28
- value.to_query(namespace ? "#{namespace}[#{key}]" : key)
29
- end.sort * '&'
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
- def camelize first_letter = :upper
37
- case first_letter
38
- when :upper then
39
- self.gsub(/\/(.?)/) {"::#{$1.upcase}"}.gsub(/(?:^|_)(.)/) {$1.upcase}
40
- when :lower then
41
- self[0].chr.downcase + camelize()[1..-1]
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
- class ServiceError < StandardError
5
- def status() 500 end
6
- end
3
+ ##
4
+ # DO NOT use these classes. They are too generic.
7
5
 
8
- class ResourceMissing < StandardError
9
- def status() 502 end
6
+ class ServiceError < StandardError
7
+ def status() 500 end
8
+ end
10
9
 
11
- def message() 'Resource is empty or nil.' end
12
- end
10
+ class ResourceMissing < StandardError
11
+ def status() 502 end
13
12
 
14
- ##
15
- # Raised when we get an invalid response from an underlying server
13
+ def message() 'Resource is empty or nil.' end
14
+ end
16
15
 
17
- class BadGateway < ServiceError
16
+ ##
17
+ # Raised when we get an invalid response from an underlying server
18
18
 
19
- def self.parse_error text, uri = nil
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
- def self.bad_response code, uri, server_message=nil
27
- server_message = " with message #{server_message}" if server_message
28
- error = new "#{uri} returned #{code}#{server_message}"
29
- error.code = code
30
- error.uri = uri
31
- error
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
- # Status code from underlying server
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
- attr_accessor :code
36
+ ##
37
+ # Status code from underlying server
38
38
 
39
- ##
40
- # Text we were unable to parse
39
+ attr_accessor :code
41
40
 
42
- attr_accessor :text
41
+ ##
42
+ # Text we were unable to parse
43
43
 
44
- ##
45
- # URI for this request
44
+ attr_accessor :text
46
45
 
47
- attr_accessor :uri
46
+ ##
47
+ # URI for this request
48
48
 
49
- def status() 502 end
50
- end
49
+ attr_accessor :uri
51
50
 
52
- class ItineraryResourceMissing < ResourceMissing; end
53
- class LocationResourceMissing < ResourceMissing; end
54
- class RouteResourceMissing < ResourceMissing; end
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
- uri = Bing.config[:map_uri].merge(
22
- "#{PATH}?key=#{Bing.config[:api_key]}&#{opts.to_param}"
23
- )
17
+ map_find opts.to_lower_camelized_param
18
+ end
24
19
 
25
- body = JSON.parse get(uri).body
20
+ ##
21
+ # Path to route resource.
26
22
 
27
- body['resourceSets'].first['resources'].map do |resource|
28
- new resource
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
- module Bing::Request
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
+
@@ -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
- uri = Bing.config[:map_uri].merge(
40
- "#{PATH}?key=#{Bing.config[:api_key]}&#{opts.to_param}&#{waypoints}"
41
- )
35
+ map_find params
36
+ end
42
37
 
43
- body = JSON.parse get(uri).body
38
+ ##
39
+ # Path to route resource.
44
40
 
45
- body['resourceSets'].first['resources'].map do |resource|
46
- new resource
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.1.1'
8
+ VERSION = '0.2.0'
9
9
 
10
10
  DEFAULTS = {
11
- :api_key => 'AtsQ7PXwSqL266EUdxMYj3b4-H5A6ubkf8DwH-B4k3rVmmPycUrhmH-lZKHeWXm-',
12
- :api_uri => URI.parse('http://api.bing.net'),
13
- :map_uri => URI.parse('http://dev.virtualearth.net'),
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
@@ -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, '/REST/v1/Locations', body
16
+ mock_map_request 200, BL.path, body
15
17
 
16
- locs = Bing::Location.find :query => '123'
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, '/REST/v1/Locations', '{}'
24
+ mock_map_request 400, BL.path, '{}'
23
25
 
24
- assert_raises BadGateway do
25
- Bing::Location.find :query => '123'
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 = Bing::Location.new resource
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 = Bing::Location.new resource
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 = Bing::Location.new resource
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 = Bing::Location.new resource
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 = Bing::Location.new resource
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 = Bing::Location.new resource
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
- Bing::Location.new nil
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
+
@@ -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, '/REST/v1/Routes', body
22
+ mock_map_request 200, BR.path, body
21
23
 
22
- route = Bing::Route.find :waypoints => ['start', 'end']
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
- Bing::Route.format_waypoints(waypoints)
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
- Bing::Route.format_waypoints(waypoints)
36
+ BR.format_waypoints(waypoints)
37
+
38
+ assert_equal nil, BR.format_waypoints(nil)
39
+ end
35
40
 
36
- assert_equal nil, Bing::Route.format_waypoints(nil)
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 = Bing::Route.new resource
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 = Bing::Route.new resource
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 = Bing::Route.new resource
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 = Bing::Route.new resource
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 = Bing::Route.new resource
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 = Bing::Route.new resource
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 = Bing::Route.new resource
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 = Bing::Route.new resource
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 = Bing::Route.new resource
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
- Bing::Route.new nil
141
+ assert_raises Bing::RouteResourceMissing do
142
+ BR.new nil
137
143
  end
138
144
  end
139
145
 
@@ -51,7 +51,7 @@ class TestBingRouteItinerary < MiniTest::Unit::TestCase
51
51
  end
52
52
 
53
53
  def test_initialize_without_resource_raises
54
- assert_raises ItineraryResourceMissing do
54
+ assert_raises Bing::ItineraryResourceMissing do
55
55
  Bing::Route::Itinerary.new nil
56
56
  end
57
57
  end
@@ -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.to_param
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.to_param
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: 25
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 1
9
- - 1
10
- version: 0.1.1
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-03 00:00:00 Z
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/test_request.rb
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
-