Skip to content

Commit 58c36d2

Browse files
committed
yeah I know it aint working, I am tired however, taking a nother look tomorow
1 parent 7e6fe44 commit 58c36d2

File tree

3 files changed

+20
-22
lines changed

3 files changed

+20
-22
lines changed

lib/view_component/base.rb

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -45,21 +45,13 @@ def config
4545
delegate :content_security_policy_nonce, to: :helpers
4646

4747
# Config option that strips trailing whitespace in templates before compiling them.
48+
class_attribute :__vc_cache_dependencies, instance_accessor: false, instance_predicate: false, default: []
4849
class_attribute :__vc_strip_trailing_whitespace, instance_accessor: false, instance_predicate: false
4950
self.__vc_strip_trailing_whitespace = false # class_attribute:default doesn't work until Rails 5.2
5051

5152
attr_accessor :__vc_original_view_context
5253

53-
# Compoents can have a cache key that is used to cache the rendered output.
54-
#
55-
# @return [String]
56-
def cache_key
57-
@vc_cache_key = if defined?(__vc_cache_args)
58-
Digest::MD5.hexdigest(
59-
__vc_cache_args.map { |method| send(method) }.join("-")
60-
)
61-
end
62-
end
54+
6355

6456
# Components render in their own view context. Helpers and other functionality
6557
# require a reference to the original Rails view context, an instance of
@@ -121,8 +113,8 @@ def render_in(view_context, &block)
121113
if render?
122114
rendered_template = render_template_for(@__vc_variant, __vc_request&.format&.to_sym).to_s
123115

124-
if cache_key.present?
125-
Rails.cache.fetch(@vc_cache_key) do
116+
if view_cache_dependencies.present?
117+
Rails.cache.fetch(view_cache_dependencies) do
126118
__vc_render_template(rendered_template)
127119
end
128120
else
@@ -276,9 +268,11 @@ def virtual_path
276268
# For caching, such as #cache_if
277269
# @private
278270
def view_cache_dependencies
279-
[]
271+
self.class.view_cache_dependencies
280272
end
281273

274+
alias_method :component_cache_dependencies, :view_cache_dependencies
275+
282276
# For caching, such as #cache_if
283277
#
284278
# @private
@@ -520,12 +514,16 @@ def sidecar_files(extensions)
520514
(sidecar_files - [identifier] + sidecar_directory_files + nested_component_files).uniq
521515
end
522516

517+
518+
523519
def cache_on(*args)
524-
class_eval <<~RUBY, __FILE__, __LINE__ + 1
525-
def __vc_cache_args
526-
#{args}
527-
end
528-
RUBY
520+
self.__vc_cache_dependencies.push(*args)
521+
end
522+
523+
def view_cache_dependencies
524+
return unless __vc_cache_dependencies.any?
525+
526+
__vc_cache_dependencies.map { |dep| send(dep) }.compact
529527
end
530528

531529
# Render a component for each element in a collection ([documentation](/guide/collections)):
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
<p class='cache-component__cache-key'><%= cache_key %></p>
1+
<p class='cache-component__cache-key'><%= view_cache_dependencies %></p>
22
<p class='cache-component__cache-message'><%= "#{foo} #{bar}" %></p>

test/sandbox/test/rendering_test.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1245,16 +1245,16 @@ def test_cache_component
12451245
component = CacheComponent.new(foo: "foo", bar: "bar")
12461246
render_inline(component)
12471247

1248-
assert_selector(".cache-component__cache-key", text: component.cache_key)
1248+
assert_selector(".cache-component__cache-key", text: component.component_cache_dependencies)
12491249
assert_selector(".cache-component__cache-message", text: "foo bar")
12501250

12511251
render_inline(CacheComponent.new(foo: "foo", bar: "bar"))
12521252

1253-
assert_selector(".cache-component__cache-key", text: component.cache_key)
1253+
assert_selector(".cache-component__cache-key", text: component.component_cache_dependencies)
12541254

12551255
render_inline(CacheComponent.new(foo: "foo", bar: "baz"))
12561256

1257-
refute_selector(".cache-component__cache-key", text: component.cache_key)
1257+
refute_selector(".cache-component__cache-key", text: component.component_cache_dependencies)
12581258
refute_selector(".cache-component__cache-message", text: "foo bar")
12591259
end
12601260
end

0 commit comments

Comments
 (0)