aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2018-04-16 12:58:22 +0200
committerTeddy Wing2018-04-16 16:21:04 +0200
commit7a9a08325db222b11d22a7e72458e8d66875c42a (patch)
tree9aa8f9dbebd4fbac5f5f17e1643833be6774740d
parentae3933586653c00ea92d788380fc81d3586e4d42 (diff)
downloadchouette-core-6097-cache-route-WayCosts.tar.bz2
WayCost: Add `#cache_key` method6097-cache-route-WayCosts
Provides a uniform Rails cache key for all `WayCost`s using their `id`. Since the `id` field is option, raise an error if the `WayCost` doesn't have one. Refs #6097
-rw-r--r--lib/way_cost.rb8
-rw-r--r--spec/lib/way_cost_spec.rb22
2 files changed, 30 insertions, 0 deletions
diff --git a/lib/way_cost.rb b/lib/way_cost.rb
index 9f860308c..53e69ddb3 100644
--- a/lib/way_cost.rb
+++ b/lib/way_cost.rb
@@ -24,4 +24,12 @@ class WayCost
@time == other.time &&
@id == other.id
end
+
+ def cache_key
+ raise NullIDError if !id
+
+ "way_cost/#{id}"
+ end
+
+ class NullIDError < RuntimeError; end
end
diff --git a/spec/lib/way_cost_spec.rb b/spec/lib/way_cost_spec.rb
new file mode 100644
index 000000000..1e85c68ab
--- /dev/null
+++ b/spec/lib/way_cost_spec.rb
@@ -0,0 +1,22 @@
+RSpec.describe WayCost do
+ describe "#cache_key" do
+ it "returns a cache string including the ID of the WayCost" do
+ way_cost = WayCost.new(
+ departure: Geokit::LatLng.new(47.91231, 1.87606),
+ arrival: Geokit::LatLng.new(52.50867, 13.42879),
+ id: '2-3'
+ )
+
+ expect(way_cost.cache_key).to eq('way_cost/2-3')
+ end
+
+ it "raises an error if the WayCost doesn't have an ID" do
+ way_cost = WayCost.new(
+ departure: Geokit::LatLng.new(47.91231, 1.87606),
+ arrival: Geokit::LatLng.new(52.50867, 13.42879)
+ )
+
+ expect { way_cost.cache_key }.to raise_error(WayCost::NullIDError)
+ end
+ end
+end