diff options
| -rw-r--r-- | lib/way_cost_collection_json_serializer.rb | 16 | ||||
| -rw-r--r-- | spec/lib/way_cost_collection_json_serializer_spec.rb | 37 |
2 files changed, 53 insertions, 0 deletions
diff --git a/lib/way_cost_collection_json_serializer.rb b/lib/way_cost_collection_json_serializer.rb new file mode 100644 index 000000000..191871cca --- /dev/null +++ b/lib/way_cost_collection_json_serializer.rb @@ -0,0 +1,16 @@ +class WayCostCollectionJSONSerializer + def self.dump(way_costs) + return if way_costs.nil? + + costs_by_id = {} + + way_costs.each do |way_cost| + costs_by_id[way_cost.id] = { + distance: way_cost.distance, + time: way_cost.time + } + end + + JSON.dump(costs_by_id) + end +end diff --git a/spec/lib/way_cost_collection_json_serializer_spec.rb b/spec/lib/way_cost_collection_json_serializer_spec.rb new file mode 100644 index 000000000..22faf88d3 --- /dev/null +++ b/spec/lib/way_cost_collection_json_serializer_spec.rb @@ -0,0 +1,37 @@ +RSpec.describe WayCostCollectionJSONSerializer do + describe ".dump" do + it "creates a JSON hash of hashed WayCost attributes" do + way_costs = [ + WayCost.new( + departure: Geokit::LatLng.new(48.85086, 2.36143), + arrival: Geokit::LatLng.new(47.91231, 1.87606), + distance: 1234, + time: 99, + id: '1-2' + ), + WayCost.new( + departure: Geokit::LatLng.new(47.91231, 1.87606), + arrival: Geokit::LatLng.new(52.50867, 13.42879), + distance: 5678, + time: 999, + id: '2-3' + ) + ] + + expect( + WayCostCollectionJSONSerializer.dump(way_costs) + ).to eq(<<-JSON.delete(" \n")) + { + "1-2": { + "distance": 1234, + "time": 99 + }, + "2-3": { + "distance": 5678, + "time": 999 + } + } + JSON + end + end +end |
