view_component 2.29.0 → 2.33.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of view_component might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f8c387807061db7889dbc2e49ccb75a15a2cacd416048a6681b046eb321fb27b
4
- data.tar.gz: fbddc58ff50b3ddaf615f773a681a7a8b7bef3972581dad8b87bf8425efff275
3
+ metadata.gz: 3e1d8f453f26f7d62a3549dcfb34a85a6fadfc05a7b38515ebe53bba7500acc9
4
+ data.tar.gz: 39122c530de9fb557f7e66a0a3e6b94c20c492776edc45b193e2b3b60b834e39
5
5
  SHA512:
6
- metadata.gz: 63a070fc0a5001b888dbd57a2a9fb0660b351a05b522d9a832efdd2a60f981d218eda2f500a50d01ca6a8c5ada4cccb61f2837e7b956215e89528d9454d3fd39
7
- data.tar.gz: 8176f0427272a8305a520eeaa72ae58be2d9df42282a981f376eb69ac0543017f98d737ecb09f6fa6fc8cacf85adbbf82fbefe337da22432448ab361f35ae447
6
+ metadata.gz: 6f016eb4da5b952a220971e0163853b8ca77dd5bc820b634d525316b4117654b78a279ffeb7bb8d66ce68401cc41a350861696152992923445a1c3d6c587b2ed
7
+ data.tar.gz: 4203337d6188eea75e7d79ca246ca5309e5af7197256207e48c37b248958dbad49c07efff0a964d206d9c462ee5d1af3365f36f9f2d9e68661f7dbfe066e4a01
data/CHANGELOG.md CHANGED
@@ -2,6 +2,86 @@
2
2
 
3
3
  ## main
4
4
 
5
+ ## 2.33.0
6
+
7
+ * Add support for `_iteration` parameter when rendering in a collection
8
+
9
+ *Will Cosgrove*
10
+
11
+ * Don't raise an error when rendering empty components.
12
+
13
+ *Alex Robbin*
14
+
15
+ ## 2.32.0
16
+
17
+ * Enable previews by default in test environment.
18
+
19
+ *Edouard Piron*
20
+
21
+ * Fix test helper compatibility with Rails 7.0, TestRequest, and TestSession.
22
+
23
+ *Leo Correa*
24
+
25
+ * Add experimental `_output_postamble` lifecyle method.
26
+
27
+ *Joel Hawksley*
28
+
29
+ * Add compatibility notes on FAQ.
30
+
31
+ *Matheus Richard*
32
+
33
+ * Add Bridgetown on Compatibility documentation.
34
+
35
+ *Matheus Richard*
36
+
37
+ * Are you interested in building the future of ViewComponent? GitHub is looking to hire a Senior Engineer to work on Primer ViewComponents and ViewComponent. Apply here: [US/Canada](https://github.com/careers) / [Europe](https://boards.greenhouse.io/github/jobs/3132294). Feel free to reach out to joelhawksley@github.com with any questions.
38
+
39
+ *Joel Hawksley*
40
+
41
+ ## 2.31.1
42
+
43
+ * Fix `DEPRECATION WARNING: before_render_check` when compiling `ViewComponent::Base`
44
+
45
+ *Dave Kroondyk*
46
+
47
+ ## 2.31.0
48
+
49
+ _Note: This release includes an underlying change to Slots that may affect incorrect usage of the API, where Slots were set on a line prefixed by `<%=`. The result of setting a Slot should not be returned. (`<%`)_
50
+
51
+ * Add `#with_content` to allow setting content without a block.
52
+
53
+ *Jordan Raine, Manuel Puyol*
54
+
55
+ * Add `with_request_url` test helper.
56
+
57
+ *Mario Schüttel*
58
+
59
+ * Improve feature parity with Rails translations
60
+ * Don't create a translation backend if the component has no translation file
61
+ * Mark translation keys ending with `html` as HTML-safe
62
+ * Always convert keys to String
63
+ * Support multiple keys
64
+
65
+ *Elia Schito*
66
+
67
+ * Fix errors on `asset_url` helpers when `asset_host` has no protocol.
68
+
69
+ *Elia Schito*
70
+
71
+ * Prevent slots from overriding the `#content` method when registering a slot with that name.
72
+
73
+ *Blake Williams*
74
+
75
+ * Deprecate `with_slot` in favor of the new [slots API](https://viewcomponent.org/guide/slots.html).
76
+
77
+ *Manuel Puyol*
78
+
79
+ ## 2.30.0
80
+
81
+ * Deprecate `with_content_areas` in favor of [slots](https://viewcomponent.org/guide/slots.html).
82
+
83
+ *Joel Hawksley*
84
+
5
85
  ## 2.29.0
6
86
 
7
87
  * Allow Slot lambdas to share data from the parent component and allow chaining on the returned component.
@@ -7,6 +7,7 @@ module ViewComponent
7
7
 
8
8
  autoload :Base
9
9
  autoload :Compiler
10
+ autoload :ComponentError
10
11
  autoload :Preview
11
12
  autoload :PreviewTemplateError
12
13
  autoload :TestHelpers
@@ -7,12 +7,14 @@ require "view_component/compile_cache"
7
7
  require "view_component/previewable"
8
8
  require "view_component/slotable"
9
9
  require "view_component/slotable_v2"
10
+ require "view_component/with_content_helper"
10
11
 
11
12
  module ViewComponent
12
13
  class Base < ActionView::Base
13
14
  include ActiveSupport::Configurable
14
15
  include ViewComponent::Previewable
15
16
  include ViewComponent::SlotableV2
17
+ include ViewComponent::WithContentHelper
16
18
 
17
19
  ViewContextCalledBeforeRenderError = Class.new(StandardError)
18
20
 
@@ -28,6 +30,7 @@ module ViewComponent
28
30
  # Hook for allowing components to do work as part of the compilation process.
29
31
  #
30
32
  # For example, one might compile component-specific assets at this point.
33
+ # @private TODO: add documentation
31
34
  def self._after_compile
32
35
  # noop
33
36
  end
@@ -56,6 +59,7 @@ module ViewComponent
56
59
  # returns:
57
60
  # <span title="greeting">Hello, world!</span>
58
61
  #
62
+ # @private
59
63
  def render_in(view_context, &block)
60
64
  self.class.compile(raise_errors: true)
61
65
 
@@ -79,13 +83,15 @@ module ViewComponent
79
83
  old_current_template = @current_template
80
84
  @current_template = self
81
85
 
86
+ raise ArgumentError.new("Block provided after calling `with_content`. Use one or the other.") if block && defined?(@_content_set_by_with_content)
87
+
82
88
  @_content_evaluated = false
83
89
  @_render_in_block = block
84
90
 
85
91
  before_render
86
92
 
87
93
  if render?
88
- render_template_for(@variant)
94
+ render_template_for(@variant).to_s + _output_postamble
89
95
  else
90
96
  ""
91
97
  end
@@ -93,18 +99,36 @@ module ViewComponent
93
99
  @current_template = old_current_template
94
100
  end
95
101
 
102
+ # EXPERIMENTAL: Optional content to be returned after the rendered template.
103
+ #
104
+ # @return [String]
105
+ def _output_postamble
106
+ ""
107
+ end
108
+
109
+ # Called before rendering the component. Override to perform operations that depend on having access to the view context, such as helpers.
110
+ #
111
+ # @return [void]
96
112
  def before_render
97
113
  before_render_check
98
114
  end
99
115
 
116
+ # Called after rendering the component.
117
+ #
118
+ # @deprecated Use `before_render` instead. Will be removed in v3.0.0.
119
+ # @return [void]
100
120
  def before_render_check
101
121
  # noop
102
122
  end
103
123
 
124
+ # Override to determine whether the ViewComponent should render.
125
+ #
126
+ # @return [Boolean]
104
127
  def render?
105
128
  true
106
129
  end
107
130
 
131
+ # @private
108
132
  def initialize(*); end
109
133
 
110
134
  # Re-use original view_context if we're not rendering a component.
@@ -112,6 +136,7 @@ module ViewComponent
112
136
  # This prevents an exception when rendering a partial inside of a component that has also been rendered outside
113
137
  # of the component. This is due to the partials compiled template method existing in the parent `view_context`,
114
138
  # and not the component's `view_context`.
139
+ # @private
115
140
  def render(options = {}, args = {}, &block)
116
141
  if options.is_a? ViewComponent::Base
117
142
  super
@@ -120,28 +145,36 @@ module ViewComponent
120
145
  end
121
146
  end
122
147
 
148
+ # The current controller. Use sparingly as doing so introduces coupling that inhibits encapsulation & reuse, often making testing difficult.
149
+ #
150
+ # @return [ActionController::Base]
123
151
  def controller
124
152
  raise ViewContextCalledBeforeRenderError, "`controller` can only be called at render time." if view_context.nil?
125
153
  @controller ||= view_context.controller
126
154
  end
127
155
 
128
- # Provides a proxy to access helper methods from the context of the current controller
156
+ # A proxy through which to access helpers. Use sparingly as doing so introduces coupling that inhibits encapsulation & reuse, often making testing difficult.
157
+ #
158
+ # @return [ActionView::Base]
129
159
  def helpers
130
160
  raise ViewContextCalledBeforeRenderError, "`helpers` can only be called at render time." if view_context.nil?
131
161
  @helpers ||= controller.view_context
132
162
  end
133
163
 
134
164
  # Exposes .virtual_path as an instance method
165
+ # @private
135
166
  def virtual_path
136
167
  self.class.virtual_path
137
168
  end
138
169
 
139
170
  # For caching, such as #cache_if
171
+ # @private
140
172
  def view_cache_dependencies
141
173
  []
142
174
  end
143
175
 
144
176
  # For caching, such as #cache_if
177
+ # @private
145
178
  def format
146
179
  # Ruby 2.6 throws a warning without checking `defined?`, 2.7 does not
147
180
  if defined?(@variant)
@@ -150,6 +183,7 @@ module ViewComponent
150
183
  end
151
184
 
152
185
  # Assign the provided content to the content area accessor
186
+ # @private
153
187
  def with(area, content = nil, &block)
154
188
  unless content_areas.include?(area)
155
189
  raise ArgumentError.new "Unknown content_area '#{area}' - expected one of '#{content_areas}'"
@@ -163,21 +197,22 @@ module ViewComponent
163
197
  nil
164
198
  end
165
199
 
200
+ # @private TODO: add documentation
166
201
  def with_variant(variant)
167
202
  @variant = variant
168
203
 
169
204
  self
170
205
  end
171
206
 
172
- private
173
-
174
- # Exposes the current request to the component.
175
- # Use sparingly as doing so introduces coupling
176
- # that inhibits encapsulation & reuse.
207
+ # The current request. Use sparingly as doing so introduces coupling that inhibits encapsulation & reuse, often making testing difficult.
208
+ #
209
+ # @return [ActionDispatch::Request]
177
210
  def request
178
211
  @request ||= controller.request
179
212
  end
180
213
 
214
+ private
215
+
181
216
  attr_reader :view_context
182
217
 
183
218
  def content
@@ -186,6 +221,8 @@ module ViewComponent
186
221
 
187
222
  @_content = if @view_context && @_render_in_block
188
223
  view_context.capture(self, &@_render_in_block)
224
+ elsif defined?(@_content_set_by_with_content)
225
+ @_content_set_by_with_content
189
226
  end
190
227
  end
191
228
 
@@ -280,7 +317,7 @@ module ViewComponent
280
317
  end
281
318
 
282
319
  def compiled?
283
- template_compiler.compiled?
320
+ compiler.compiled?
284
321
  end
285
322
 
286
323
  # Compile templates to instance methods, assuming they haven't been compiled already.
@@ -288,11 +325,11 @@ module ViewComponent
288
325
  # Do as much work as possible in this step, as doing so reduces the amount
289
326
  # of work done each time a component is rendered.
290
327
  def compile(raise_errors: false)
291
- template_compiler.compile(raise_errors: raise_errors)
328
+ compiler.compile(raise_errors: raise_errors)
292
329
  end
293
330
 
294
- def template_compiler
295
- @_template_compiler ||= Compiler.new(self)
331
+ def compiler
332
+ @_compiler ||= Compiler.new(self)
296
333
  end
297
334
 
298
335
  # we'll eventually want to update this to support other types
@@ -309,6 +346,11 @@ module ViewComponent
309
346
  end
310
347
 
311
348
  def with_content_areas(*areas)
349
+ ActiveSupport::Deprecation.warn(
350
+ "`with_content_areas` is deprecated and will be removed in ViewComponent v3.0.0.\n" \
351
+ "Use slots (https://viewcomponent.org/guide/slots.html) instead."
352
+ )
353
+
312
354
  if areas.include?(:content)
313
355
  raise ArgumentError.new ":content is a reserved content area name. Please use another name, such as ':body'"
314
356
  end
@@ -360,7 +402,7 @@ module ViewComponent
360
402
  def validate_initialization_parameters!
361
403
  return unless initialize_parameter_names.include?(RESERVED_PARAMETER)
362
404
 
363
- raise ArgumentError.new(
405
+ raise ViewComponent::ComponentError.new(
364
406
  "#{self} initializer cannot contain " \
365
407
  "`#{RESERVED_PARAMETER}` since it will override a " \
366
408
  "public ViewComponent method."
@@ -380,7 +422,15 @@ module ViewComponent
380
422
  end
381
423
 
382
424
  def counter_argument_present?
383
- instance_method(:initialize).parameters.map(&:second).include?(collection_counter_parameter)
425
+ initialize_parameter_names.include?(collection_counter_parameter)
426
+ end
427
+
428
+ def collection_iteration_parameter
429
+ "#{collection_parameter}_iteration".to_sym
430
+ end
431
+
432
+ def iteration_argument_present?
433
+ initialize_parameter_names.include?(collection_iteration_parameter)
384
434
  end
385
435
 
386
436
  private
@@ -38,6 +38,7 @@ module ViewComponent
38
38
  def component_options(item, iterator)
39
39
  item_options = { component.collection_parameter => item }
40
40
  item_options[component.collection_counter_parameter] = iterator.index + 1 if component.counter_argument_present?
41
+ item_options[component.collection_iteration_parameter] = iterator if component.iteration_argument_present?
41
42
 
42
43
  @options.merge(item_options)
43
44
  end
@@ -13,12 +13,18 @@ module ViewComponent
13
13
  def compile(raise_errors: false)
14
14
  return if compiled?
15
15
 
16
+ subclass_instance_methods = component_class.instance_methods(false)
17
+
18
+ if subclass_instance_methods.include?(:with_content) && raise_errors
19
+ raise ViewComponent::ComponentError.new("#{component_class} implements a reserved method, `with_content`.")
20
+ end
21
+
16
22
  if template_errors.present?
17
23
  raise ViewComponent::TemplateError.new(template_errors) if raise_errors
18
24
  return false
19
25
  end
20
26
 
21
- if component_class.instance_methods(false).include?(:before_render_check)
27
+ if subclass_instance_methods.include?(:before_render_check)
22
28
  ActiveSupport::Deprecation.warn(
23
29
  "`before_render_check` will be removed in v3.0.0. Use `before_render` instead."
24
30
  )
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ViewComponent
4
+ class ComponentError < StandardError
5
+ end
6
+ end
@@ -12,7 +12,7 @@ module ViewComponent
12
12
  options = app.config.view_component
13
13
 
14
14
  options.render_monkey_patch_enabled = true if options.render_monkey_patch_enabled.nil?
15
- options.show_previews = Rails.env.development? if options.show_previews.nil?
15
+ options.show_previews = Rails.env.development? || Rails.env.test? if options.show_previews.nil?
16
16
  options.preview_route ||= ViewComponent::Base.preview_route
17
17
  options.preview_controller ||= ViewComponent::Base.preview_controller
18
18
 
@@ -1,7 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "view_component/with_content_helper"
4
+
3
5
  module ViewComponent
4
6
  class SlotV2
7
+ include ViewComponent::WithContentHelper
8
+
5
9
  attr_writer :_component_instance, :_content_block, :_content
6
10
 
7
11
  def initialize(parent)
@@ -26,10 +30,18 @@ module ViewComponent
26
30
 
27
31
  view_context = @parent.send(:view_context)
28
32
 
33
+ raise ArgumentError.new("Block provided after calling `with_content`. Use one or the other.") if defined?(@_content_block) && defined?(@_content_set_by_with_content)
34
+
29
35
  @content = if defined?(@_component_instance)
30
- # render_in is faster than `parent.render`
31
- if defined?(@_content_block)
36
+ if defined?(@_content_set_by_with_content)
37
+ @_component_instance.with_content(@_content_set_by_with_content)
38
+
39
+ view_context.capture do
40
+ @_component_instance.render_in(view_context)
41
+ end
42
+ elsif defined?(@_content_block)
32
43
  view_context.capture do
44
+ # render_in is faster than `parent.render`
33
45
  @_component_instance.render_in(view_context, &@_content_block)
34
46
  end
35
47
  else
@@ -41,6 +53,8 @@ module ViewComponent
41
53
  @_content
42
54
  elsif defined?(@_content_block)
43
55
  view_context.capture(&@_content_block)
56
+ elsif defined?(@_content_set_by_with_content)
57
+ @_content_set_by_with_content
44
58
  end
45
59
 
46
60
  @content
@@ -23,6 +23,11 @@ module ViewComponent
23
23
  # class_name: "Header" # class name string, used to instantiate Slot
24
24
  # )
25
25
  def with_slot(*slot_names, collection: false, class_name: nil)
26
+ ActiveSupport::Deprecation.warn(
27
+ "`with_slot` is deprecated and will be removed in ViewComponent v3.0.0.\n" \
28
+ "Use the new slots API (https://viewcomponent.org/guide/slots.html) instead."
29
+ )
30
+
26
31
  slot_names.each do |slot_name|
27
32
  # Ensure slot_name is not already declared
28
33
  if self.slots.key?(slot_name)
@@ -60,7 +60,7 @@ module ViewComponent
60
60
  # helper method with the same name as the slot.
61
61
  #
62
62
  # <%= render_inline(MyComponent.new) do |component| %>
63
- # <%= component.header(classes: "Foo") do %>
63
+ # <% component.header(classes: "Foo") do %>
64
64
  # <p>Bar</p>
65
65
  # <% end %>
66
66
  # <% end %>
@@ -95,7 +95,7 @@ module ViewComponent
95
95
  # helper method with the same name as the slot.
96
96
  #
97
97
  # <h1>
98
- # <%= items.each do |item| %>
98
+ # <% items.each do |item| %>
99
99
  # <%= item %>
100
100
  # <% end %>
101
101
  # </h1>
@@ -107,11 +107,11 @@ module ViewComponent
107
107
  # called multiple times to append to the slot.
108
108
  #
109
109
  # <%= render_inline(MyComponent.new) do |component| %>
110
- # <%= component.item(name: "Foo") do %>
110
+ # <% component.item(name: "Foo") do %>
111
111
  # <p>One</p>
112
112
  # <% end %>
113
113
  #
114
- # <%= component.item(name: "Bar") do %>
114
+ # <% component.item(name: "Bar") do %>
115
115
  # <p>two</p>
116
116
  # <% end %>
117
117
  # <% end %>
@@ -175,6 +175,10 @@ module ViewComponent
175
175
  end
176
176
 
177
177
  def validate_slot_name(slot_name)
178
+ if slot_name.to_sym == :content
179
+ raise ArgumentError.new("#{slot_name} is not a valid slot name.")
180
+ end
181
+
178
182
  if self.registered_slots.key?(slot_name)
179
183
  # TODO remove? This breaks overriding slots when slots are inherited
180
184
  raise ArgumentError.new("#{slot_name} slot declared multiple times")
@@ -251,7 +255,7 @@ module ViewComponent
251
255
  @_set_slots[slot_name] = slot
252
256
  end
253
257
 
254
- nil
258
+ slot
255
259
  end
256
260
  end
257
261
  end
@@ -39,7 +39,12 @@ module ViewComponent
39
39
  end
40
40
 
41
41
  def request
42
- @request ||= ActionDispatch::TestRequest.create
42
+ @request ||=
43
+ begin
44
+ request = ActionDispatch::TestRequest.create
45
+ request.session = ActionController::TestSession.new
46
+ request
47
+ end
43
48
  end
44
49
 
45
50
  def with_variant(variant)
@@ -60,6 +65,17 @@ module ViewComponent
60
65
  @controller = old_controller
61
66
  end
62
67
 
68
+ def with_request_url(path)
69
+ old_request_path_parameters = request.path_parameters
70
+ old_controller = defined?(@controller) && @controller
71
+
72
+ request.path_parameters = Rails.application.routes.recognize_path(path)
73
+ yield
74
+ ensure
75
+ request.path_parameters = old_request_path_parameters
76
+ @controller = old_controller
77
+ end
78
+
63
79
  def build_controller(klass)
64
80
  klass.new.tap { |c| c.request = request }.extend(Rails.application.routes.url_helpers)
65
81
  end
@@ -9,6 +9,8 @@ module ViewComponent
9
9
  module Translatable
10
10
  extend ActiveSupport::Concern
11
11
 
12
+ HTML_SAFE_TRANSLATION_KEY = /(?:_|\b)html\z/.freeze
13
+
12
14
  included do
13
15
  class_attribute :i18n_backend, instance_writer: false, instance_predicate: false
14
16
  end
@@ -21,11 +23,16 @@ module ViewComponent
21
23
  def _after_compile
22
24
  super
23
25
 
24
- unless CompileCache.compiled? self
26
+ return if CompileCache.compiled? self
27
+
28
+ if (translation_files = _sidecar_files(%w[yml yaml])).any?
25
29
  self.i18n_backend = I18nBackend.new(
26
30
  i18n_scope: i18n_scope,
27
- load_paths: _sidecar_files(%w[yml yaml]),
31
+ load_paths: translation_files,
28
32
  )
33
+ else
34
+ # Cleanup if translations file has been removed since the last compilation
35
+ self.i18n_backend = nil
29
36
  end
30
37
  end
31
38
  end
@@ -55,21 +62,28 @@ module ViewComponent
55
62
  end
56
63
  end
57
64
 
58
- def translate(key = nil, locale: nil, **options)
59
- locale ||= ::I18n.locale
65
+ def translate(key = nil, **options)
66
+ return super unless i18n_backend
67
+ return key.map { |k| translate(k, **options) } if key.is_a?(Array)
60
68
 
69
+ locale = options.delete(:locale) || ::I18n.locale
70
+ key = key&.to_s unless key.is_a?(String)
61
71
  key = "#{i18n_scope}#{key}" if key.start_with?(".")
62
72
 
63
- result = catch(:exception) do
73
+ translated = catch(:exception) do
64
74
  i18n_backend.translate(locale, key, options)
65
75
  end
66
76
 
67
77
  # Fallback to the global translations
68
- if result.is_a? ::I18n::MissingTranslation
69
- result = helpers.t(key, locale: locale, **options)
78
+ if translated.is_a? ::I18n::MissingTranslation
79
+ return super(key, locale: locale, **options)
80
+ end
81
+
82
+ if HTML_SAFE_TRANSLATION_KEY.match?(key)
83
+ translated = translated.html_safe
70
84
  end
71
85
 
72
- result
86
+ translated
73
87
  end
74
88
  alias :t :translate
75
89
 
@@ -3,7 +3,7 @@
3
3
  module ViewComponent
4
4
  module VERSION
5
5
  MAJOR = 2
6
- MINOR = 29
6
+ MINOR = 33
7
7
  PATCH = 0
8
8
 
9
9
  STRING = [MAJOR, MINOR, PATCH].join(".")
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ViewComponent
4
+ module WithContentHelper
5
+ def with_content(value)
6
+ if value.nil?
7
+ raise ArgumentError.new("No content provided.")
8
+ else
9
+ @_content_set_by_with_content = value
10
+ end
11
+
12
+ self
13
+ end
14
+ end
15
+ 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.29.0
4
+ version: 2.33.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GitHub Open Source
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-02 00:00:00.000000000 Z
11
+ date: 2021-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -212,7 +212,21 @@ dependencies:
212
212
  - - "~>"
213
213
  - !ruby/object:Gem::Version
214
214
  version: '0.13'
215
- description:
215
+ - !ruby/object:Gem::Dependency
216
+ name: yard
217
+ requirement: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - "~>"
220
+ - !ruby/object:Gem::Version
221
+ version: 0.9.25
222
+ type: :development
223
+ prerelease: false
224
+ version_requirements: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - "~>"
227
+ - !ruby/object:Gem::Version
228
+ version: 0.9.25
229
+ description:
216
230
  email:
217
231
  - opensource+view_component@github.com
218
232
  executables: []
@@ -246,6 +260,7 @@ files:
246
260
  - lib/view_component/collection.rb
247
261
  - lib/view_component/compile_cache.rb
248
262
  - lib/view_component/compiler.rb
263
+ - lib/view_component/component_error.rb
249
264
  - lib/view_component/engine.rb
250
265
  - lib/view_component/preview.rb
251
266
  - lib/view_component/preview_template_error.rb
@@ -265,12 +280,13 @@ files:
265
280
  - lib/view_component/test_helpers.rb
266
281
  - lib/view_component/translatable.rb
267
282
  - lib/view_component/version.rb
283
+ - lib/view_component/with_content_helper.rb
268
284
  homepage: https://github.com/github/view_component
269
285
  licenses:
270
286
  - MIT
271
287
  metadata:
272
288
  allowed_push_host: https://rubygems.org
273
- post_install_message:
289
+ post_install_message:
274
290
  rdoc_options: []
275
291
  require_paths:
276
292
  - lib
@@ -285,8 +301,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
285
301
  - !ruby/object:Gem::Version
286
302
  version: '0'
287
303
  requirements: []
288
- rubygems_version: 3.1.2
289
- signing_key:
304
+ rubygems_version: 3.2.3
305
+ signing_key:
290
306
  specification_version: 4
291
307
  summary: View components for Rails
292
308
  test_files: []