aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/stop_areas_to_way_costs_converter.rb21
-rw-r--r--lib/way_cost.rb7
-rw-r--r--spec/lib/stop_areas_to_way_costs_converter_spec.rb70
3 files changed, 95 insertions, 3 deletions
diff --git a/lib/stop_areas_to_way_costs_converter.rb b/lib/stop_areas_to_way_costs_converter.rb
new file mode 100644
index 000000000..c6a00d31b
--- /dev/null
+++ b/lib/stop_areas_to_way_costs_converter.rb
@@ -0,0 +1,21 @@
+class StopAreasToWayCostsConverter
+ def initialize(stop_areas)
+ @stop_areas = stop_areas
+ end
+
+ def convert
+ @stop_areas.each_cons(2).map do |stop_area_pair|
+ WayCost.new(
+ departure: Geokit::LatLng.new(
+ stop_area_pair[0].latitude,
+ stop_area_pair[0].longitude
+ ),
+ arrival: Geokit::LatLng.new(
+ stop_area_pair[1].latitude,
+ stop_area_pair[1].longitude
+ ),
+ id: "#{stop_area_pair[0].id}-#{stop_area_pair[1].id}"
+ )
+ end
+ end
+end
diff --git a/lib/way_cost.rb b/lib/way_cost.rb
index 5de64177f..9f860308c 100644
--- a/lib/way_cost.rb
+++ b/lib/way_cost.rb
@@ -1,5 +1,5 @@
class WayCost
- attr_reader :departure, :arrival
+ attr_reader :departure, :arrival, :id
attr_accessor :distance, :time
def initialize(
@@ -7,7 +7,7 @@ class WayCost
arrival:,
distance: nil,
time: nil,
- id: nil # TODO: calculate ID automatically
+ id: nil
)
@departure = departure
@arrival = arrival
@@ -21,6 +21,7 @@ class WayCost
@departure == other.departure &&
@arrival == other.arrival &&
@distance == other.distance &&
- @time == other.time
+ @time == other.time &&
+ @id == other.id
end
end
diff --git a/spec/lib/stop_areas_to_way_costs_converter_spec.rb b/spec/lib/stop_areas_to_way_costs_converter_spec.rb
new file mode 100644
index 000000000..7e09ede2e
--- /dev/null
+++ b/spec/lib/stop_areas_to_way_costs_converter_spec.rb
@@ -0,0 +1,70 @@
+RSpec.describe StopAreasToWayCostsConverter do
+ describe "#convert" do
+ it "converts a StopArea collection to WayCosts" do
+ route = create(:route_common)
+ coordinates = [
+ [1.5, 1.8],
+ [2.2, 2.1],
+ [3.0, 3.6],
+ [4.9, 4.3]
+ ]
+
+ stop_areas = coordinates.map do |latlng|
+ stop_area = create(
+ :stop_area,
+ area_type: 'zdep',
+ latitude: latlng[0],
+ longitude: latlng[1]
+ )
+
+ create(
+ :stop_point,
+ route: route,
+ stop_area: stop_area
+ )
+
+ stop_area
+ end
+
+ way_costs = [
+ WayCost.new(
+ departure: Geokit::LatLng.new(
+ stop_areas[0].latitude,
+ stop_areas[0].longitude
+ ),
+ arrival: Geokit::LatLng.new(
+ stop_areas[1].latitude,
+ stop_areas[1].longitude
+ ),
+ id: "#{stop_areas[0].id}-#{stop_areas[1].id}"
+ ),
+ WayCost.new(
+ departure: Geokit::LatLng.new(
+ stop_areas[1].latitude,
+ stop_areas[1].longitude
+ ),
+ arrival: Geokit::LatLng.new(
+ stop_areas[2].latitude,
+ stop_areas[2].longitude
+ ),
+ id: "#{stop_areas[1].id}-#{stop_areas[2].id}"
+ ),
+ WayCost.new(
+ departure: Geokit::LatLng.new(
+ stop_areas[2].latitude,
+ stop_areas[2].longitude
+ ),
+ arrival: Geokit::LatLng.new(
+ stop_areas[3].latitude,
+ stop_areas[3].longitude
+ ),
+ id: "#{stop_areas[2].id}-#{stop_areas[3].id}"
+ )
+ ]
+
+ expect(
+ StopAreasToWayCostsConverter.new(stop_areas).convert
+ ).to eq(way_costs)
+ end
+ end
+end