view_component 2.83.0 → 3.21.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.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/concerns/view_component/preview_actions.rb +5 -1
  3. data/app/controllers/view_components_system_test_controller.rb +24 -1
  4. data/app/helpers/preview_helper.rb +22 -4
  5. data/app/views/view_components/_preview_source.html.erb +2 -2
  6. data/docs/CHANGELOG.md +807 -1
  7. data/lib/rails/generators/abstract_generator.rb +9 -1
  8. data/lib/rails/generators/component/component_generator.rb +2 -1
  9. data/lib/rails/generators/component/templates/component.rb.tt +3 -2
  10. data/lib/rails/generators/erb/component_generator.rb +1 -1
  11. data/lib/rails/generators/locale/component_generator.rb +3 -3
  12. data/lib/rails/generators/preview/templates/component_preview.rb.tt +2 -0
  13. data/lib/rails/generators/rspec/component_generator.rb +15 -3
  14. data/lib/rails/generators/rspec/templates/component_spec.rb.tt +1 -1
  15. data/lib/rails/generators/stimulus/component_generator.rb +8 -3
  16. data/lib/rails/generators/stimulus/templates/component_controller.ts.tt +9 -0
  17. data/lib/rails/generators/test_unit/templates/component_test.rb.tt +1 -1
  18. data/lib/view_component/base.rb +169 -164
  19. data/lib/view_component/capture_compatibility.rb +44 -0
  20. data/lib/view_component/collection.rb +20 -8
  21. data/lib/view_component/compiler.rb +166 -207
  22. data/lib/view_component/config.rb +63 -14
  23. data/lib/view_component/deprecation.rb +1 -1
  24. data/lib/view_component/docs_builder_component.html.erb +5 -1
  25. data/lib/view_component/docs_builder_component.rb +28 -9
  26. data/lib/view_component/engine.rb +58 -28
  27. data/lib/view_component/errors.rb +240 -0
  28. data/lib/view_component/inline_template.rb +55 -0
  29. data/lib/view_component/instrumentation.rb +10 -2
  30. data/lib/view_component/preview.rb +7 -8
  31. data/lib/view_component/rails/tasks/view_component.rake +11 -2
  32. data/lib/view_component/slot.rb +119 -1
  33. data/lib/view_component/slotable.rb +394 -94
  34. data/lib/view_component/slotable_default.rb +20 -0
  35. data/lib/view_component/system_test_helpers.rb +5 -5
  36. data/lib/view_component/template.rb +134 -0
  37. data/lib/view_component/test_helpers.rb +138 -59
  38. data/lib/view_component/translatable.rb +45 -26
  39. data/lib/view_component/use_helpers.rb +42 -0
  40. data/lib/view_component/version.rb +4 -3
  41. data/lib/view_component/with_content_helper.rb +3 -8
  42. data/lib/view_component.rb +3 -12
  43. metadata +277 -38
  44. data/lib/view_component/content_areas.rb +0 -56
  45. data/lib/view_component/polymorphic_slots.rb +0 -103
  46. data/lib/view_component/preview_template_error.rb +0 -6
  47. data/lib/view_component/slot_v2.rb +0 -98
  48. data/lib/view_component/slotable_v2.rb +0 -391
  49. data/lib/view_component/template_error.rb +0 -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: 2.83.0
4
+ version: 3.21.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-01-08 00:00:00.000000000 Z
11
+ date: 2024-12-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: 5.2.0
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '8.0'
22
+ version: '8.1'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: 5.2.0
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '8.0'
32
+ version: '8.1'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: method_source
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -58,6 +58,20 @@ dependencies:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
60
  version: '1.0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: allocation_stats
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: 0.1.5
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: 0.1.5
61
75
  - !ruby/object:Gem::Dependency
62
76
  name: appraisal
63
77
  requirement: !ruby/object:Gem::Requirement
@@ -78,28 +92,28 @@ dependencies:
78
92
  requirements:
79
93
  - - "~>"
80
94
  - !ruby/object:Gem::Version
81
- version: 2.8.2
95
+ version: 2.13.0
82
96
  type: :development
83
97
  prerelease: false
84
98
  version_requirements: !ruby/object:Gem::Requirement
85
99
  requirements:
86
100
  - - "~>"
87
101
  - !ruby/object:Gem::Version
88
- version: 2.8.2
102
+ version: 2.13.0
89
103
  - !ruby/object:Gem::Dependency
90
104
  name: better_html
91
105
  requirement: !ruby/object:Gem::Requirement
92
106
  requirements:
93
- - - "~>"
107
+ - - ">="
94
108
  - !ruby/object:Gem::Version
95
- version: '1'
109
+ version: '0'
96
110
  type: :development
97
111
  prerelease: false
98
112
  version_requirements: !ruby/object:Gem::Requirement
99
113
  requirements:
100
- - - "~>"
114
+ - - ">="
101
115
  - !ruby/object:Gem::Version
102
- version: '1'
116
+ version: '0'
103
117
  - !ruby/object:Gem::Dependency
104
118
  name: bundler
105
119
  requirement: !ruby/object:Gem::Requirement
@@ -115,33 +129,75 @@ dependencies:
115
129
  - !ruby/object:Gem::Version
116
130
  version: '2'
117
131
  - !ruby/object:Gem::Dependency
118
- name: erb_lint
132
+ name: capybara
119
133
  requirement: !ruby/object:Gem::Requirement
120
134
  requirements:
121
135
  - - "~>"
122
136
  - !ruby/object:Gem::Version
123
- version: 0.0.37
137
+ version: '3'
124
138
  type: :development
125
139
  prerelease: false
126
140
  version_requirements: !ruby/object:Gem::Requirement
127
141
  requirements:
128
142
  - - "~>"
129
143
  - !ruby/object:Gem::Version
130
- version: 0.0.37
144
+ version: '3'
145
+ - !ruby/object:Gem::Dependency
146
+ name: cuprite
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: '0.15'
152
+ type: :development
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - "~>"
157
+ - !ruby/object:Gem::Version
158
+ version: '0.15'
159
+ - !ruby/object:Gem::Dependency
160
+ name: debug
161
+ requirement: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
173
+ - !ruby/object:Gem::Dependency
174
+ name: erb_lint
175
+ requirement: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ version: '0'
180
+ type: :development
181
+ prerelease: false
182
+ version_requirements: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - ">="
185
+ - !ruby/object:Gem::Version
186
+ version: '0'
131
187
  - !ruby/object:Gem::Dependency
132
188
  name: haml
133
189
  requirement: !ruby/object:Gem::Requirement
134
190
  requirements:
135
191
  - - "~>"
136
192
  - !ruby/object:Gem::Version
137
- version: '5'
193
+ version: '6'
138
194
  type: :development
139
195
  prerelease: false
140
196
  version_requirements: !ruby/object:Gem::Requirement
141
197
  requirements:
142
198
  - - "~>"
143
199
  - !ruby/object:Gem::Version
144
- version: '5'
200
+ version: '6'
145
201
  - !ruby/object:Gem::Dependency
146
202
  name: jbuilder
147
203
  requirement: !ruby/object:Gem::Requirement
@@ -174,16 +230,16 @@ dependencies:
174
230
  name: minitest
175
231
  requirement: !ruby/object:Gem::Requirement
176
232
  requirements:
177
- - - '='
233
+ - - "~>"
178
234
  - !ruby/object:Gem::Version
179
- version: 5.6.0
235
+ version: '5.18'
180
236
  type: :development
181
237
  prerelease: false
182
238
  version_requirements: !ruby/object:Gem::Requirement
183
239
  requirements:
184
- - - '='
240
+ - - "~>"
185
241
  - !ruby/object:Gem::Version
186
- version: 5.6.0
242
+ version: '5.18'
187
243
  - !ruby/object:Gem::Dependency
188
244
  name: pry
189
245
  requirement: !ruby/object:Gem::Requirement
@@ -198,6 +254,20 @@ dependencies:
198
254
  - - "~>"
199
255
  - !ruby/object:Gem::Version
200
256
  version: '0.13'
257
+ - !ruby/object:Gem::Dependency
258
+ name: puma
259
+ requirement: !ruby/object:Gem::Requirement
260
+ requirements:
261
+ - - "~>"
262
+ - !ruby/object:Gem::Version
263
+ version: '6'
264
+ type: :development
265
+ prerelease: false
266
+ version_requirements: !ruby/object:Gem::Requirement
267
+ requirements:
268
+ - - "~>"
269
+ - !ruby/object:Gem::Version
270
+ version: '6'
201
271
  - !ruby/object:Gem::Dependency
202
272
  name: rake
203
273
  requirement: !ruby/object:Gem::Requirement
@@ -212,6 +282,62 @@ dependencies:
212
282
  - - "~>"
213
283
  - !ruby/object:Gem::Version
214
284
  version: '13.0'
285
+ - !ruby/object:Gem::Dependency
286
+ name: rspec-rails
287
+ requirement: !ruby/object:Gem::Requirement
288
+ requirements:
289
+ - - "~>"
290
+ - !ruby/object:Gem::Version
291
+ version: '5'
292
+ type: :development
293
+ prerelease: false
294
+ version_requirements: !ruby/object:Gem::Requirement
295
+ requirements:
296
+ - - "~>"
297
+ - !ruby/object:Gem::Version
298
+ version: '5'
299
+ - !ruby/object:Gem::Dependency
300
+ name: rubocop-md
301
+ requirement: !ruby/object:Gem::Requirement
302
+ requirements:
303
+ - - "~>"
304
+ - !ruby/object:Gem::Version
305
+ version: '1'
306
+ type: :development
307
+ prerelease: false
308
+ version_requirements: !ruby/object:Gem::Requirement
309
+ requirements:
310
+ - - "~>"
311
+ - !ruby/object:Gem::Version
312
+ version: '1'
313
+ - !ruby/object:Gem::Dependency
314
+ name: selenium-webdriver
315
+ requirement: !ruby/object:Gem::Requirement
316
+ requirements:
317
+ - - '='
318
+ - !ruby/object:Gem::Version
319
+ version: 4.9.0
320
+ type: :development
321
+ prerelease: false
322
+ version_requirements: !ruby/object:Gem::Requirement
323
+ requirements:
324
+ - - '='
325
+ - !ruby/object:Gem::Version
326
+ version: 4.9.0
327
+ - !ruby/object:Gem::Dependency
328
+ name: sprockets-rails
329
+ requirement: !ruby/object:Gem::Requirement
330
+ requirements:
331
+ - - "~>"
332
+ - !ruby/object:Gem::Version
333
+ version: 3.4.2
334
+ type: :development
335
+ prerelease: false
336
+ version_requirements: !ruby/object:Gem::Requirement
337
+ requirements:
338
+ - - "~>"
339
+ - !ruby/object:Gem::Version
340
+ version: 3.4.2
215
341
  - !ruby/object:Gem::Dependency
216
342
  name: standard
217
343
  requirement: !ruby/object:Gem::Requirement
@@ -232,70 +358,84 @@ dependencies:
232
358
  requirements:
233
359
  - - "~>"
234
360
  - !ruby/object:Gem::Version
235
- version: 0.18.0
361
+ version: 0.22.0
236
362
  type: :development
237
363
  prerelease: false
238
364
  version_requirements: !ruby/object:Gem::Requirement
239
365
  requirements:
240
366
  - - "~>"
241
367
  - !ruby/object:Gem::Version
242
- version: 0.18.0
368
+ version: 0.22.0
243
369
  - !ruby/object:Gem::Dependency
244
370
  name: simplecov-console
245
371
  requirement: !ruby/object:Gem::Requirement
246
372
  requirements:
247
373
  - - "~>"
248
374
  - !ruby/object:Gem::Version
249
- version: 0.7.2
375
+ version: 0.9.1
250
376
  type: :development
251
377
  prerelease: false
252
378
  version_requirements: !ruby/object:Gem::Requirement
253
379
  requirements:
254
380
  - - "~>"
255
381
  - !ruby/object:Gem::Version
256
- version: 0.7.2
382
+ version: 0.9.1
257
383
  - !ruby/object:Gem::Dependency
258
384
  name: slim
259
385
  requirement: !ruby/object:Gem::Requirement
260
386
  requirements:
261
387
  - - "~>"
262
388
  - !ruby/object:Gem::Version
263
- version: '4.0'
389
+ version: '5.1'
264
390
  type: :development
265
391
  prerelease: false
266
392
  version_requirements: !ruby/object:Gem::Requirement
267
393
  requirements:
268
394
  - - "~>"
269
395
  - !ruby/object:Gem::Version
270
- version: '4.0'
396
+ version: '5.1'
271
397
  - !ruby/object:Gem::Dependency
272
- name: sprockets-rails
398
+ name: turbo-rails
273
399
  requirement: !ruby/object:Gem::Requirement
274
400
  requirements:
275
401
  - - "~>"
276
402
  - !ruby/object:Gem::Version
277
- version: 3.2.2
403
+ version: '1'
278
404
  type: :development
279
405
  prerelease: false
280
406
  version_requirements: !ruby/object:Gem::Requirement
281
407
  requirements:
282
408
  - - "~>"
283
409
  - !ruby/object:Gem::Version
284
- version: 3.2.2
410
+ version: '1'
411
+ - !ruby/object:Gem::Dependency
412
+ name: warning
413
+ requirement: !ruby/object:Gem::Requirement
414
+ requirements:
415
+ - - ">="
416
+ - !ruby/object:Gem::Version
417
+ version: '0'
418
+ type: :development
419
+ prerelease: false
420
+ version_requirements: !ruby/object:Gem::Requirement
421
+ requirements:
422
+ - - ">="
423
+ - !ruby/object:Gem::Version
424
+ version: '0'
285
425
  - !ruby/object:Gem::Dependency
286
426
  name: yard
287
427
  requirement: !ruby/object:Gem::Requirement
288
428
  requirements:
289
429
  - - "~>"
290
430
  - !ruby/object:Gem::Version
291
- version: 0.9.25
431
+ version: 0.9.34
292
432
  type: :development
293
433
  prerelease: false
294
434
  version_requirements: !ruby/object:Gem::Requirement
295
435
  requirements:
296
436
  - - "~>"
297
437
  - !ruby/object:Gem::Version
298
- version: 0.9.25
438
+ version: 0.9.34
299
439
  - !ruby/object:Gem::Dependency
300
440
  name: yard-activesupport-concern
301
441
  requirement: !ruby/object:Gem::Requirement
@@ -310,6 +450,104 @@ dependencies:
310
450
  - - "~>"
311
451
  - !ruby/object:Gem::Version
312
452
  version: 0.0.1
453
+ - !ruby/object:Gem::Dependency
454
+ name: net-imap
455
+ requirement: !ruby/object:Gem::Requirement
456
+ requirements:
457
+ - - ">="
458
+ - !ruby/object:Gem::Version
459
+ version: '0'
460
+ type: :development
461
+ prerelease: false
462
+ version_requirements: !ruby/object:Gem::Requirement
463
+ requirements:
464
+ - - ">="
465
+ - !ruby/object:Gem::Version
466
+ version: '0'
467
+ - !ruby/object:Gem::Dependency
468
+ name: net-pop
469
+ requirement: !ruby/object:Gem::Requirement
470
+ requirements:
471
+ - - ">="
472
+ - !ruby/object:Gem::Version
473
+ version: '0'
474
+ type: :development
475
+ prerelease: false
476
+ version_requirements: !ruby/object:Gem::Requirement
477
+ requirements:
478
+ - - ">="
479
+ - !ruby/object:Gem::Version
480
+ version: '0'
481
+ - !ruby/object:Gem::Dependency
482
+ name: net-smtp
483
+ requirement: !ruby/object:Gem::Requirement
484
+ requirements:
485
+ - - ">="
486
+ - !ruby/object:Gem::Version
487
+ version: '0'
488
+ type: :development
489
+ prerelease: false
490
+ version_requirements: !ruby/object:Gem::Requirement
491
+ requirements:
492
+ - - ">="
493
+ - !ruby/object:Gem::Version
494
+ version: '0'
495
+ - !ruby/object:Gem::Dependency
496
+ name: base64
497
+ requirement: !ruby/object:Gem::Requirement
498
+ requirements:
499
+ - - ">="
500
+ - !ruby/object:Gem::Version
501
+ version: '0'
502
+ type: :development
503
+ prerelease: false
504
+ version_requirements: !ruby/object:Gem::Requirement
505
+ requirements:
506
+ - - ">="
507
+ - !ruby/object:Gem::Version
508
+ version: '0'
509
+ - !ruby/object:Gem::Dependency
510
+ name: bigdecimal
511
+ requirement: !ruby/object:Gem::Requirement
512
+ requirements:
513
+ - - ">="
514
+ - !ruby/object:Gem::Version
515
+ version: '0'
516
+ type: :development
517
+ prerelease: false
518
+ version_requirements: !ruby/object:Gem::Requirement
519
+ requirements:
520
+ - - ">="
521
+ - !ruby/object:Gem::Version
522
+ version: '0'
523
+ - !ruby/object:Gem::Dependency
524
+ name: drb
525
+ requirement: !ruby/object:Gem::Requirement
526
+ requirements:
527
+ - - ">="
528
+ - !ruby/object:Gem::Version
529
+ version: '0'
530
+ type: :development
531
+ prerelease: false
532
+ version_requirements: !ruby/object:Gem::Requirement
533
+ requirements:
534
+ - - ">="
535
+ - !ruby/object:Gem::Version
536
+ version: '0'
537
+ - !ruby/object:Gem::Dependency
538
+ name: mutex_m
539
+ requirement: !ruby/object:Gem::Requirement
540
+ requirements:
541
+ - - ">="
542
+ - !ruby/object:Gem::Version
543
+ version: '0'
544
+ type: :development
545
+ prerelease: false
546
+ version_requirements: !ruby/object:Gem::Requirement
547
+ requirements:
548
+ - - ">="
549
+ - !ruby/object:Gem::Version
550
+ version: '0'
313
551
  description:
314
552
  email:
315
553
  executables: []
@@ -347,26 +585,27 @@ files:
347
585
  - lib/rails/generators/slim/templates/component.html.slim.tt
348
586
  - lib/rails/generators/stimulus/component_generator.rb
349
587
  - lib/rails/generators/stimulus/templates/component_controller.js.tt
588
+ - lib/rails/generators/stimulus/templates/component_controller.ts.tt
350
589
  - lib/rails/generators/tailwindcss/component_generator.rb
351
590
  - lib/rails/generators/tailwindcss/templates/component.html.erb.tt
352
591
  - lib/rails/generators/test_unit/component_generator.rb
353
592
  - lib/rails/generators/test_unit/templates/component_test.rb.tt
354
593
  - lib/view_component.rb
355
594
  - lib/view_component/base.rb
595
+ - lib/view_component/capture_compatibility.rb
356
596
  - lib/view_component/collection.rb
357
597
  - lib/view_component/compile_cache.rb
358
598
  - lib/view_component/compiler.rb
359
599
  - lib/view_component/component_error.rb
360
600
  - lib/view_component/config.rb
361
- - lib/view_component/content_areas.rb
362
601
  - lib/view_component/deprecation.rb
363
602
  - lib/view_component/docs_builder_component.html.erb
364
603
  - lib/view_component/docs_builder_component.rb
365
604
  - lib/view_component/engine.rb
605
+ - lib/view_component/errors.rb
606
+ - lib/view_component/inline_template.rb
366
607
  - lib/view_component/instrumentation.rb
367
- - lib/view_component/polymorphic_slots.rb
368
608
  - lib/view_component/preview.rb
369
- - lib/view_component/preview_template_error.rb
370
609
  - lib/view_component/rails/tasks/view_component.rake
371
610
  - lib/view_component/render_component_helper.rb
372
611
  - lib/view_component/render_component_to_string_helper.rb
@@ -375,15 +614,15 @@ files:
375
614
  - lib/view_component/rendering_component_helper.rb
376
615
  - lib/view_component/rendering_monkey_patch.rb
377
616
  - lib/view_component/slot.rb
378
- - lib/view_component/slot_v2.rb
379
617
  - lib/view_component/slotable.rb
380
- - lib/view_component/slotable_v2.rb
618
+ - lib/view_component/slotable_default.rb
381
619
  - lib/view_component/system_test_case.rb
382
620
  - lib/view_component/system_test_helpers.rb
383
- - lib/view_component/template_error.rb
621
+ - lib/view_component/template.rb
384
622
  - lib/view_component/test_case.rb
385
623
  - lib/view_component/test_helpers.rb
386
624
  - lib/view_component/translatable.rb
625
+ - lib/view_component/use_helpers.rb
387
626
  - lib/view_component/version.rb
388
627
  - lib/view_component/with_content_helper.rb
389
628
  - lib/yard/mattr_accessor_handler.rb
@@ -402,14 +641,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
402
641
  requirements:
403
642
  - - ">="
404
643
  - !ruby/object:Gem::Version
405
- version: 2.4.0
644
+ version: 2.7.0
406
645
  required_rubygems_version: !ruby/object:Gem::Requirement
407
646
  requirements:
408
647
  - - ">="
409
648
  - !ruby/object:Gem::Version
410
649
  version: '0'
411
650
  requirements: []
412
- rubygems_version: 3.4.5
651
+ rubygems_version: 3.5.3
413
652
  signing_key:
414
653
  specification_version: 4
415
654
  summary: A framework for building reusable, testable & encapsulated view components
@@ -1,56 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "active_support/concern"
4
-
5
- require "view_component/slot"
6
-
7
- # DEPRECATED - ContentAreas is deprecated and will be removed in v3.0.0
8
- module ViewComponent
9
- module ContentAreas
10
- extend ActiveSupport::Concern
11
-
12
- # Assign the provided content to the content area accessor
13
- #
14
- # @private
15
- def with(area, content = nil, &block)
16
- unless content_areas.include?(area)
17
- raise ArgumentError.new(
18
- "Unknown content_area '#{area}' for #{self} - expected one of '#{content_areas}'.\n\n" \
19
- "To fix this issue, add `with_content_area :#{area}` to #{self} or reference " \
20
- "a valid content area."
21
- )
22
- end
23
-
24
- if block
25
- content = view_context.capture(&block)
26
- end
27
-
28
- instance_variable_set("@#{area}".to_sym, content)
29
- nil
30
- end
31
-
32
- class_methods do
33
- def with_content_areas(*areas)
34
- ViewComponent::Deprecation.deprecation_warning(
35
- "`with_content_areas`", "use slots (https://viewcomponent.org/guide/slots.html) instead"
36
- )
37
-
38
- if areas.include?(:content)
39
- raise ArgumentError.new(
40
- "#{self} defines a content area called :content, which is a reserved name. \n\n" \
41
- "To fix this issue, use another name, such as `:body`."
42
- )
43
- end
44
-
45
- areas.each do |area|
46
- define_method area.to_sym do
47
- content unless content_evaluated? # ensure content is loaded so content_areas will be defined
48
- instance_variable_get(:"@#{area}") if instance_variable_defined?(:"@#{area}")
49
- end
50
- end
51
-
52
- self.content_areas = areas
53
- end
54
- end
55
- end
56
- end
@@ -1,103 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ViewComponent
4
- module PolymorphicSlots
5
- # In older rails versions, using a concern isn't a good idea here because they appear to not work with
6
- # Module#prepend and class methods.
7
- def self.included(base)
8
- if base != ViewComponent::Base
9
- # :nocov:
10
- location = Kernel.caller_locations(1, 1)[0]
11
-
12
- warn(
13
- "warning: ViewComponent::PolymorphicSlots is now included in ViewComponent::Base by default " \
14
- "and can be removed from #{location.path}:#{location.lineno}"
15
- )
16
- # :nocov:
17
- end
18
-
19
- base.singleton_class.prepend(ClassMethods)
20
- base.include(InstanceMethods)
21
- end
22
-
23
- module ClassMethods
24
- def renders_one(slot_name, callable = nil)
25
- return super unless callable.is_a?(Hash) && callable.key?(:types)
26
-
27
- validate_singular_slot_name(slot_name)
28
- register_polymorphic_slot(slot_name, callable[:types], collection: false)
29
- end
30
-
31
- def renders_many(slot_name, callable = nil)
32
- return super unless callable.is_a?(Hash) && callable.key?(:types)
33
-
34
- validate_plural_slot_name(slot_name)
35
- register_polymorphic_slot(slot_name, callable[:types], collection: true)
36
- end
37
-
38
- def register_polymorphic_slot(slot_name, types, collection:)
39
- unless types.empty?
40
- getter_name = slot_name
41
-
42
- define_method(getter_name) do
43
- get_slot(slot_name)
44
- end
45
-
46
- define_method("#{getter_name}?") do
47
- get_slot(slot_name).present?
48
- end
49
- end
50
-
51
- renderable_hash = types.each_with_object({}) do |(poly_type, poly_callable), memo|
52
- memo[poly_type] = define_slot(
53
- "#{slot_name}_#{poly_type}", collection: collection, callable: poly_callable
54
- )
55
-
56
- setter_name =
57
- if collection
58
- "#{ActiveSupport::Inflector.singularize(slot_name)}_#{poly_type}"
59
- else
60
- "#{slot_name}_#{poly_type}"
61
- end
62
-
63
- define_method(setter_name) do |*args, &block|
64
- if _warn_on_deprecated_slot_setter
65
- ViewComponent::Deprecation.deprecation_warning(
66
- "Using polymorphic slot setters like `#{setter_name}`",
67
- :"`with_#{setter_name}`"
68
- )
69
- end
70
-
71
- set_polymorphic_slot(slot_name, poly_type, *args, &block)
72
- end
73
- ruby2_keywords(setter_name.to_sym) if respond_to?(:ruby2_keywords, true)
74
-
75
- define_method("with_#{setter_name}") do |*args, &block|
76
- set_polymorphic_slot(slot_name, poly_type, *args, &block)
77
- end
78
- ruby2_keywords(:"with_#{setter_name}") if respond_to?(:ruby2_keywords, true)
79
- end
80
-
81
- registered_slots[slot_name] = {
82
- collection: collection,
83
- renderable_hash: renderable_hash
84
- }
85
- end
86
- end
87
-
88
- module InstanceMethods
89
- def set_polymorphic_slot(slot_name, poly_type = nil, *args, &block)
90
- slot_definition = self.class.registered_slots[slot_name]
91
-
92
- if !slot_definition[:collection] && (defined?(@__vc_set_slots) && @__vc_set_slots[slot_name])
93
- raise ArgumentError, "content for slot '#{slot_name}' has already been provided"
94
- end
95
-
96
- poly_def = slot_definition[:renderable_hash][poly_type]
97
-
98
- set_slot(slot_name, poly_def, *args, &block)
99
- end
100
- ruby2_keywords(:set_polymorphic_slot) if respond_to?(:ruby2_keywords, true)
101
- end
102
- end
103
- end
@@ -1,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ViewComponent
4
- class PreviewTemplateError < StandardError
5
- end
6
- end