aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/way_cost_collection_json_serializer.rb16
-rw-r--r--spec/lib/way_cost_collection_json_serializer_spec.rb37
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