aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/tom_tom/matrix.rb19
-rw-r--r--spec/lib/tom_tom/matrix_spec.rb29
2 files changed, 47 insertions, 1 deletions
diff --git a/lib/tom_tom/matrix.rb b/lib/tom_tom/matrix.rb
index b0c8cc335..b57495f3f 100644
--- a/lib/tom_tom/matrix.rb
+++ b/lib/tom_tom/matrix.rb
@@ -20,11 +20,19 @@ module TomTom
req.body = build_request_body(points)
end
+ matrix_json = JSON.parse(response.body)
+
+ check_for_error_response(matrix_json)
+
extract_costs_to_way_costs!(
way_costs,
points_with_ids,
- JSON.parse(response.body)
+ matrix_json
)
+ rescue RemoteError => e
+ Rails.logger.error "TomTom::Matrix server error: #{e}"
+
+ []
end
def points_from_way_costs(way_costs)
@@ -76,6 +84,12 @@ module TomTom
})
end
+ def check_for_error_response(matrix_json)
+ if matrix_json.has_key?('error')
+ raise RemoteError, matrix_json['error']['description']
+ end
+ end
+
def extract_costs_to_way_costs!(way_costs, points, matrix_json)
way_costs = []
@@ -110,5 +124,8 @@ module TomTom
way_costs
end
+
+
+ class RemoteError < RuntimeError; end
end
end
diff --git a/spec/lib/tom_tom/matrix_spec.rb b/spec/lib/tom_tom/matrix_spec.rb
index 605f1d254..be63447d4 100644
--- a/spec/lib/tom_tom/matrix_spec.rb
+++ b/spec/lib/tom_tom/matrix_spec.rb
@@ -149,6 +149,35 @@ RSpec.describe TomTom::Matrix do
end
end
+ describe "#check_for_error_response" do
+ it "raises an RemoteError when an 'error' key is present in the response" do
+ response_body = {
+ 'formatVersion' => '0.0.1',
+ 'error' => {
+ 'description' => 'Output format: csv is unsupported.'
+ }
+ }
+
+ expect {
+ matrix.check_for_error_response(response_body)
+ }.to raise_error(
+ TomTom::Matrix::RemoteError,
+ 'Output format: csv is unsupported.'
+ )
+ end
+
+ it "doesn't raise errors with a normal response" do
+ response_body = {
+ 'formatVersion' => '0.0.1',
+ 'matrix' => []
+ }
+
+ expect {
+ matrix.check_for_error_response(response_body)
+ }.to_not raise_error
+ end
+ end
+
describe "#extract_costs_to_way_costs!" do
it "puts distance & time costs in way_costs" do
way_costs = [