view_component 3.13.0 → 3.14.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7355cbed890e04169fee1c12513cd045bee0e912838c9d368be9317ee801bfcc
4
- data.tar.gz: 76b95e2aab1e097356e06c4c6695a12a1fc0cc3344f3657c1bf42bcb587157cc
3
+ metadata.gz: 7ef8c603bedd61511ed3eb2da02cd7aaccc5b890ad20badac0cfc9a3e7d4af1e
4
+ data.tar.gz: f756c5bd11f44e7e8984d6cb6b29ec409dc082d83864ee4bd82c50adc784310c
5
5
  SHA512:
6
- metadata.gz: f3f7b42ee9a138203348eb6a6560e0d67f041c0d66aaf5eb8465ac6f2ef506eab543a5c408f2a879c70228ae6bef029fc3a916f36344a8835bb8e9d29c4bf89b
7
- data.tar.gz: cd8d3a36c04d72941503a255f0143d7ea6f5178364e20e1fac834a7e5ac683b0915588b14cda7c9025bc4ac4cba476c184780940606a968b5449167a9428440f
6
+ metadata.gz: 8815314944335c3b69196bf5ba8779e10ec78a3146e8cc51d4d278d5e444035c8bc50858315c45e5556337e925ab94f4afee6b3283839079db6892292bec3581
7
+ data.tar.gz: 42c9159369779c50a9904525239d5bf3daa62ed5373104cb11f80251b9481a8225290421d0d9a5663e9f7c7e0bd4d73c63a53bc44845dc4b5bc23a0419869301
data/docs/CHANGELOG.md CHANGED
@@ -10,6 +10,40 @@ nav_order: 5
10
10
 
11
11
  ## main
12
12
 
13
+ ## 3.14.0
14
+
15
+ * Defer to built-in caching for language environment setup, rather than manually using `actions/cache` in CI.
16
+
17
+ *Simon Fish*
18
+
19
+ * Add test coverage for use of `turbo_stream` helpers in components when `capture_compatibility_patch_enabled` is `true`.
20
+
21
+ *Simon Fish*
22
+
23
+ * Add experimental `SlotableDefault` module, allowing components to define a `default_SLOTNAME` method to provide a default value for slots.
24
+
25
+ *Joel Hawksley*
26
+
27
+ * Add documentation on rendering ViewComponents outside of the view context.
28
+
29
+ *Joel Hawksley*
30
+
31
+ * Look for preview files that end in `preview.rb` rather than `_preview.rb` to allow previews to exist in sidecar directory with test files.
32
+
33
+ *Seth Herr*
34
+
35
+ * Add `assert_component_rendered` test helper.
36
+
37
+ *Reegan Viljoen*
38
+
39
+ * Add `prefix:` option to `use_helpers`.
40
+
41
+ *Reegan Viljoen*
42
+
43
+ * Add support for Rails 7.2.
44
+
45
+ *Reegan Viljoen*
46
+
13
47
  ## 3.13.0
14
48
 
15
49
  * Add ruby head and YJIT to CI.
@@ -10,6 +10,7 @@ require "view_component/errors"
10
10
  require "view_component/inline_template"
11
11
  require "view_component/preview"
12
12
  require "view_component/slotable"
13
+ require "view_component/slotable_default"
13
14
  require "view_component/translatable"
14
15
  require "view_component/with_content_helper"
15
16
  require "view_component/use_helpers"
@@ -86,6 +86,12 @@ module ViewComponent
86
86
  define_render_template_for
87
87
  end
88
88
 
89
+ component_class.registered_slots.each do |slot_name, config|
90
+ config[:default_method] = component_class.instance_methods.find { |method_name| method_name == :"default_#{slot_name}" }
91
+
92
+ component_class.registered_slots[slot_name] = config
93
+ end
94
+
89
95
  component_class.build_i18n_backend
90
96
 
91
97
  CompileCache.register(component_class)
@@ -102,7 +102,7 @@ module ViewComponent # :nodoc:
102
102
 
103
103
  def load_previews
104
104
  Array(preview_paths).each do |preview_path|
105
- Dir["#{preview_path}/**/*_preview.rb"].sort.each { |file| require_dependency file }
105
+ Dir["#{preview_path}/**/*preview.rb"].sort.each { |file| require_dependency file }
106
106
  end
107
107
  end
108
108
 
@@ -266,10 +266,7 @@ module ViewComponent
266
266
  end
267
267
 
268
268
  def define_slot(slot_name, collection:, callable:)
269
- # Setup basic slot data
270
- slot = {
271
- collection: collection
272
- }
269
+ slot = {collection: collection}
273
270
  return slot unless callable
274
271
 
275
272
  # If callable responds to `render_in`, we set it on the slot as a renderable
@@ -0,0 +1,20 @@
1
+ module ViewComponent
2
+ module SlotableDefault
3
+ def get_slot(slot_name)
4
+ @__vc_set_slots ||= {}
5
+
6
+ return super unless !@__vc_set_slots[slot_name] && (default_method = registered_slots[slot_name][:default_method])
7
+
8
+ renderable_value = send(default_method)
9
+ slot = Slot.new(self)
10
+
11
+ if renderable_value.respond_to?(:render_in)
12
+ slot.__vc_component_instance = renderable_value
13
+ else
14
+ slot.__vc_content = renderable_value
15
+ end
16
+
17
+ slot
18
+ end
19
+ end
20
+ end
@@ -14,6 +14,10 @@ module ViewComponent
14
14
  def refute_component_rendered
15
15
  assert_no_selector("body")
16
16
  end
17
+
18
+ def assert_component_rendered
19
+ assert_selector("body")
20
+ end
17
21
  rescue LoadError
18
22
  # We don't have a test case for running an application without capybara installed.
19
23
  # It's probably fine to leave this without coverage.
@@ -4,23 +4,35 @@ module ViewComponent::UseHelpers
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  class_methods do
7
- def use_helpers(*args, from: nil)
8
- args.each { |helper_method| use_helper(helper_method, from: from) }
7
+ def use_helpers(*args, from: nil, prefix: false)
8
+ args.each { |helper_method| use_helper(helper_method, from: from, prefix: prefix) }
9
9
  end
10
10
 
11
- def use_helper(helper_method, from: nil)
11
+ def use_helper(helper_method, from: nil, prefix: false)
12
+ helper_method_name = full_helper_method_name(helper_method, prefix: prefix, source: from)
13
+
12
14
  class_eval(<<-RUBY, __FILE__, __LINE__ + 1)
13
- def #{helper_method}(*args, &block)
15
+ def #{helper_method_name}(*args, &block)
14
16
  raise HelpersCalledBeforeRenderError if view_context.nil?
15
17
 
16
18
  #{define_helper(helper_method: helper_method, source: from)}
17
19
  end
18
20
  RUBY
19
- ruby2_keywords(helper_method) if respond_to?(:ruby2_keywords, true)
21
+ ruby2_keywords(helper_method_name) if respond_to?(:ruby2_keywords, true)
20
22
  end
21
23
 
22
24
  private
23
25
 
26
+ def full_helper_method_name(helper_method, prefix: false, source: nil)
27
+ return helper_method unless prefix.present?
28
+
29
+ if !!prefix == prefix
30
+ "#{source.to_s.underscore}_#{helper_method}"
31
+ else
32
+ "#{prefix}_#{helper_method}"
33
+ end
34
+ end
35
+
24
36
  def define_helper(helper_method:, source:)
25
37
  return "__vc_original_view_context.#{helper_method}(*args, &block)" unless source.present?
26
38
 
@@ -3,7 +3,7 @@
3
3
  module ViewComponent
4
4
  module VERSION
5
5
  MAJOR = 3
6
- MINOR = 13
6
+ MINOR = 14
7
7
  PATCH = 0
8
8
  PRE = nil
9
9
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: view_component
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.13.0
4
+ version: 3.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ViewComponent Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-07-15 00:00:00.000000000 Z
11
+ date: 2024-08-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -380,6 +380,20 @@ dependencies:
380
380
  - - "~>"
381
381
  - !ruby/object:Gem::Version
382
382
  version: 3.4.2
383
+ - !ruby/object:Gem::Dependency
384
+ name: turbo-rails
385
+ requirement: !ruby/object:Gem::Requirement
386
+ requirements:
387
+ - - "~>"
388
+ - !ruby/object:Gem::Version
389
+ version: '1'
390
+ type: :development
391
+ prerelease: false
392
+ version_requirements: !ruby/object:Gem::Requirement
393
+ requirements:
394
+ - - "~>"
395
+ - !ruby/object:Gem::Version
396
+ version: '1'
383
397
  - !ruby/object:Gem::Dependency
384
398
  name: warning
385
399
  requirement: !ruby/object:Gem::Requirement
@@ -530,6 +544,7 @@ files:
530
544
  - lib/view_component/rendering_monkey_patch.rb
531
545
  - lib/view_component/slot.rb
532
546
  - lib/view_component/slotable.rb
547
+ - lib/view_component/slotable_default.rb
533
548
  - lib/view_component/system_test_case.rb
534
549
  - lib/view_component/system_test_helpers.rb
535
550
  - lib/view_component/test_case.rb