view_component 3.10.0 → 3.23.2

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 (37) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/concerns/view_component/preview_actions.rb +8 -1
  3. data/app/helpers/preview_helper.rb +1 -1
  4. data/app/views/view_components/_preview_source.html.erb +1 -1
  5. data/docs/CHANGELOG.md +351 -1
  6. data/lib/rails/generators/abstract_generator.rb +9 -1
  7. data/lib/rails/generators/component/component_generator.rb +2 -1
  8. data/lib/rails/generators/component/templates/component.rb.tt +3 -2
  9. data/lib/rails/generators/erb/component_generator.rb +1 -1
  10. data/lib/rails/generators/preview/templates/component_preview.rb.tt +2 -0
  11. data/lib/rails/generators/rspec/component_generator.rb +15 -3
  12. data/lib/rails/generators/rspec/templates/component_spec.rb.tt +1 -1
  13. data/lib/rails/generators/stimulus/component_generator.rb +8 -3
  14. data/lib/rails/generators/stimulus/templates/component_controller.ts.tt +9 -0
  15. data/lib/rails/generators/test_unit/templates/component_test.rb.tt +1 -1
  16. data/lib/view_component/base.rb +55 -59
  17. data/lib/view_component/collection.rb +18 -3
  18. data/lib/view_component/compiler.rb +164 -240
  19. data/lib/view_component/config.rb +39 -2
  20. data/lib/view_component/configurable.rb +17 -0
  21. data/lib/view_component/engine.rb +21 -11
  22. data/lib/view_component/errors.rb +7 -5
  23. data/lib/view_component/instrumentation.rb +1 -1
  24. data/lib/view_component/preview.rb +1 -1
  25. data/lib/view_component/rails/tasks/view_component.rake +8 -2
  26. data/lib/view_component/slot.rb +11 -1
  27. data/lib/view_component/slotable.rb +29 -15
  28. data/lib/view_component/slotable_default.rb +20 -0
  29. data/lib/view_component/template.rb +134 -0
  30. data/lib/view_component/test_helpers.rb +31 -2
  31. data/lib/view_component/use_helpers.rb +32 -10
  32. data/lib/view_component/version.rb +2 -2
  33. metadata +252 -19
  34. data/lib/rails/generators/component/USAGE +0 -13
  35. data/lib/view_component/docs_builder_component.html.erb +0 -22
  36. data/lib/view_component/docs_builder_component.rb +0 -96
  37. data/lib/yard/mattr_accessor_handler.rb +0 -19
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: view_component
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.10.0
4
+ version: 3.23.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - ViewComponent Team
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-01-09 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: activesupport
@@ -19,7 +18,7 @@ dependencies:
19
18
  version: 5.2.0
20
19
  - - "<"
21
20
  - !ruby/object:Gem::Version
22
- version: '8.0'
21
+ version: '8.1'
23
22
  type: :runtime
24
23
  prerelease: false
25
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +28,7 @@ dependencies:
29
28
  version: 5.2.0
30
29
  - - "<"
31
30
  - !ruby/object:Gem::Version
32
- version: '8.0'
31
+ version: '8.1'
33
32
  - !ruby/object:Gem::Dependency
34
33
  name: method_source
35
34
  requirement: !ruby/object:Gem::Requirement
@@ -50,14 +49,28 @@ dependencies:
50
49
  requirements:
51
50
  - - "~>"
52
51
  - !ruby/object:Gem::Version
53
- version: '1.0'
52
+ version: '1'
54
53
  type: :runtime
55
54
  prerelease: false
56
55
  version_requirements: !ruby/object:Gem::Requirement
57
56
  requirements:
58
57
  - - "~>"
59
58
  - !ruby/object:Gem::Version
60
- version: '1.0'
59
+ version: '1'
60
+ - !ruby/object:Gem::Dependency
61
+ name: allocation_stats
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: 0.1.5
67
+ type: :development
68
+ prerelease: false
69
+ version_requirements: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - "~>"
72
+ - !ruby/object:Gem::Version
73
+ version: 0.1.5
61
74
  - !ruby/object:Gem::Dependency
62
75
  name: appraisal
63
76
  requirement: !ruby/object:Gem::Requirement
@@ -114,6 +127,48 @@ dependencies:
114
127
  - - "~>"
115
128
  - !ruby/object:Gem::Version
116
129
  version: '2'
130
+ - !ruby/object:Gem::Dependency
131
+ name: capybara
132
+ requirement: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - "~>"
135
+ - !ruby/object:Gem::Version
136
+ version: '3'
137
+ type: :development
138
+ prerelease: false
139
+ version_requirements: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - "~>"
142
+ - !ruby/object:Gem::Version
143
+ version: '3'
144
+ - !ruby/object:Gem::Dependency
145
+ name: cuprite
146
+ requirement: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - "~>"
149
+ - !ruby/object:Gem::Version
150
+ version: '0.15'
151
+ type: :development
152
+ prerelease: false
153
+ version_requirements: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - "~>"
156
+ - !ruby/object:Gem::Version
157
+ version: '0.15'
158
+ - !ruby/object:Gem::Dependency
159
+ name: debug
160
+ requirement: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - ">="
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
165
+ type: :development
166
+ prerelease: false
167
+ version_requirements: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ version: '0'
117
172
  - !ruby/object:Gem::Dependency
118
173
  name: erb_lint
119
174
  requirement: !ruby/object:Gem::Requirement
@@ -198,6 +253,20 @@ dependencies:
198
253
  - - "~>"
199
254
  - !ruby/object:Gem::Version
200
255
  version: '0.13'
256
+ - !ruby/object:Gem::Dependency
257
+ name: puma
258
+ requirement: !ruby/object:Gem::Requirement
259
+ requirements:
260
+ - - "~>"
261
+ - !ruby/object:Gem::Version
262
+ version: '6'
263
+ type: :development
264
+ prerelease: false
265
+ version_requirements: !ruby/object:Gem::Requirement
266
+ requirements:
267
+ - - "~>"
268
+ - !ruby/object:Gem::Version
269
+ version: '6'
201
270
  - !ruby/object:Gem::Dependency
202
271
  name: rake
203
272
  requirement: !ruby/object:Gem::Requirement
@@ -212,6 +281,20 @@ dependencies:
212
281
  - - "~>"
213
282
  - !ruby/object:Gem::Version
214
283
  version: '13.0'
284
+ - !ruby/object:Gem::Dependency
285
+ name: rspec-rails
286
+ requirement: !ruby/object:Gem::Requirement
287
+ requirements:
288
+ - - "~>"
289
+ - !ruby/object:Gem::Version
290
+ version: '5'
291
+ type: :development
292
+ prerelease: false
293
+ version_requirements: !ruby/object:Gem::Requirement
294
+ requirements:
295
+ - - "~>"
296
+ - !ruby/object:Gem::Version
297
+ version: '5'
215
298
  - !ruby/object:Gem::Dependency
216
299
  name: rubocop-md
217
300
  requirement: !ruby/object:Gem::Requirement
@@ -226,6 +309,34 @@ dependencies:
226
309
  - - "~>"
227
310
  - !ruby/object:Gem::Version
228
311
  version: '1'
312
+ - !ruby/object:Gem::Dependency
313
+ name: selenium-webdriver
314
+ requirement: !ruby/object:Gem::Requirement
315
+ requirements:
316
+ - - '='
317
+ - !ruby/object:Gem::Version
318
+ version: 4.9.0
319
+ type: :development
320
+ prerelease: false
321
+ version_requirements: !ruby/object:Gem::Requirement
322
+ requirements:
323
+ - - '='
324
+ - !ruby/object:Gem::Version
325
+ version: 4.9.0
326
+ - !ruby/object:Gem::Dependency
327
+ name: sprockets-rails
328
+ requirement: !ruby/object:Gem::Requirement
329
+ requirements:
330
+ - - "~>"
331
+ - !ruby/object:Gem::Version
332
+ version: 3.4.2
333
+ type: :development
334
+ prerelease: false
335
+ version_requirements: !ruby/object:Gem::Requirement
336
+ requirements:
337
+ - - "~>"
338
+ - !ruby/object:Gem::Version
339
+ version: 3.4.2
229
340
  - !ruby/object:Gem::Dependency
230
341
  name: standard
231
342
  requirement: !ruby/object:Gem::Requirement
@@ -283,19 +394,33 @@ dependencies:
283
394
  - !ruby/object:Gem::Version
284
395
  version: '5.1'
285
396
  - !ruby/object:Gem::Dependency
286
- name: sprockets-rails
397
+ name: turbo-rails
287
398
  requirement: !ruby/object:Gem::Requirement
288
399
  requirements:
289
400
  - - "~>"
290
401
  - !ruby/object:Gem::Version
291
- version: 3.4.2
402
+ version: '1'
292
403
  type: :development
293
404
  prerelease: false
294
405
  version_requirements: !ruby/object:Gem::Requirement
295
406
  requirements:
296
407
  - - "~>"
297
408
  - !ruby/object:Gem::Version
298
- version: 3.4.2
409
+ version: '1'
410
+ - !ruby/object:Gem::Dependency
411
+ name: warning
412
+ requirement: !ruby/object:Gem::Requirement
413
+ requirements:
414
+ - - ">="
415
+ - !ruby/object:Gem::Version
416
+ version: '0'
417
+ type: :development
418
+ prerelease: false
419
+ version_requirements: !ruby/object:Gem::Requirement
420
+ requirements:
421
+ - - ">="
422
+ - !ruby/object:Gem::Version
423
+ version: '0'
299
424
  - !ruby/object:Gem::Dependency
300
425
  name: yard
301
426
  requirement: !ruby/object:Gem::Requirement
@@ -324,8 +449,118 @@ dependencies:
324
449
  - - "~>"
325
450
  - !ruby/object:Gem::Version
326
451
  version: 0.0.1
327
- description:
328
- email:
452
+ - !ruby/object:Gem::Dependency
453
+ name: net-imap
454
+ requirement: !ruby/object:Gem::Requirement
455
+ requirements:
456
+ - - ">="
457
+ - !ruby/object:Gem::Version
458
+ version: '0'
459
+ type: :development
460
+ prerelease: false
461
+ version_requirements: !ruby/object:Gem::Requirement
462
+ requirements:
463
+ - - ">="
464
+ - !ruby/object:Gem::Version
465
+ version: '0'
466
+ - !ruby/object:Gem::Dependency
467
+ name: net-pop
468
+ requirement: !ruby/object:Gem::Requirement
469
+ requirements:
470
+ - - ">="
471
+ - !ruby/object:Gem::Version
472
+ version: '0'
473
+ type: :development
474
+ prerelease: false
475
+ version_requirements: !ruby/object:Gem::Requirement
476
+ requirements:
477
+ - - ">="
478
+ - !ruby/object:Gem::Version
479
+ version: '0'
480
+ - !ruby/object:Gem::Dependency
481
+ name: net-smtp
482
+ requirement: !ruby/object:Gem::Requirement
483
+ requirements:
484
+ - - ">="
485
+ - !ruby/object:Gem::Version
486
+ version: '0'
487
+ type: :development
488
+ prerelease: false
489
+ version_requirements: !ruby/object:Gem::Requirement
490
+ requirements:
491
+ - - ">="
492
+ - !ruby/object:Gem::Version
493
+ version: '0'
494
+ - !ruby/object:Gem::Dependency
495
+ name: base64
496
+ requirement: !ruby/object:Gem::Requirement
497
+ requirements:
498
+ - - ">="
499
+ - !ruby/object:Gem::Version
500
+ version: '0'
501
+ type: :development
502
+ prerelease: false
503
+ version_requirements: !ruby/object:Gem::Requirement
504
+ requirements:
505
+ - - ">="
506
+ - !ruby/object:Gem::Version
507
+ version: '0'
508
+ - !ruby/object:Gem::Dependency
509
+ name: bigdecimal
510
+ requirement: !ruby/object:Gem::Requirement
511
+ requirements:
512
+ - - ">="
513
+ - !ruby/object:Gem::Version
514
+ version: '0'
515
+ type: :development
516
+ prerelease: false
517
+ version_requirements: !ruby/object:Gem::Requirement
518
+ requirements:
519
+ - - ">="
520
+ - !ruby/object:Gem::Version
521
+ version: '0'
522
+ - !ruby/object:Gem::Dependency
523
+ name: drb
524
+ requirement: !ruby/object:Gem::Requirement
525
+ requirements:
526
+ - - ">="
527
+ - !ruby/object:Gem::Version
528
+ version: '0'
529
+ type: :development
530
+ prerelease: false
531
+ version_requirements: !ruby/object:Gem::Requirement
532
+ requirements:
533
+ - - ">="
534
+ - !ruby/object:Gem::Version
535
+ version: '0'
536
+ - !ruby/object:Gem::Dependency
537
+ name: mutex_m
538
+ requirement: !ruby/object:Gem::Requirement
539
+ requirements:
540
+ - - ">="
541
+ - !ruby/object:Gem::Version
542
+ version: '0'
543
+ type: :development
544
+ prerelease: false
545
+ version_requirements: !ruby/object:Gem::Requirement
546
+ requirements:
547
+ - - ">="
548
+ - !ruby/object:Gem::Version
549
+ version: '0'
550
+ - !ruby/object:Gem::Dependency
551
+ name: propshaft
552
+ requirement: !ruby/object:Gem::Requirement
553
+ requirements:
554
+ - - "~>"
555
+ - !ruby/object:Gem::Version
556
+ version: 1.1.0
557
+ type: :development
558
+ prerelease: false
559
+ version_requirements: !ruby/object:Gem::Requirement
560
+ requirements:
561
+ - - "~>"
562
+ - !ruby/object:Gem::Version
563
+ version: 1.1.0
329
564
  executables: []
330
565
  extensions: []
331
566
  extra_rdoc_files: []
@@ -345,7 +580,6 @@ files:
345
580
  - app/views/view_components/previews.html.erb
346
581
  - docs/CHANGELOG.md
347
582
  - lib/rails/generators/abstract_generator.rb
348
- - lib/rails/generators/component/USAGE
349
583
  - lib/rails/generators/component/component_generator.rb
350
584
  - lib/rails/generators/component/templates/component.rb.tt
351
585
  - lib/rails/generators/erb/component_generator.rb
@@ -361,6 +595,7 @@ files:
361
595
  - lib/rails/generators/slim/templates/component.html.slim.tt
362
596
  - lib/rails/generators/stimulus/component_generator.rb
363
597
  - lib/rails/generators/stimulus/templates/component_controller.js.tt
598
+ - lib/rails/generators/stimulus/templates/component_controller.ts.tt
364
599
  - lib/rails/generators/tailwindcss/component_generator.rb
365
600
  - lib/rails/generators/tailwindcss/templates/component.html.erb.tt
366
601
  - lib/rails/generators/test_unit/component_generator.rb
@@ -373,9 +608,8 @@ files:
373
608
  - lib/view_component/compiler.rb
374
609
  - lib/view_component/component_error.rb
375
610
  - lib/view_component/config.rb
611
+ - lib/view_component/configurable.rb
376
612
  - lib/view_component/deprecation.rb
377
- - lib/view_component/docs_builder_component.html.erb
378
- - lib/view_component/docs_builder_component.rb
379
613
  - lib/view_component/engine.rb
380
614
  - lib/view_component/errors.rb
381
615
  - lib/view_component/inline_template.rb
@@ -390,15 +624,16 @@ files:
390
624
  - lib/view_component/rendering_monkey_patch.rb
391
625
  - lib/view_component/slot.rb
392
626
  - lib/view_component/slotable.rb
627
+ - lib/view_component/slotable_default.rb
393
628
  - lib/view_component/system_test_case.rb
394
629
  - lib/view_component/system_test_helpers.rb
630
+ - lib/view_component/template.rb
395
631
  - lib/view_component/test_case.rb
396
632
  - lib/view_component/test_helpers.rb
397
633
  - lib/view_component/translatable.rb
398
634
  - lib/view_component/use_helpers.rb
399
635
  - lib/view_component/version.rb
400
636
  - lib/view_component/with_content_helper.rb
401
- - lib/yard/mattr_accessor_handler.rb
402
637
  homepage: https://viewcomponent.org
403
638
  licenses:
404
639
  - MIT
@@ -406,7 +641,6 @@ metadata:
406
641
  allowed_push_host: https://rubygems.org
407
642
  source_code_uri: https://github.com/viewcomponent/view_component
408
643
  changelog_uri: https://github.com/ViewComponent/view_component/blob/main/docs/CHANGELOG.md
409
- post_install_message:
410
644
  rdoc_options: []
411
645
  require_paths:
412
646
  - lib
@@ -421,8 +655,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
421
655
  - !ruby/object:Gem::Version
422
656
  version: '0'
423
657
  requirements: []
424
- rubygems_version: 3.5.3
425
- signing_key:
658
+ rubygems_version: 3.6.8
426
659
  specification_version: 4
427
660
  summary: A framework for building reusable, testable & encapsulated view components
428
661
  in Ruby on Rails.
@@ -1,13 +0,0 @@
1
- Description:
2
- ============
3
- Creates a new component and test.
4
- Pass the component name, either CamelCased or under_scored, and an optional list of attributes as arguments.
5
-
6
- Example:
7
- ========
8
- bin/rails generate component Profile name age
9
-
10
- creates a Profile component and test:
11
- Component: app/components/profile_component.rb
12
- Template: app/components/profile_component.html.erb
13
- Test: test/components/profile_component_test.rb
@@ -1,22 +0,0 @@
1
- ---
2
- layout: default
3
- title: API reference
4
- nav_order: 3
5
- ---
6
-
7
- <!-- Warning: AUTO-GENERATED file, don't edit. Add code comments to your Ruby instead <3 -->
8
-
9
- # API
10
-
11
- <% @sections.each do |section| %>
12
- ## <%= section.heading %>
13
-
14
- <% section.methods.each do |method| %>
15
- ### <%== render ViewComponent::DocsBuilderComponent::MethodDoc.new(method, section.show_types) %>
16
-
17
- <% end %>
18
- <% section.error_klasses.each do |error_klass| %>
19
- ### <%== render ViewComponent::DocsBuilderComponent::ErrorKlassDoc.new(error_klass, section.show_types) %>
20
-
21
- <% end %>
22
- <% end %>
@@ -1,96 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ViewComponent
4
- class DocsBuilderComponent < Base
5
- class Section < Struct.new(:heading, :methods, :error_klasses, :show_types, keyword_init: true)
6
- def initialize(heading: nil, methods: [], error_klasses: [], show_types: true)
7
- methods.sort_by! { |method| method[:name] }
8
- error_klasses.sort!
9
- super
10
- end
11
- end
12
-
13
- class ErrorKlassDoc < ViewComponent::Base
14
- def initialize(error_klass, _show_types)
15
- @error_klass = error_klass
16
- end
17
-
18
- def klass_name
19
- @error_klass.gsub("ViewComponent::", "").gsub("::MESSAGE", "")
20
- end
21
-
22
- def error_message
23
- ViewComponent.const_get(@error_klass)
24
- end
25
-
26
- def call
27
- <<~DOCS.chomp
28
- `#{klass_name}`
29
-
30
- #{error_message}
31
- DOCS
32
- end
33
- end
34
-
35
- class MethodDoc < ViewComponent::Base
36
- def initialize(method, show_types = true)
37
- @method = method
38
- @show_types = show_types
39
- end
40
-
41
- def deprecated?
42
- @method.tag(:deprecated).present?
43
- end
44
-
45
- def suffix
46
- " (Deprecated)" if deprecated?
47
- end
48
-
49
- def types
50
- " → [#{@method.tag(:return).types.join(",")}]" if @method.tag(:return)&.types && @show_types
51
- end
52
-
53
- def signature_or_name
54
- @method.signature ? @method.signature.gsub("def ", "") : @method.name
55
- end
56
-
57
- def separator
58
- @method.sep
59
- end
60
-
61
- def docstring
62
- @method.docstring
63
- end
64
-
65
- def deprecation_text
66
- @method.tag(:deprecated)&.text
67
- end
68
-
69
- def docstring_and_deprecation_text
70
- <<~DOCS.strip
71
- #{docstring}
72
-
73
- #{"_#{deprecation_text}_" if deprecated?}
74
- DOCS
75
- end
76
-
77
- def call
78
- <<~DOCS.chomp
79
- `#{separator}#{signature_or_name}`#{types}#{suffix}
80
-
81
- #{docstring_and_deprecation_text}
82
- DOCS
83
- end
84
- end
85
-
86
- # { heading: String, public_only: Boolean, show_types: Boolean}
87
- def initialize(sections: [])
88
- @sections = sections
89
- end
90
-
91
- # deprecation
92
- # return
93
- # only public methods
94
- # sig with types or name
95
- end
96
- end
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module YARD
4
- # YARD Handler to parse `mattr_accessor` calls.
5
- class MattrAccessorHandler < YARD::Handlers::Ruby::Base
6
- handles method_call(:mattr_accessor)
7
- namespace_only
8
-
9
- process do
10
- name = statement.parameters.first.jump(:tstring_content, :ident).source
11
- object = YARD::CodeObjects::MethodObject.new(namespace, name)
12
- register(object)
13
- parse_block(statement.last, owner: object)
14
-
15
- object.dynamic = true
16
- object[:mattr_accessor] = true
17
- end
18
- end
19
- end