google_distance_matrix 0.4.0 → 0.6.3

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.
Files changed (44) hide show
  1. checksums.yaml +5 -5
  2. data/.editorconfig +16 -0
  3. data/.rubocop.yml +6 -0
  4. data/.ruby-version +1 -1
  5. data/.travis.yml +4 -6
  6. data/CHANGELOG.md +40 -0
  7. data/Gemfile +2 -0
  8. data/README.md +0 -3
  9. data/Rakefile +9 -4
  10. data/google_distance_matrix.gemspec +21 -19
  11. data/lib/google_distance_matrix.rb +25 -23
  12. data/lib/google_distance_matrix/client.rb +32 -18
  13. data/lib/google_distance_matrix/client_cache.rb +9 -3
  14. data/lib/google_distance_matrix/configuration.rb +39 -24
  15. data/lib/google_distance_matrix/errors.rb +6 -3
  16. data/lib/google_distance_matrix/log_subscriber.rb +14 -14
  17. data/lib/google_distance_matrix/logger.rb +7 -5
  18. data/lib/google_distance_matrix/matrix.rb +45 -22
  19. data/lib/google_distance_matrix/place.rb +37 -28
  20. data/lib/google_distance_matrix/places.rb +5 -4
  21. data/lib/google_distance_matrix/polyline_encoder.rb +2 -2
  22. data/lib/google_distance_matrix/polyline_encoder/delta.rb +4 -2
  23. data/lib/google_distance_matrix/polyline_encoder/value_encoder.rb +13 -5
  24. data/lib/google_distance_matrix/railtie.rb +4 -1
  25. data/lib/google_distance_matrix/route.rb +22 -15
  26. data/lib/google_distance_matrix/routes_finder.rb +27 -29
  27. data/lib/google_distance_matrix/url_builder.rb +44 -16
  28. data/lib/google_distance_matrix/url_builder/polyline_encoder_buffer.rb +3 -0
  29. data/lib/google_distance_matrix/version.rb +3 -1
  30. data/spec/lib/google_distance_matrix/client_cache_spec.rb +27 -11
  31. data/spec/lib/google_distance_matrix/client_spec.rb +40 -30
  32. data/spec/lib/google_distance_matrix/configuration_spec.rb +36 -24
  33. data/spec/lib/google_distance_matrix/log_subscriber_spec.rb +13 -44
  34. data/spec/lib/google_distance_matrix/logger_spec.rb +16 -13
  35. data/spec/lib/google_distance_matrix/matrix_spec.rb +90 -57
  36. data/spec/lib/google_distance_matrix/place_spec.rb +38 -25
  37. data/spec/lib/google_distance_matrix/places_spec.rb +29 -28
  38. data/spec/lib/google_distance_matrix/polyline_encoder/delta_spec.rb +5 -3
  39. data/spec/lib/google_distance_matrix/polyline_encoder_spec.rb +7 -2
  40. data/spec/lib/google_distance_matrix/route_spec.rb +11 -9
  41. data/spec/lib/google_distance_matrix/routes_finder_spec.rb +124 -81
  42. data/spec/lib/google_distance_matrix/url_builder_spec.rb +97 -48
  43. data/spec/spec_helper.rb +3 -1
  44. metadata +46 -18
@@ -1,6 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module GoogleDistanceMatrix
4
+ # Class integrating with rails
2
5
  class Railtie < Rails::Railtie
3
- initializer "google_distance_matrix.logger_setup" do
6
+ initializer 'google_distance_matrix.logger_setup' do
4
7
  GoogleDistanceMatrix.configure_defaults do |config|
5
8
  config.logger = Rails.logger
6
9
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module GoogleDistanceMatrix
2
4
  # Public: Thin wrapper class for an element in the matrix.
3
5
  #
@@ -15,10 +17,9 @@ module GoogleDistanceMatrix
15
17
  duration_in_traffic_text duration_in_traffic_in_seconds
16
18
  ].freeze
17
19
 
18
- attr_reader *ATTRIBUTES
19
-
20
- delegate *(STATUSES.map { |s| s + '?' }), to: :status, allow_nil: true
20
+ attr_reader(*ATTRIBUTES)
21
21
 
22
+ delegate(*(STATUSES.map { |s| s + '?' }), to: :status, allow_nil: true)
22
23
 
23
24
  def initialize(attributes = {})
24
25
  attributes = attributes.with_indifferent_access
@@ -28,25 +29,31 @@ module GoogleDistanceMatrix
28
29
 
29
30
  @status = ActiveSupport::StringInquirer.new attributes[:status].downcase
30
31
 
31
- if ok?
32
- @distance_text = attributes[:distance][:text]
33
- @distance_in_meters = attributes[:distance][:value]
34
- @duration_text = attributes[:duration][:text]
35
- @duration_in_seconds = attributes[:duration][:value]
32
+ assign attributes if ok?
33
+ end
36
34
 
37
- if attributes.key? :duration_in_traffic
38
- @duration_in_traffic_text = attributes[:duration_in_traffic][:text]
39
- @duration_in_traffic_in_seconds = attributes[:duration_in_traffic][:value]
40
- end
35
+ def inspect
36
+ attrs = ATTRIBUTES.reject do |a|
37
+ public_send(a).blank?
41
38
  end
39
+
40
+ inspection = attrs.map { |a| "#{a}: #{public_send(a).inspect}" }.join ', '
41
+
42
+ "#<#{self.class} #{inspection}>"
42
43
  end
43
44
 
45
+ private
44
46
 
47
+ def assign(attributes)
48
+ @distance_text = attributes[:distance][:text]
49
+ @distance_in_meters = attributes[:distance][:value]
50
+ @duration_text = attributes[:duration][:text]
51
+ @duration_in_seconds = attributes[:duration][:value]
45
52
 
46
- def inspect
47
- inspection = ATTRIBUTES.reject { |a| public_send(a).blank? }.map { |a| "#{a}: #{public_send(a).inspect}" }.join ', '
53
+ return unless attributes.key? :duration_in_traffic
48
54
 
49
- "#<#{self.class} #{inspection}>"
55
+ @duration_in_traffic_text = attributes[:duration_in_traffic][:text]
56
+ @duration_in_traffic_in_seconds = attributes[:duration_in_traffic][:value]
50
57
  end
51
58
  end
52
59
  end
@@ -1,17 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module GoogleDistanceMatrix
2
4
  # Public: Has logic for doing finder operations on a matrix.
5
+ #
6
+ # rubocop:disable Metrics/ClassLength
3
7
  class RoutesFinder
4
-
5
8
  attr_reader :matrix
6
9
  delegate :data, :origins, :destinations, :configuration, to: :matrix
7
10
 
8
-
9
11
  def initialize(matrix)
10
12
  @matrix = matrix
11
13
  end
12
14
 
13
-
14
-
15
15
  # Public: Finds routes for given place.
16
16
  #
17
17
  # place - Either an origin or destination, or an object which you built the place from
@@ -25,7 +25,7 @@ module GoogleDistanceMatrix
25
25
  elsif destinations.include? place
26
26
  routes_for_destination place
27
27
  else
28
- fail ArgumentError, "Given place not an origin nor destination."
28
+ raise ArgumentError, 'Given place not an origin nor destination.'
29
29
  end
30
30
  end
31
31
 
@@ -41,11 +41,11 @@ module GoogleDistanceMatrix
41
41
  end
42
42
  end
43
43
 
44
-
45
44
  # Public: Finds a route for you based on one origin and destination
46
45
  #
47
46
  # origin - A place representing the origin, or an object which you built the origin from
48
- # destination - A place representing the destination, or an object which you built the destination from
47
+ # destination - A place representing the destination, or an object which you built the
48
+ # destination from
49
49
  #
50
50
  # A Route for given origin and destination
51
51
  def route_for(options = {})
@@ -54,9 +54,7 @@ module GoogleDistanceMatrix
54
54
  origin = ensure_place options[:origin]
55
55
  destination = ensure_place options[:destination]
56
56
 
57
- if origin.nil? || destination.nil?
58
- fail ArgumentError, "Must provide origin and destination"
59
- end
57
+ raise ArgumentError, 'Must provide origin and destination' if origin.nil? || destination.nil?
60
58
 
61
59
  routes_for(origin).detect { |route| route.destination == destination }
62
60
  end
@@ -71,7 +69,6 @@ module GoogleDistanceMatrix
71
69
  end
72
70
  end
73
71
 
74
-
75
72
  # Public: Finds shortes route by distance to a place.
76
73
  #
77
74
  # place - The place, or object place was built from, you want the shortest route to
@@ -79,7 +76,7 @@ module GoogleDistanceMatrix
79
76
  # Returns shortest route, or nil if no routes had status ok
80
77
  def shortest_route_by_distance_to(place_or_object_place_was_built_from)
81
78
  routes = routes_for place_or_object_place_was_built_from
82
- select_ok_routes(routes).min_by &:distance_in_meters
79
+ select_ok_routes(routes).min_by(&:distance_in_meters)
83
80
  end
84
81
 
85
82
  # Public: Finds shortes route by distance to a place.
@@ -88,7 +85,7 @@ module GoogleDistanceMatrix
88
85
  #
89
86
  # Returns shortest route, fails if any of the routes are not ok
90
87
  def shortest_route_by_distance_to!(place_or_object_place_was_built_from)
91
- routes_for!(place_or_object_place_was_built_from).min_by &:distance_in_meters
88
+ routes_for!(place_or_object_place_was_built_from).min_by(&:distance_in_meters)
92
89
  end
93
90
 
94
91
  # Public: Finds shortes route by duration to a place.
@@ -98,7 +95,7 @@ module GoogleDistanceMatrix
98
95
  # Returns shortest route, or nil if no routes had status ok
99
96
  def shortest_route_by_duration_to(place_or_object_place_was_built_from)
100
97
  routes = routes_for place_or_object_place_was_built_from
101
- select_ok_routes(routes).min_by &:duration_in_seconds
98
+ select_ok_routes(routes).min_by(&:duration_in_seconds)
102
99
  end
103
100
 
104
101
  # Public: Finds shortes route by duration to a place.
@@ -107,7 +104,7 @@ module GoogleDistanceMatrix
107
104
  #
108
105
  # Returns shortest route, fails if any of the routes are not ok
109
106
  def shortest_route_by_duration_to!(place_or_object_place_was_built_from)
110
- routes_for!(place_or_object_place_was_built_from).min_by &:duration_in_seconds
107
+ routes_for!(place_or_object_place_was_built_from).min_by(&:duration_in_seconds)
111
108
  end
112
109
 
113
110
  # Public: Finds shortes route by duration in traffic to a place.
@@ -122,7 +119,7 @@ module GoogleDistanceMatrix
122
119
  ensure_driving_and_departure_time_or_fail!
123
120
 
124
121
  routes = routes_for place_or_object_place_was_built_from
125
- select_ok_routes(routes).min_by &:duration_in_traffic_in_seconds
122
+ select_ok_routes(routes).min_by(&:duration_in_traffic_in_seconds)
126
123
  end
127
124
 
128
125
  # Public: Finds shortes route by duration in traffic to a place.
@@ -136,39 +133,39 @@ module GoogleDistanceMatrix
136
133
  def shortest_route_by_duration_in_traffic_to!(place_or_object_place_was_built_from)
137
134
  ensure_driving_and_departure_time_or_fail!
138
135
 
139
- routes_for!(place_or_object_place_was_built_from).min_by &:duration_in_traffic_in_seconds
136
+ routes_for!(place_or_object_place_was_built_from).min_by(&:duration_in_traffic_in_seconds)
140
137
  end
141
138
 
142
-
143
-
144
139
  private
145
140
 
146
141
  def ensure_place(object)
147
142
  if object.is_a? Place
148
143
  object
149
144
  else
145
+ object = object.with_indifferent_access if object.is_a? Hash
146
+
150
147
  find_place_for_object(origins, object) ||
151
- find_place_for_object(destinations, object)
148
+ find_place_for_object(destinations, object)
152
149
  end
153
150
  end
154
151
 
155
152
  def find_place_for_object(collection, object)
156
153
  collection.detect do |place|
157
154
  place.extracted_attributes_from.present? &&
158
- place.extracted_attributes_from == object
155
+ place.extracted_attributes_from == object
159
156
  end
160
157
  end
161
158
 
162
159
  def routes_for_origin(origin)
163
160
  index = origins.index origin
164
- fail ArgumentError, "Given origin is not i matrix."if index.nil?
161
+ raise ArgumentError, 'Given origin is not i matrix.' if index.nil?
165
162
 
166
163
  data[index]
167
164
  end
168
165
 
169
166
  def routes_for_destination(destination)
170
167
  index = destinations.index destination
171
- fail ArgumentError, "Given destination is not i matrix." if index.nil?
168
+ raise ArgumentError, 'Given destination is not i matrix.' if index.nil?
172
169
 
173
170
  [].tap do |routes|
174
171
  data.each { |row| routes << row[index] }
@@ -180,24 +177,25 @@ module GoogleDistanceMatrix
180
177
  destination_index = destinations.index destination
181
178
 
182
179
  if origin_index.nil? || destination_index.nil?
183
- fail ArgumentError, "Given origin or destination is not i matrix."
180
+ raise ArgumentError, 'Given origin or destination is not i matrix.'
184
181
  end
185
182
 
186
183
  [data[origin_index][destination_index]]
187
184
  end
188
185
 
189
186
  def fail_unless_route_is_ok(route)
190
- fail InvalidRoute.new route unless route.ok?
187
+ raise InvalidRoute, route unless route.ok?
191
188
  end
192
189
 
193
190
  def select_ok_routes(routes)
194
- routes.select &:ok?
191
+ routes.select(&:ok?)
195
192
  end
196
193
 
197
194
  def ensure_driving_and_departure_time_or_fail!
198
- if configuration.mode != 'driving' || configuration.departure_time.nil?
199
- fail InvalidQuery, "Matrix must be in mode driving and a departure_time must be set"
200
- end
195
+ return if configuration.mode == 'driving' && configuration.departure_time.present?
196
+
197
+ raise InvalidQuery, 'Matrix must be in mode driving and a departure_time must be set'
201
198
  end
202
199
  end
200
+ # rubocop:enable Metrics/ClassLength
203
201
  end
@@ -1,9 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'url_builder/polyline_encoder_buffer'
2
4
 
3
5
  module GoogleDistanceMatrix
6
+ # Takes care of building the url for given matrix
4
7
  class UrlBuilder
5
- BASE_URL = "maps.googleapis.com/maps/api/distancematrix/json"
6
- DELIMITER = CGI.escape("|")
8
+ BASE_URL = 'maps.googleapis.com/maps/api/distancematrix/json'
9
+ DELIMITER = CGI.escape('|')
7
10
  MAX_URL_SIZE = 2048
8
11
 
9
12
  attr_reader :matrix
@@ -12,41 +15,62 @@ module GoogleDistanceMatrix
12
15
  def initialize(matrix)
13
16
  @matrix = matrix
14
17
 
15
- fail InvalidMatrix.new matrix if matrix.invalid?
18
+ raise InvalidMatrix, matrix if matrix.invalid?
16
19
  end
17
20
 
18
- def url
19
- @url ||= build_url
21
+ # Returns the URL we'll call Google API with
22
+ #
23
+ # This URL contains key and signature and is therefor
24
+ # sensitive.
25
+ #
26
+ # @return String
27
+ # @see filtered_url
28
+ def sensitive_url
29
+ @sensitive_url ||= build_url
20
30
  end
21
31
 
32
+ # Returns the URL filtered as the configuration of the matrix dictates
33
+ #
34
+ # @return String
35
+ def filtered_url
36
+ filter_url sensitive_url
37
+ end
22
38
 
23
39
  private
24
40
 
25
41
  def build_url
26
- url = [protocol, BASE_URL, "?", get_params_string].join
42
+ url = [protocol, BASE_URL, '?', query_params_string].join
27
43
 
28
44
  if sign_url?
29
- url = GoogleBusinessApiUrlSigner.add_signature(url, configuration.google_business_api_private_key)
45
+ url = GoogleBusinessApiUrlSigner.add_signature(
46
+ url, configuration.google_business_api_private_key
47
+ )
30
48
  end
31
49
 
32
- if url.length > MAX_URL_SIZE
33
- fail MatrixUrlTooLong.new url, MAX_URL_SIZE
50
+ raise MatrixUrlTooLong.new url, MAX_URL_SIZE if url.length > MAX_URL_SIZE
51
+
52
+ url
53
+ end
54
+
55
+ def filter_url(url)
56
+ configuration.filter_parameters_in_logged_url.each do |param|
57
+ url = url.gsub(/(#{param})=.*?(&|$)/, '\1=[FILTERED]\2')
34
58
  end
35
59
 
36
60
  url
37
61
  end
38
62
 
39
63
  def sign_url?
40
- configuration.google_business_api_client_id.present? and
41
- configuration.google_business_api_private_key.present?
64
+ configuration.google_business_api_client_id.present? &&
65
+ configuration.google_business_api_private_key.present?
42
66
  end
43
67
 
44
68
  def include_api_key?
45
69
  configuration.google_api_key.present?
46
70
  end
47
71
 
48
- def get_params_string
49
- params.to_a.map { |key_value| key_value.join("=") }.join("&")
72
+ def query_params_string
73
+ params.to_a.map { |key_value| key_value.join('=') }.join('&')
50
74
  end
51
75
 
52
76
  def params
@@ -56,8 +80,10 @@ module GoogleDistanceMatrix
56
80
  )
57
81
  end
58
82
 
83
+ # rubocop:disable Metrics/MethodLength
84
+ # rubocop:disable Metrics/AbcSize
59
85
  def places_to_param(places)
60
- places_to_param_config = {lat_lng_scale: configuration.lat_lng_scale}
86
+ places_to_param_config = { lat_lng_scale: configuration.lat_lng_scale }
61
87
 
62
88
  out = []
63
89
  polyline_encode_buffer = PolylineEncoderBuffer.new
@@ -67,7 +93,7 @@ module GoogleDistanceMatrix
67
93
  polyline_encode_buffer << place.lat_lng
68
94
  else
69
95
  polyline_encode_buffer.flush to: out
70
- out << escape(place.to_param places_to_param_config)
96
+ out << escape(place.to_param(places_to_param_config))
71
97
  end
72
98
  end
73
99
 
@@ -75,9 +101,11 @@ module GoogleDistanceMatrix
75
101
 
76
102
  out.join(DELIMITER)
77
103
  end
104
+ # rubocop:enable Metrics/MethodLength
105
+ # rubocop:enable Metrics/AbcSize
78
106
 
79
107
  def protocol
80
- configuration.protocol + "://"
108
+ configuration.protocol + '://'
81
109
  end
82
110
 
83
111
  def escape(string)
@@ -1,5 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module GoogleDistanceMatrix
2
4
  class UrlBuilder
5
+ # A buffer to contain Polyline Encoder
3
6
  class PolylineEncoderBuffer
4
7
  def initialize
5
8
  @buffer = []
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module GoogleDistanceMatrix
2
- VERSION = "0.4.0"
4
+ VERSION = '0.6.3'
3
5
  end
@@ -1,25 +1,41 @@
1
- require "spec_helper"
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
2
4
 
3
5
  describe GoogleDistanceMatrix::ClientCache do
4
- let(:url) { "http://www.example.com" }
5
- let(:options) { {hello: :options} }
6
+ let(:config) { GoogleDistanceMatrix::Configuration.new }
7
+ let(:url) { 'http://www.example.com' }
8
+ let(:options) { { hello: :options, configuration: config } }
6
9
 
7
- let(:client) { double get: "data" }
10
+ let(:client) { double get: 'data' }
8
11
  let(:cache) { double }
9
12
 
10
13
  subject { described_class.new client, cache }
11
14
 
12
- describe "#get" do
13
- it "returns from cache if it hits" do
14
- expect(cache).to receive(:fetch).with(url).and_return "cached-data"
15
- expect(subject.get(url, options)).to eq "cached-data"
15
+ # rubocop:disable Metrics/LineLength
16
+ describe '::key' do
17
+ it 'returns a digest of given URL' do
18
+ key = described_class.key 'some url with secret parts', config
19
+ expect(key).to eq 'e90595434d4e321da6b01d2b99d77419ddaa8861d83c5971c4a119ee76bb80a7003915cc16e6966615f205b4a1d5411bb5d4a0d907f611b3fe4cc8d9049f4f9c'
20
+ end
21
+ end
22
+
23
+ describe '#get' do
24
+ it 'returns from cache if it hits' do
25
+ expect(cache)
26
+ .to receive(:fetch)
27
+ .with('2f7d4c4d8a51afd0f9efb9edfda07591591cccc3704130328ad323d3cb5bf7ff19df5e895b402c99217d27d5f4547618094d47069c9ba58370ed8e26cc1de114')
28
+ .and_return 'cached-data'
29
+
30
+ expect(subject.get(url, options)).to eq 'cached-data'
16
31
  end
32
+ # rubocop:enable Metrics/LineLength
17
33
 
18
- it "asks client when cache miss" do
19
- expect(client).to receive(:get).with(url, options).and_return "api-data"
34
+ it 'asks client when cache miss' do
35
+ expect(client).to receive(:get).with(url, options).and_return 'api-data'
20
36
  expect(cache).to receive(:fetch) { |&block| block.call }
21
37
 
22
- expect(subject.get(url, options)).to eq "api-data"
38
+ expect(subject.get(url, options)).to eq 'api-data'
23
39
  end
24
40
  end
25
41
  end
@@ -1,66 +1,76 @@
1
- require "spec_helper"
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
2
4
 
3
5
  describe GoogleDistanceMatrix::Client, :request_recordings do
4
- let(:origin_1) { GoogleDistanceMatrix::Place.new address: "Karl Johans gate, Oslo" }
5
- let(:destination_1) { GoogleDistanceMatrix::Place.new address: "Drammensveien 1, Oslo" }
6
- let(:matrix) { GoogleDistanceMatrix::Matrix.new(origins: [origin_1], destinations: [destination_1]) }
6
+ let(:origin_1) { GoogleDistanceMatrix::Place.new address: 'Karl Johans gate, Oslo' }
7
+ let(:destination_1) { GoogleDistanceMatrix::Place.new address: 'Drammensveien 1, Oslo' }
8
+ let(:matrix) do
9
+ GoogleDistanceMatrix::Matrix.new(origins: [origin_1], destinations: [destination_1])
10
+ end
7
11
 
8
12
  let(:url_builder) { GoogleDistanceMatrix::UrlBuilder.new matrix }
9
- let(:url) { url_builder.url }
13
+ let(:url) { url_builder.sensitive_url }
10
14
 
11
15
  subject { GoogleDistanceMatrix::Client.new }
12
16
 
13
- describe "success" do
17
+ describe 'success' do
14
18
  before { stub_request(:get, url).to_return body: recorded_request_for(:success) }
15
19
 
16
- it "makes the request" do
17
- expect(subject.get(url_builder.url).body).to eq recorded_request_for(:success).read
20
+ it 'makes the request' do
21
+ expect(subject.get(url_builder.sensitive_url).body).to eq recorded_request_for(:success).read
18
22
  end
19
23
  end
20
24
 
21
- describe "client errors" do
22
- describe "server issues 4xx client error" do
23
- it "wraps the error http response" do
24
- stub_request(:get, url).to_return status: [400, "Client error"]
25
- expect { subject.get(url_builder.url) }.to raise_error GoogleDistanceMatrix::ClientError
25
+ describe 'client errors' do
26
+ describe 'server issues 4xx client error' do
27
+ it 'wraps the error http response' do
28
+ stub_request(:get, url).to_return status: [400, 'Client error']
29
+ expect { subject.get(url_builder.sensitive_url) }
30
+ .to raise_error GoogleDistanceMatrix::ClientError
26
31
  end
27
32
 
28
- it "wraps uri too long error" do
29
- stub_request(:get, url).to_return status: [414, "Client error"]
30
- expect { subject.get(url_builder.url) }.to raise_error GoogleDistanceMatrix::MatrixUrlTooLong
33
+ it 'wraps uri too long error' do
34
+ stub_request(:get, url).to_return status: [414, 'Client error']
35
+ expect { subject.get(url_builder.sensitive_url) }
36
+ .to raise_error GoogleDistanceMatrix::MatrixUrlTooLong
31
37
  end
32
38
  end
33
39
 
34
40
  described_class::CLIENT_ERRORS.each do |error|
35
41
  it "wraps '#{error}' client error" do
36
- stub_request(:get, url).to_return body: JSON.generate({status: error})
37
- expect { subject.get(url_builder.url) }.to raise_error GoogleDistanceMatrix::ClientError
42
+ stub_request(:get, url).to_return body: JSON.generate(status: error)
43
+ expect { subject.get(url_builder.sensitive_url) }
44
+ .to raise_error GoogleDistanceMatrix::ClientError
38
45
  end
39
46
  end
40
47
  end
41
48
 
42
- describe "request errors" do
43
- describe "server error" do
44
- before { stub_request(:get, url).to_return status: [500, "Internal Server Error"] }
49
+ describe 'request errors' do
50
+ describe 'server error' do
51
+ before { stub_request(:get, url).to_return status: [500, 'Internal Server Error'] }
45
52
 
46
- it "wraps the error http response" do
47
- expect { subject.get(url_builder.url) }.to raise_error GoogleDistanceMatrix::ServerError
53
+ it 'wraps the error http response' do
54
+ expect { subject.get(url_builder.sensitive_url) }
55
+ .to raise_error GoogleDistanceMatrix::ServerError
48
56
  end
49
57
  end
50
58
 
51
- describe "timeout" do
59
+ describe 'timeout' do
52
60
  before { stub_request(:get, url).to_timeout }
53
61
 
54
- it "wraps the error from Net::HTTP" do
55
- expect { subject.get(url_builder.url).body }.to raise_error GoogleDistanceMatrix::ServerError
62
+ it 'wraps the error from Net::HTTP' do
63
+ expect { subject.get(url_builder.sensitive_url).body }
64
+ .to raise_error GoogleDistanceMatrix::ServerError
56
65
  end
57
66
  end
58
67
 
59
- describe "server error" do
60
- before { stub_request(:get, url).to_return status: [999, "Unknown"] }
68
+ describe 'server error' do
69
+ before { stub_request(:get, url).to_return status: [999, 'Unknown'] }
61
70
 
62
- it "wraps the error http response" do
63
- expect { subject.get(url_builder.url) }.to raise_error GoogleDistanceMatrix::ServerError
71
+ it 'wraps the error http response' do
72
+ expect { subject.get(url_builder.sensitive_url) }
73
+ .to raise_error GoogleDistanceMatrix::ServerError
64
74
  end
65
75
  end
66
76
  end