Skip to content

Commit 459f108

Browse files
author
David Heinemeier Hansson
committed
Ensure all caches are cleared when clearing
1 parent 2ee1e26 commit 459f108

File tree

2 files changed

+32
-2
lines changed

2 files changed

+32
-2
lines changed

lib/importmap/map.rb

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,13 +87,21 @@ def cache_as(name)
8787
if result = instance_variable_get("@cached_#{name}")
8888
result
8989
else
90+
remember_cache_key(name)
9091
instance_variable_set("@cached_#{name}", yield)
9192
end
9293
end
9394

95+
def remember_cache_key(name)
96+
@cache_keys ||= Set.new
97+
@cache_keys.add name
98+
end
99+
100+
94101
def clear_cache
95-
@cached_json = nil
96-
@cached_preloaded_module_paths = nil
102+
@cache_keys&.each do |name|
103+
instance_variable_set("@cached_#{name}", nil)
104+
end
97105
end
98106

99107
def rescuable_asset_error?(error)

test/importmap_test.rb

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,28 @@ def setup
6767
assert_match /^\w{40}$/, @importmap.digest(resolver: ApplicationController.helpers)
6868
end
6969

70+
test "separate caches" do
71+
set_one = @importmap.preloaded_module_paths(resolver: ApplicationController.helpers, cache_key: "1").to_s
72+
73+
ActionController::Base.asset_host = "http://assets.example.com"
74+
75+
set_two = @importmap.preloaded_module_paths(resolver: ActionController::Base.helpers, cache_key: "2").to_s
76+
77+
assert_not_equal set_one, set_two
78+
ensure
79+
ActionController::Base.asset_host = nil
80+
end
81+
82+
test "all caches reset" do
83+
set_one = @importmap.preloaded_module_paths(resolver: ApplicationController.helpers, cache_key: "1").to_s
84+
set_two = @importmap.preloaded_module_paths(resolver: ApplicationController.helpers, cache_key: "2").to_s
85+
86+
@importmap.pin "something", to: "https://cdn.example.com/somewhere.js", preload: true
87+
88+
assert_not_equal set_one, @importmap.preloaded_module_paths(resolver: ApplicationController.helpers, cache_key: "1").to_s
89+
assert_not_equal set_two, @importmap.preloaded_module_paths(resolver: ApplicationController.helpers, cache_key: "2").to_s
90+
end
91+
7092
private
7193
def generate_importmap_json
7294
JSON.parse @importmap.to_json(resolver: ApplicationController.helpers)

0 commit comments

Comments
 (0)