aboutsummaryrefslogtreecommitdiffstats
path: root/lib/tom_tom/matrix
diff options
context:
space:
mode:
authorTeddy Wing2018-03-27 15:24:27 +0200
committerTeddy Wing2018-03-27 16:46:18 +0200
commitc17665c0cc064c8a14af812dedd645977d110388 (patch)
tree78f06c47f06a0b83e785097eb3c72881de0bb322 /lib/tom_tom/matrix
parentf257a8b3a7ae4c59c6907b41f6e8d7dc74259917 (diff)
downloadchouette-core-c17665c0cc064c8a14af812dedd645977d110388.tar.bz2
TomTom::Matrix: Serialize `BigDecimal` as float
Rails serialises `BigDecimal`s as JSON strings to prevent loss of precision. The `latitude` and `longitude` columns in `StopArea` are stored as `BigDecimal`s. The trouble is that TomTom's API requires the latitude & longitude values to be JSON floats, not strings. Make a new JSON serialiser that converts the `BigDecimal` coordinates to float to allow the values to be correctly interpreted by the API. Refs #6222
Diffstat (limited to 'lib/tom_tom/matrix')
-rw-r--r--lib/tom_tom/matrix/request_json_serializer.rb25
1 files changed, 25 insertions, 0 deletions
diff --git a/lib/tom_tom/matrix/request_json_serializer.rb b/lib/tom_tom/matrix/request_json_serializer.rb
new file mode 100644
index 000000000..f4d12e482
--- /dev/null
+++ b/lib/tom_tom/matrix/request_json_serializer.rb
@@ -0,0 +1,25 @@
+module TomTom
+ class Matrix
+ class RequestJSONSerializer
+ def self.dump(hash)
+ hash[:origins].map! do |point|
+ point_to_f(point)
+ end
+ hash[:destinations].map! do |point|
+ point_to_f(point)
+ end
+
+ JSON.dump(hash)
+ end
+
+ private
+
+ def self.point_to_f(point)
+ point[:point][:latitude] = point[:point][:latitude].to_f
+ point[:point][:longitude] = point[:point][:longitude].to_f
+
+ point
+ end
+ end
+ end
+end