Skip to content

Commit 8063bd1

Browse files
committed
yeah I know it aint working, I am tired however, taking a nother look tomorow
1 parent db1157c commit 8063bd1

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
@@ -128,8 +120,8 @@ def render_in(view_context, &block)
128120
end
129121
end.to_s
130122

131-
if cache_key.present?
132-
Rails.cache.fetch(@vc_cache_key) do
123+
if view_cache_dependencies.present?
124+
Rails.cache.fetch(view_cache_dependencies) do
133125
__vc_render_template(rendered_template)
134126
end
135127
else
@@ -283,9 +275,11 @@ def virtual_path
283275
# For caching, such as #cache_if
284276
# @private
285277
def view_cache_dependencies
286-
[]
278+
self.class.view_cache_dependencies
287279
end
288280

281+
alias_method :component_cache_dependencies, :view_cache_dependencies
282+
289283
# For caching, such as #cache_if
290284
#
291285
# @private
@@ -516,12 +510,16 @@ def sidecar_files(extensions)
516510
(sidecar_files - [source_location] + sidecar_directory_files + nested_component_files).uniq
517511
end
518512

513+
514+
519515
def cache_on(*args)
520-
class_eval <<~RUBY, __FILE__, __LINE__ + 1
521-
def __vc_cache_args
522-
#{args}
523-
end
524-
RUBY
516+
self.__vc_cache_dependencies.push(*args)
517+
end
518+
519+
def view_cache_dependencies
520+
return unless __vc_cache_dependencies.any?
521+
522+
__vc_cache_dependencies.map { |dep| send(dep) }.compact
525523
end
526524

527525
# 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
@@ -1220,16 +1220,16 @@ def test_cache_component
12201220
component = CacheComponent.new(foo: "foo", bar: "bar")
12211221
render_inline(component)
12221222

1223-
assert_selector(".cache-component__cache-key", text: component.cache_key)
1223+
assert_selector(".cache-component__cache-key", text: component.component_cache_dependencies)
12241224
assert_selector(".cache-component__cache-message", text: "foo bar")
12251225

12261226
render_inline(CacheComponent.new(foo: "foo", bar: "bar"))
12271227

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

12301230
render_inline(CacheComponent.new(foo: "foo", bar: "baz"))
12311231

1232-
refute_selector(".cache-component__cache-key", text: component.cache_key)
1232+
refute_selector(".cache-component__cache-key", text: component.component_cache_dependencies)
12331233
refute_selector(".cache-component__cache-message", text: "foo bar")
12341234
end
12351235

0 commit comments

Comments
 (0)