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 | 
