view_component 2.74.1 → 2.76.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 64dcea99274ed75352d28004634307fa7db193aa5bf8bf57dd0c9d5c5c241308
4
- data.tar.gz: c097b1034bc3df6216117fc0b32df26a8b02c0922c7e7399b254a6606aa46c31
3
+ metadata.gz: c17ad11c023d788b67aab113d0f09522d73606a41078742b81c0f807ea35aa23
4
+ data.tar.gz: 8d1c75623f80627af69d1cae1859d42b02c21729b45524516a6e76ad8ca63892
5
5
  SHA512:
6
- metadata.gz: efe5f3a05e157482eec4426ae05eef96345da9aa3ae0865c2ce7bc1755e08ae07405ee648923fe84165eca989a87b53f015012f13002202e809c12819c552a5b
7
- data.tar.gz: 7b8bb21b81a1da222b47dd8c8c12cf2c0f7f5e2bd1e74d80ebfc8bf7e1cbe5c54eeab46c80395d3c8bb28809caac8be07ce833e1530af3b982d153d44398fba2
6
+ metadata.gz: 57192b2d9de4714b4ee3ca786e169c02ad654fe7dda69b3e538c1d1f115eff7738326c64d0edbaf78efbb84356a9a5248a940fa0d311c033968a62afc276c76d
7
+ data.tar.gz: 6bac50c320935e1cf1fd17a0ce2d846c1aedc40b63ed9c081a0010f04c5696b1b9b92938997a581df4876c846dbcc3fe2d08e1fc17a593d03842168423e878a6
data/docs/CHANGELOG.md CHANGED
@@ -10,6 +10,56 @@ nav_order: 5
10
10
 
11
11
  ## main
12
12
 
13
+ ## 2.76.0
14
+
15
+ * `Component.with_collection` supports components that accept splatted keyword arguments.
16
+
17
+ *Zee Spencer*
18
+
19
+ * Remove `config.view_component.use_consistent_rendering_lifecycle` since it is no longer planned for 3.0.
20
+
21
+ *Blake Williams*
22
+
23
+ * Prevent polymorphic slots from calculating `content` when setting a slot.
24
+
25
+ *Blake Williams*
26
+
27
+ * Add ability to pass in the preview class to `render_preview`.
28
+
29
+ *Jon Rohan*
30
+
31
+ * Fix issue causing PVC tests to fail in CI.
32
+
33
+ *Cameron Dutro*
34
+
35
+ * Fix YARD docs build task.
36
+
37
+ *Hans Lemuet*
38
+
39
+ * Add Startup Jobs to list of companies using ViewComponent.
40
+
41
+ *Marc Köhlbrugge*
42
+
43
+ * Run PVC's accessibility tests in a single process to avoid resource contention in CI.
44
+
45
+ *Cameron Dutro*
46
+
47
+ ## 2.75.0
48
+
49
+ * Avoid loading ActionView::Base during Rails initialization.
50
+
51
+ *Jonathan del Strother*
52
+
53
+ <!-- vale off -->
54
+ * Mention lambda slots rendering returned values lazily in the guide.
55
+
56
+ *Graham Rogers*
57
+ <!-- vale on -->
58
+
59
+ * Add "ViewComponent In The Wild" articles to resources.
60
+
61
+ *Alexander Baygeldin*
62
+
13
63
  ## 2.74.1
14
64
 
15
65
  * Add more users of ViewComponent to docs.
@@ -273,7 +323,7 @@ nav_order: 5
273
323
 
274
324
  * Revert `Expose Capybara DSL methods directly inside tests.` This change unintentionally broke other Capybara methods and thus introduced a regression. We aren't confident that we can fail forward so we have decided to revert this change.
275
325
 
276
- *Joel Hawksley*, *Blake Williams*
326
+ *Joel Hawksley, Blake Williams*
277
327
 
278
328
  * Revert change making content evaluation consistent.
279
329
 
@@ -356,7 +406,7 @@ nav_order: 5
356
406
 
357
407
  * Add @boardfish and @spone as maintainers.
358
408
 
359
- *Joel Hawksley*, *Cameron Dutro*, *Blake Williams*
409
+ *Joel Hawksley, Cameron Dutro, Blake Williams*
360
410
 
361
411
  * Re-compile updated, inherited templates when class caching is disabled.
362
412
 
@@ -416,13 +466,13 @@ nav_order: 5
416
466
 
417
467
  * Restore removed `rendered_component`, marking it for deprecation in v3.0.0.
418
468
 
419
- *Tyson Gach*, *Richard Macklin*, *Joel Hawksley*
469
+ *Tyson Gach, Richard Macklin, Joel Hawksley*
420
470
 
421
471
  ## 2.56.1
422
472
 
423
473
  * Rename private accessor `rendered_component` to `rendered_content`.
424
474
 
425
- *Yoshiyuki Hirano*, *Simon Dawson*
475
+ *Yoshiyuki Hirano, Simon Dawson*
426
476
 
427
477
  ## 2.56.0
428
478
 
@@ -513,7 +563,7 @@ nav_order: 5
513
563
 
514
564
  * Skip Rails 5.2 in local test environment if using incompatible Ruby version.
515
565
 
516
- *Cameron Dutro*, *Blake Williams*, *Joel Hawksley*
566
+ *Cameron Dutro, Blake Williams, Joel Hawksley*
517
567
 
518
568
  * Improve landing page documentation.
519
569
 
@@ -539,7 +589,7 @@ nav_order: 5
539
589
 
540
590
  * Add the option to use a "global" output buffer so `form_for` and friends can be used with view components.
541
591
 
542
- *Cameron Dutro*, *Blake Williams*
592
+ *Cameron Dutro, Blake Williams*
543
593
 
544
594
  * Fix fragment caching in partials when global output buffer is enabled.
545
595
  * Fix template inheritance when eager loading is disabled.
@@ -676,7 +726,7 @@ nav_order: 5
676
726
 
677
727
  * Add generators to support `tailwindcss-rails`.
678
728
 
679
- *Dino Maric*, *Hans Lemuet*
729
+ *Dino Maric, Hans Lemuet*
680
730
 
681
731
  * Add a namespaced component example to docs.
682
732
 
@@ -857,7 +907,7 @@ nav_order: 5
857
907
 
858
908
  * Rename internal accessor to use private naming.
859
909
 
860
- *Joel Hawksley*, *Blake Williams*, *Cameron Dutro*
910
+ *Joel Hawksley, Blake Williams, Cameron Dutro*
861
911
 
862
912
  * Add Github repo link to docs website header.
863
913
 
@@ -925,7 +975,7 @@ nav_order: 5
925
975
 
926
976
  * Add support for `image_path` helper in previews.
927
977
 
928
- *Tobias Ahlin*, *Joel Hawksley*
978
+ *Tobias Ahlin, Joel Hawksley*
929
979
 
930
980
  * Add section to docs listing users of ViewComponent. Please submit a PR to add your team to the list!
931
981
 
@@ -963,7 +1013,7 @@ nav_order: 5
963
1013
 
964
1014
  * Fix bug where `helpers` would instantiate and use a new `view_context` in each component.
965
1015
 
966
- *Blake Williams*, *Ian C. Anderson*
1016
+ *Blake Williams, Ian C. Anderson*
967
1017
 
968
1018
  * Implement polymorphic slots as experimental feature. See the Slots documentation to learn more.
969
1019
 
@@ -990,7 +1040,7 @@ nav_order: 5
990
1040
 
991
1041
  * Fix bug where `with_collection_parameter` didn't inherit from parent component.
992
1042
 
993
- *Will Drexler*, *Christian Campoli*
1043
+ *Will Drexler, Christian Campoli*
994
1044
 
995
1045
  * Allow query parameters in `with_request_url` test helper.
996
1046
 
@@ -1030,7 +1080,7 @@ nav_order: 5
1030
1080
 
1031
1081
  * Clarify documentation of `with_variant` as an override of Action Pack.
1032
1082
 
1033
- *Blake Williams*, *Cameron Dutro*, *Joel Hawksley*
1083
+ *Blake Williams, Cameron Dutro, Joel Hawksley*
1034
1084
 
1035
1085
  * Update docs page to be called Javascript and CSS, rename Building ViewComponents to Guide.
1036
1086
 
@@ -1055,7 +1105,7 @@ nav_order: 5
1055
1105
 
1056
1106
  * Clarify slots example in docs to reduce naming confusion.
1057
1107
 
1058
- *Joel Hawksley*, *Blake Williams*
1108
+ *Joel Hawksley, Blake Williams*
1059
1109
 
1060
1110
  * Fix error in documentation for `render_many` passthrough slots.
1061
1111
 
@@ -1517,7 +1567,7 @@ _Note: This release includes an underlying change to Slots that may affect incor
1517
1567
 
1518
1568
  * Add support for templates as ViewComponent::Preview examples.
1519
1569
 
1520
- *Juan Manuel Ramallo
1570
+ *Juan Manuel Ramallo*
1521
1571
 
1522
1572
  ## 2.14.1
1523
1573
 
@@ -1894,11 +1944,11 @@ _Note: This release includes an underlying change to Slots that may affect incor
1894
1944
 
1895
1945
  *Rainer Borene*
1896
1946
 
1947
+ <!-- vale off -->
1897
1948
  * Fix edge case issue with extracting variants from less conventional source_locations.
1898
1949
 
1899
- <!-- vale proselint.GenderBias = NO -->
1900
1950
  *Ryan Workman*
1901
- <!-- vale proselint.GenderBias = YES -->
1951
+ <!-- vale on -->
1902
1952
 
1903
1953
  ## v1.6.0
1904
1954
 
@@ -1916,7 +1966,7 @@ _Note: This release includes an underlying change to Slots that may affect incor
1916
1966
 
1917
1967
  * Template-less variants fall back to default template.
1918
1968
 
1919
- *Asger Behncke Jacobsen*, *Cesario Uy*
1969
+ *Asger Behncke Jacobsen, Cesario Uy*
1920
1970
 
1921
1971
  * Generated tests use new naming convention.
1922
1972
 
@@ -1932,11 +1982,11 @@ _Note: This release includes an underlying change to Slots that may affect incor
1932
1982
 
1933
1983
  ## v1.5.3
1934
1984
 
1985
+ <!-- vale off -->
1935
1986
  * Add support for RSpec to generators.
1936
1987
 
1937
- <!-- vale proselint.GenderBias = NO -->
1938
1988
  *Dylan Clark, Ryan Workman*
1939
- <!-- vale proselint.GenderBias = YES -->
1989
+ <!-- vale on -->
1940
1990
 
1941
1991
  * Require controllers as part of setting autoload paths.
1942
1992
 
@@ -1958,11 +2008,11 @@ _Note: This release includes an underlying change to Slots that may affect incor
1958
2008
 
1959
2009
  Note: `actionview-component` is now loaded by requiring `actionview/component`, not `actionview/component/base`.
1960
2010
 
2011
+ <!-- vale off -->
1961
2012
  * Fix issue with generating component method signatures.
1962
2013
 
1963
- <!-- vale proselint.GenderBias = NO -->
1964
2014
  *Ryan Workman, Dylan Clark*
1965
- <!-- vale proselint.GenderBias = YES -->
2015
+ <!-- vale off -->
1966
2016
 
1967
2017
  * Create component generator.
1968
2018
 
@@ -19,9 +19,16 @@ module ViewComponent
19
19
  class << self
20
20
  delegate(*ViewComponent::Config.defaults.keys, to: :config)
21
21
 
22
+ # Returns the current config.
23
+ #
24
+ # @return [ViewComponent::Config]
22
25
  def config
23
- @config ||= ViewComponent::Config.defaults
26
+ @config ||= ActiveSupport::OrderedOptions.new
24
27
  end
28
+
29
+ # Replaces the entire config. You shouldn't need to use this directly
30
+ # unless you're building a `ViewComponent::Config` elsewhere.
31
+ attr_writer :config
25
32
  end
26
33
 
27
34
  include ViewComponent::ContentAreas
@@ -123,11 +130,6 @@ module ViewComponent
123
130
  before_render
124
131
 
125
132
  if render?
126
- # Ensure `content` is evaluated before rendering the template, this is
127
- # needed so slots and other side-effects are performed before the
128
- # component template is evaluated.
129
- content if self.class.use_consistent_rendering_lifecycle
130
-
131
133
  render_template_for(@__vc_variant).to_s + output_postamble
132
134
  else
133
135
  ""
@@ -333,18 +335,6 @@ module ViewComponent
333
335
  # Defaults to `nil`. If this is falsy, `app/components` is used.
334
336
  #
335
337
 
336
- # Evaluate `#content` before `#call` to ensure side-effects are present
337
- # during component renders. This will be the default behavior in a future
338
- # release.
339
- #
340
- # ```ruby
341
- # config.view_component.use_consistent_rendering_lifecycle = true
342
- # ```
343
- #
344
- # Defaults to `false`
345
- #
346
- mattr_accessor :use_consistent_rendering_lifecycle, instance_writer: false, default: false
347
-
348
338
  # Parent class for generated components
349
339
  #
350
340
  # ```ruby
@@ -412,7 +402,7 @@ module ViewComponent
412
402
  # Find sidecar files for the given extensions.
413
403
  #
414
404
  # The provided array of extensions is expected to contain
415
- # strings starting without the "dot", example: `["erb", "haml"]`.
405
+ # strings starting without the dot, example: `["erb", "haml"]`.
416
406
  #
417
407
  # For example, one might collect sidecar CSS files that need to be compiled.
418
408
  # @param extensions [Array<String>] Extensions of which to return matching sidecar files.
@@ -590,7 +580,7 @@ module ViewComponent
590
580
  parameter = validate_default ? collection_parameter : provided_collection_parameter
591
581
 
592
582
  return unless parameter
593
- return if initialize_parameter_names.include?(parameter)
583
+ return if initialize_parameter_names.include?(parameter) || splatted_keyword_argument_present?
594
584
 
595
585
  # If Ruby can't parse the component class, then the initalize
596
586
  # parameters will be empty and ViewComponent will not be able to render
@@ -646,6 +636,11 @@ module ViewComponent
646
636
 
647
637
  private
648
638
 
639
+ def splatted_keyword_argument_present?
640
+ initialize_parameters.flatten.include?(:keyrest) &&
641
+ !initialize_parameters.include?([:keyrest, :**]) # Un-named splatted keyword args don't count!
642
+ end
643
+
649
644
  def initialize_parameter_names
650
645
  return attribute_names.map(&:to_sym) if respond_to?(:attribute_names)
651
646
 
@@ -34,25 +34,25 @@ module ViewComponent
34
34
  # All options under this namespace default to `false` unless otherwise
35
35
  # stated.
36
36
  #
37
- # #### #sidecar
37
+ # #### `#sidecar`
38
38
  #
39
39
  # Always generate a component with a sidecar directory:
40
40
  #
41
41
  # config.view_component.generate.sidecar = true
42
42
  #
43
- # #### #stimulus_controller
43
+ # #### `#stimulus_controller`
44
44
  #
45
45
  # Always generate a Stimulus controller alongside the component:
46
46
  #
47
47
  # config.view_component.generate.stimulus_controller = true
48
48
  #
49
- # #### #locale
49
+ # #### `#locale`
50
50
  #
51
51
  # Always generate translations file alongside the component:
52
52
  #
53
53
  # config.view_component.generate.locale = true
54
54
  #
55
- # #### #distinct_locale_files
55
+ # #### `#distinct_locale_files`
56
56
  #
57
57
  # Always generate as many translations files as available locales:
58
58
  #
@@ -61,7 +61,7 @@ module ViewComponent
61
61
  # One file will be generated for each configured `I18n.available_locales`,
62
62
  # falling back to `[:en]` when no `available_locales` is defined.
63
63
  #
64
- # #### #preview
64
+ # #### `#preview`
65
65
  #
66
66
  # Always generate a preview alongside the component:
67
67
  #
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  layout: default
3
- title: API
3
+ title: API reference
4
4
  nav_order: 3
5
5
  ---
6
6
 
@@ -57,7 +57,7 @@ module ViewComponent
57
57
 
58
58
  def call
59
59
  <<~DOCS.chomp
60
- #{separator}#{signature_or_name}#{types}#{suffix}
60
+ `#{separator}#{signature_or_name}`#{types}#{suffix}
61
61
 
62
62
  #{docstring_and_deprecation_text}
63
63
  DOCS
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "rails"
4
- require "view_component/base"
4
+ require "view_component/config"
5
5
 
6
6
  module ViewComponent
7
7
  class Engine < Rails::Engine # :nodoc:
8
- config.view_component = ViewComponent::Base.config
8
+ config.view_component = ViewComponent::Config.defaults
9
9
 
10
10
  rake_tasks do
11
11
  load "view_component/rails/tasks/view_component.rake"
@@ -14,9 +14,6 @@ module ViewComponent
14
14
  initializer "view_component.set_configs" do |app|
15
15
  options = app.config.view_component
16
16
 
17
- %i[generate preview_controller preview_route show_previews_source].each do |config_option|
18
- options[config_option] ||= ViewComponent::Base.public_send(config_option)
19
- end
20
17
  options.instrumentation_enabled = false if options.instrumentation_enabled.nil?
21
18
  options.render_monkey_patch_enabled = true if options.render_monkey_patch_enabled.nil?
22
19
  options.show_previews = (Rails.env.development? || Rails.env.test?) if options.show_previews.nil?
@@ -39,6 +36,8 @@ module ViewComponent
39
36
 
40
37
  initializer "view_component.enable_instrumentation" do |app|
41
38
  ActiveSupport.on_load(:view_component) do
39
+ Base.config = app.config.view_component
40
+
42
41
  if app.config.view_component.instrumentation_enabled.present?
43
42
  # :nocov:
44
43
  ViewComponent::Base.prepend(ViewComponent::Instrumentation)
@@ -89,7 +89,7 @@ module ViewComponent
89
89
  def set_polymorphic_slot(slot_name, poly_type = nil, *args, &block)
90
90
  slot_definition = self.class.registered_slots[slot_name]
91
91
 
92
- if !slot_definition[:collection] && get_slot(slot_name)
92
+ if !slot_definition[:collection] && (defined?(@__vc_set_slots) && @__vc_set_slots[slot_name])
93
93
  raise ArgumentError, "content for slot '#{slot_name}' has already been provided"
94
94
  end
95
95
 
@@ -81,22 +81,10 @@ module ViewComponent
81
81
  # In RSpec, `Preview` is appended to `described_class`.
82
82
  #
83
83
  # @param name [String] The name of the preview to be rendered.
84
+ # @param from [ViewComponent::Preview] The class of the preview to be rendered.
84
85
  # @param params [Hash] Parameters to be passed to the preview.
85
86
  # @return [Nokogiri::HTML]
86
- def render_preview(name, params: {})
87
- begin
88
- preview_klass = if respond_to?(:described_class)
89
- raise "`render_preview` expected a described_class, but it is nil." if described_class.nil?
90
-
91
- "#{described_class}Preview"
92
- else
93
- self.class.name.gsub("Test", "Preview")
94
- end
95
- preview_klass = preview_klass.constantize
96
- rescue NameError
97
- raise NameError, "`render_preview` expected to find #{preview_klass}, but it does not exist."
98
- end
99
-
87
+ def render_preview(name, from: preview_class, params: {})
100
88
  previews_controller = build_controller(Rails.application.config.view_component.preview_controller.constantize)
101
89
 
102
90
  # From what I can tell, it's not possible to overwrite all request parameters
@@ -105,7 +93,7 @@ module ViewComponent
105
93
  previews_controller.request.params[k] = v
106
94
  end
107
95
 
108
- previews_controller.request.params[:path] = "#{preview_klass.preview_name}/#{name}"
96
+ previews_controller.request.params[:path] = "#{from.preview_name}/#{name}"
109
97
  previews_controller.response = ActionDispatch::Response.new
110
98
  result = previews_controller.previews
111
99
 
@@ -216,5 +204,20 @@ module ViewComponent
216
204
  def build_controller(klass)
217
205
  klass.new.tap { |c| c.request = request }.extend(Rails.application.routes.url_helpers)
218
206
  end
207
+
208
+ private
209
+
210
+ def preview_class
211
+ result = if respond_to?(:described_class)
212
+ raise "`render_preview` expected a described_class, but it is nil." if described_class.nil?
213
+
214
+ "#{described_class}Preview"
215
+ else
216
+ self.class.name.gsub("Test", "Preview")
217
+ end
218
+ result = result.constantize
219
+ rescue NameError
220
+ raise NameError, "`render_preview` expected to find #{result}, but it does not exist."
221
+ end
219
222
  end
220
223
  end
@@ -3,8 +3,8 @@
3
3
  module ViewComponent
4
4
  module VERSION
5
5
  MAJOR = 2
6
- MINOR = 74
7
- PATCH = 1
6
+ MINOR = 76
7
+ PATCH = 0
8
8
 
9
9
  STRING = [MAJOR, MINOR, PATCH].join(".")
10
10
  end
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: 2.74.1
4
+ version: 2.76.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: 2022-10-10 00:00:00.000000000 Z
11
+ date: 2022-11-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport