actionview-component 1.9.0 → 1.10.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: 67d62ba2c307963de0523a13f554d1e78b9e76990ace76c36b7d982ec83ef2cb
4
- data.tar.gz: 66682a57cd5504b054c7c21227bbfb6cdc2c14f0ac151f2d6bb136a1f2e7a6cb
3
+ metadata.gz: c20b9ae371123eb58c62aa3c093baafdf7d5745bf8311ff2fb975c70282e6dfd
4
+ data.tar.gz: caaad9f6e645602efe2faea055ff08dd1f548efe08b503a3048d83eebc824997
5
5
  SHA512:
6
- metadata.gz: 0f5b33cb1dfff517ae58afb9167a5f0370f40902eef1ecfef1d6ee0e9f589a255826b92cbccf3bec5fd0a91d487601ec273f6238ddc029a3daade14aa5cd8a5a
7
- data.tar.gz: f2f58364fba2269e40bf5bd1040872f826365f67e09679996c79999a0755a1ffdbe06f89bb661f80e7a23a2b4791dff6618b28da9a9cf062b1ca41f65ee69dfa
6
+ metadata.gz: 52aec02cba11b482df4c4e4f160ad7602dadca664eb75a4fad579fb5802c9f4efb6a7e07f1082ab634e99c9ed8efad82861daf1fdc9c5108cdf63e3f2b0f80d1
7
+ data.tar.gz: 4d5fb555f12740dfa62a64b4c9b095879e4ea182a3930f9a725482525c6d5bbeae08d9914dff847e8521a7107f31b13b919f5b9d5cc69d83cbaf53c08422503c
@@ -1,3 +1,7 @@
1
+ # v1.10.0
2
+
3
+ * Deprecate all `render` syntaxes except for `render(MyComponent.new(foo: :bar))`
4
+
1
5
  # v1.9.0
2
6
 
3
7
  * Remove initializer requirement for Ruby 2.7+
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- actionview-component (1.9.0)
4
+ actionview-component (1.10.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -144,7 +144,7 @@ end
144
144
  We can render it in a view as:
145
145
 
146
146
  ```erb
147
- <%= render(TestComponent, title: "my title") do %>
147
+ <%= render(TestComponent.new(title: "my title")) do %>
148
148
  Hello, World!
149
149
  <% end %>
150
150
  ```
@@ -155,42 +155,12 @@ Which returns:
155
155
  <span title="my title">Hello, World!</span>
156
156
  ```
157
157
 
158
- ##### Supported `render` syntaxes
159
-
160
- Components can be rendered via:
161
-
162
- `render(TestComponent, foo: :bar)`
163
-
164
- `render(component: TestComponent, locals: { foo: :bar })`
165
-
166
- **Rendering components through models**
167
-
168
- Passing model instances will cause `render` to look for its respective component class.
169
-
170
- The component is instantiated with the rendered model instance.
171
-
172
- Example for a `Post` model:
173
-
174
- `render(@post)`
175
-
176
- ```ruby
177
- class PostComponent < ActionView::Component::Base
178
- def initialize(post)
179
- @post = post
180
- end
181
- end
182
- ```
183
-
184
- The following syntax has been deprecated and will be removed in v2.0.0:
185
-
186
- `render(TestComponent.new(foo: :bar))`
187
-
188
158
  #### Error case
189
159
 
190
160
  If the component is rendered with a blank title:
191
161
 
192
162
  ```erb
193
- <%= render(TestComponent, title: "") do %>
163
+ <%= render(TestComponent.new(title: "")) do %>
194
164
  Hello, World!
195
165
  <% end %>
196
166
  ```
@@ -227,7 +197,7 @@ end
227
197
  We can render it in a view as:
228
198
 
229
199
  ```erb
230
- <%= render(ModalComponent, user: {name: 'Jane'}) do |component| %>
200
+ <%= render(ModalComponent.new(user: {name: 'Jane'})) do |component| %>
231
201
  <% component.with(:header) do %>
232
202
  Hello <%= user[:name] %>
233
203
  <% end %>
@@ -265,7 +235,7 @@ end
265
235
  ```
266
236
 
267
237
  ```erb
268
- <%= render(ModalComponent, header: "Hi!") do |component| %>
238
+ <%= render(ModalComponent.new(header: "Hi!")) do |component| %>
269
239
  <% help_enabled? && component.with(:header) do %>
270
240
  <span class="help_icon"><%= component.header %></span>
271
241
  <% end %>
@@ -292,7 +262,7 @@ end
292
262
 
293
263
  `app/views/render_arg.html.erb`:
294
264
  ```erb
295
- <%= render(ModalComponent, header: "Hi!") do |component| %>
265
+ <%= render(ModalComponent.new(header: "Hi!")) do |component| %>
296
266
  <% component.with(:body) do %>
297
267
  <p>Have a great day.</p>
298
268
  <% end %>
@@ -338,7 +308,7 @@ end
338
308
 
339
309
  `app/views/render_arg.html.erb`:
340
310
  ```erb
341
- <%= render(ModalComponent, header: "Hi!") do |component| %>
311
+ <%= render(ModalComponent.new(header: "Hi!")) do |component| %>
342
312
  <% component.with(:body) do %>
343
313
  <p>Have a great day.</p>
344
314
  <% end %>
@@ -347,7 +317,7 @@ end
347
317
 
348
318
  `app/views/with_block.html.erb`:
349
319
  ```erb
350
- <%= render(ModalComponent) do |component| %>
320
+ <%= render(ModalComponent.new) do |component| %>
351
321
  <% component.with(:header) do %>
352
322
  <span class="help_icon">Hello</span>
353
323
  <% end %>
@@ -359,7 +329,7 @@ end
359
329
 
360
330
  `app/views/no_header.html.erb`:
361
331
  ```erb
362
- <%= render(ModalComponent) do |component| %>
332
+ <%= render(ModalComponent.new) do |component| %>
363
333
  <% component.with(:body) do %>
364
334
  <p>Have a great day.</p>
365
335
  <% end %>
@@ -386,7 +356,7 @@ or the view that renders the component:
386
356
  ```erb
387
357
  <!-- app/views/_banners.html.erb -->
388
358
  <% if current_user.requires_confirmation? %>
389
- <%= render(ConfirmEmailComponent, user: current_user) %>
359
+ <%= render(ConfirmEmailComponent.new(user: current_user)) %>
390
360
  <% end %>
391
361
  ```
392
362
 
@@ -414,7 +384,7 @@ end
414
384
 
415
385
  ```erb
416
386
  <!-- app/views/_banners.html.erb -->
417
- <%= render(ConfirmEmailComponent, user: current_user) %>
387
+ <%= render(ConfirmEmailComponent.new(user: current_user)) %>
418
388
  ```
419
389
 
420
390
  ### Testing
@@ -428,7 +398,7 @@ class MyComponentTest < ActionView::Component::TestCase
428
398
  test "render component" do
429
399
  assert_equal(
430
400
  %(<span title="my title">Hello, World!</span>),
431
- render_inline(TestComponent, title: "my title") { "Hello, World!" }.to_html
401
+ render_inline(TestComponent.new(title: "my title")) { "Hello, World!" }.to_html
432
402
  )
433
403
  end
434
404
  end
@@ -445,7 +415,7 @@ test "render component for tablet" do
445
415
  with_variant :tablet do
446
416
  assert_equal(
447
417
  %(<span title="my title">Hello, tablets!</span>),
448
- render_inline(TestComponent, title: "my title") { "Hello, tablets!" }.css("span").to_html
418
+ render_inline(TestComponent.new(title: "my title")) { "Hello, tablets!" }.css("span").to_html
449
419
  )
450
420
  end
451
421
  end
@@ -462,11 +432,11 @@ You can define as many examples as you want:
462
432
 
463
433
  class TestComponentPreview < ActionView::Component::Preview
464
434
  def with_default_title
465
- render(TestComponent, title: "Test component default")
435
+ render(TestComponent.new(title: "Test component default"))
466
436
  end
467
437
 
468
438
  def with_long_title
469
- render(TestComponent, title: "This is a really long title to see how the component renders this")
439
+ render(TestComponent.new(title: "This is a really long title to see how the component renders this"))
470
440
  end
471
441
  end
472
442
  ```
@@ -1,24 +1,29 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Monkey patch ActionView::Base#render to support ActionView::Component
4
- #
5
- # A version of this monkey patch was upstreamed in https://github.com/rails/rails/pull/36388
6
- # We'll need to upstream an updated version of this eventually.
7
4
  module ActionView
8
5
  module Component
9
6
  module RenderMonkeyPatch # :nodoc:
10
7
  def render(options = {}, args = {}, &block)
11
8
  if options.respond_to?(:render_in)
9
+ options.render_in(self, &block)
10
+ elsif options.is_a?(Class) && options < ActionView::Component::Base
12
11
  ActiveSupport::Deprecation.warn(
13
- "passing component instances (`render MyComponent.new(foo: :bar)`) has been deprecated and will be removed in v2.0.0. Use `render MyComponent, foo: :bar` instead."
12
+ "`render MyComponent, foo: :bar` has been deprecated and will be removed in v2.0.0. Use `render MyComponent.new(foo: :bar)` instead."
14
13
  )
15
14
 
16
- options.render_in(self, &block)
17
- elsif options.is_a?(Class) && options < ActionView::Component::Base
18
15
  options.new(args).render_in(self, &block)
19
16
  elsif options.is_a?(Hash) && options.has_key?(:component)
17
+ ActiveSupport::Deprecation.warn(
18
+ "`render component: MyComponent, locals: { foo: :bar }` has been deprecated and will be removed in v2.0.0. Use `render MyComponent.new(foo: :bar)` instead."
19
+ )
20
+
20
21
  options[:component].new(options[:locals]).render_in(self, &block)
21
22
  elsif options.respond_to?(:to_component_class) && !options.to_component_class.nil?
23
+ ActiveSupport::Deprecation.warn(
24
+ "rendering objects that respond_to `to_component_class` has been deprecated and will be removed in v2.0.0. Use `render MyComponent.new(foo: :bar)` instead."
25
+ )
26
+
22
27
  options.to_component_class.new(options).render_in(self, &block)
23
28
  else
24
29
  super
@@ -4,7 +4,7 @@ module ActionView
4
4
  module Component
5
5
  module VERSION
6
6
  MAJOR = 1
7
- MINOR = 9
7
+ MINOR = 10
8
8
  PATCH = 0
9
9
 
10
10
  STRING = [MAJOR, MINOR, PATCH].join(".")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: actionview-component
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.0
4
+ version: 1.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GitHub Open Source