diff options
| -rw-r--r-- | app/views/routes/costs.rabl | 4 | ||||
| -rw-r--r-- | lib/route_way_cost_json_serializer.rb | 22 | ||||
| -rw-r--r-- | spec/lib/route_way_cost_json_serializer_spec.rb | 31 |
3 files changed, 56 insertions, 1 deletions
diff --git a/app/views/routes/costs.rabl b/app/views/routes/costs.rabl index d4465d03e..2c336fb51 100644 --- a/app/views/routes/costs.rabl +++ b/app/views/routes/costs.rabl @@ -1,2 +1,4 @@ object @route -attributes :costs +node :costs do + RouteWayCostJSONSerializer.dump(@route.costs) +end diff --git a/lib/route_way_cost_json_serializer.rb b/lib/route_way_cost_json_serializer.rb new file mode 100644 index 000000000..20b3d6ee2 --- /dev/null +++ b/lib/route_way_cost_json_serializer.rb @@ -0,0 +1,22 @@ +class RouteWayCostJSONSerializer + def self.dump(way_costs) + return if way_costs.nil? + + way_costs.each do |_, costs| + costs['distance'] = self.meters_to_kilometers(costs['distance']) + costs['time'] = self.seconds_to_minutes(costs['time']) + end + + JSON.dump(way_costs) + end + + private + + def self.meters_to_kilometers(num) + num / 1000.0 + end + + def self.seconds_to_minutes(num) + num / 60 + end +end diff --git a/spec/lib/route_way_cost_json_serializer_spec.rb b/spec/lib/route_way_cost_json_serializer_spec.rb new file mode 100644 index 000000000..52cb21afc --- /dev/null +++ b/spec/lib/route_way_cost_json_serializer_spec.rb @@ -0,0 +1,31 @@ +RSpec.describe RouteWayCostJSONSerializer do + describe ".dump" do + it "converts distance from meters to km and time from seconds to minutes" do + costs = { + '1-2': { + 'distance' => 35223, + 'time' => 5604 + }, + '94435-97513' => { + 'distance' => 35919, + 'time' => 6174 + } + } + + expect( + RouteWayCostJSONSerializer.dump(costs) + ).to eq(<<-JSON.delete(" \n")) + { + "1-2": { + "distance": 35.223, + "time": 93 + }, + "94435-97513": { + "distance": 35.919, + "time": 102 + } + } + JSON + end + end +end |
