diff options
| author | Teddy Wing | 2018-03-27 15:24:27 +0200 |
|---|---|---|
| committer | Teddy Wing | 2018-03-27 16:46:18 +0200 |
| commit | c17665c0cc064c8a14af812dedd645977d110388 (patch) | |
| tree | 78f06c47f06a0b83e785097eb3c72881de0bb322 /lib/tom_tom/matrix | |
| parent | f257a8b3a7ae4c59c6907b41f6e8d7dc74259917 (diff) | |
| download | chouette-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.rb | 25 |
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 |
