view_component 3.22.0 → 4.0.0.alpha2
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 +4 -4
- data/app/controllers/concerns/view_component/preview_actions.rb +2 -9
- data/app/controllers/view_components_system_test_controller.rb +17 -20
- data/app/views/test_mailer/test_asset_email.html.erb +1 -0
- data/app/views/view_components/preview.html.erb +1 -9
- data/docs/CHANGELOG.md +133 -1
- data/lib/view_component/base.rb +42 -61
- data/lib/view_component/collection.rb +11 -17
- data/lib/view_component/compiler.rb +50 -74
- data/lib/view_component/config.rb +0 -21
- data/lib/view_component/deprecation.rb +1 -1
- data/lib/view_component/engine.rb +3 -82
- data/lib/view_component/errors.rb +16 -22
- data/lib/view_component/inline_template.rb +2 -3
- data/lib/view_component/instrumentation.rb +4 -10
- data/lib/view_component/preview.rb +3 -10
- data/lib/view_component/request_details.rb +30 -0
- data/lib/view_component/slot.rb +2 -5
- data/lib/view_component/slotable.rb +31 -39
- data/lib/view_component/system_test_helpers.rb +1 -2
- data/lib/view_component/template.rb +106 -83
- data/lib/view_component/test_helpers.rb +22 -42
- data/lib/view_component/translatable.rb +24 -23
- data/lib/view_component/use_helpers.rb +3 -4
- data/lib/view_component/version.rb +3 -3
- data/lib/view_component.rb +0 -1
- metadata +73 -220
- data/app/assets/vendor/prism.css +0 -4
- data/app/assets/vendor/prism.min.js +0 -12
- data/app/helpers/preview_helper.rb +0 -85
- data/app/views/view_components/_preview_source.html.erb +0 -17
- data/lib/rails/generators/abstract_generator.rb +0 -56
- data/lib/rails/generators/component/USAGE +0 -13
- data/lib/rails/generators/component/component_generator.rb +0 -67
- data/lib/rails/generators/component/templates/component.rb.tt +0 -16
- data/lib/rails/generators/erb/component_generator.rb +0 -33
- data/lib/rails/generators/erb/templates/component.html.erb.tt +0 -1
- data/lib/rails/generators/haml/component_generator.rb +0 -22
- data/lib/rails/generators/haml/templates/component.html.haml.tt +0 -1
- data/lib/rails/generators/locale/component_generator.rb +0 -46
- data/lib/rails/generators/preview/component_generator.rb +0 -39
- data/lib/rails/generators/preview/templates/component_preview.rb.tt +0 -9
- data/lib/rails/generators/rspec/component_generator.rb +0 -31
- data/lib/rails/generators/rspec/templates/component_spec.rb.tt +0 -15
- data/lib/rails/generators/slim/component_generator.rb +0 -22
- data/lib/rails/generators/slim/templates/component.html.slim.tt +0 -1
- data/lib/rails/generators/stimulus/component_generator.rb +0 -44
- data/lib/rails/generators/stimulus/templates/component_controller.js.tt +0 -7
- data/lib/rails/generators/stimulus/templates/component_controller.ts.tt +0 -9
- data/lib/rails/generators/tailwindcss/component_generator.rb +0 -11
- data/lib/rails/generators/tailwindcss/templates/component.html.erb.tt +0 -1
- data/lib/rails/generators/test_unit/component_generator.rb +0 -20
- data/lib/rails/generators/test_unit/templates/component_test.rb.tt +0 -12
- data/lib/view_component/component_error.rb +0 -6
- data/lib/view_component/docs_builder_component.html.erb +0 -22
- data/lib/view_component/docs_builder_component.rb +0 -96
- data/lib/view_component/rails/tasks/view_component.rake +0 -20
- data/lib/view_component/render_component_helper.rb +0 -10
- data/lib/view_component/render_component_to_string_helper.rb +0 -9
- data/lib/view_component/render_monkey_patch.rb +0 -13
- data/lib/view_component/render_to_string_monkey_patch.rb +0 -13
- data/lib/view_component/rendering_component_helper.rb +0 -9
- data/lib/view_component/rendering_monkey_patch.rb +0 -13
- data/lib/yard/mattr_accessor_handler.rb +0 -19
@@ -1,20 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module TestUnit
|
4
|
-
module Generators
|
5
|
-
class ComponentGenerator < ::Rails::Generators::NamedBase
|
6
|
-
source_root File.expand_path("templates", __dir__)
|
7
|
-
check_class_collision suffix: "ComponentTest"
|
8
|
-
|
9
|
-
def create_test_file
|
10
|
-
template "component_test.rb", File.join("test/components", class_path, "#{file_name}_component_test.rb")
|
11
|
-
end
|
12
|
-
|
13
|
-
private
|
14
|
-
|
15
|
-
def file_name
|
16
|
-
@_file_name ||= super.sub(/_component\z/i, "")
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "test_helper"
|
4
|
-
|
5
|
-
class <%= namespaced? ? "#{namespace.name}::" : '' %><%= class_name %>ComponentTest < ViewComponent::TestCase
|
6
|
-
def test_component_renders_something_useful
|
7
|
-
# assert_equal(
|
8
|
-
# %(<span>Hello, components!</span>),
|
9
|
-
# render_inline(<%= class_name %>Component.new(message: "Hello, components!")).css("span").to_html
|
10
|
-
# )
|
11
|
-
end
|
12
|
-
end
|
@@ -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,20 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
task stats: "view_component:statsetup"
|
4
|
-
|
5
|
-
namespace :view_component do
|
6
|
-
task :statsetup do
|
7
|
-
# :nocov:
|
8
|
-
require "rails/code_statistics"
|
9
|
-
|
10
|
-
if Rails.root.join(ViewComponent::Base.view_component_path).directory?
|
11
|
-
::STATS_DIRECTORIES << ["ViewComponents", ViewComponent::Base.view_component_path]
|
12
|
-
end
|
13
|
-
|
14
|
-
if Rails.root.join("test/components").directory?
|
15
|
-
::STATS_DIRECTORIES << ["ViewComponent tests", "test/components"]
|
16
|
-
CodeStatistics::TEST_TYPES << "ViewComponent tests"
|
17
|
-
end
|
18
|
-
# :nocov:
|
19
|
-
end
|
20
|
-
end
|
@@ -1,10 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module ViewComponent
|
4
|
-
module RenderComponentHelper # :nodoc:
|
5
|
-
def render_component(component, &block)
|
6
|
-
component.set_original_view_context(__vc_original_view_context) if is_a?(ViewComponent::Base)
|
7
|
-
component.render_in(self, &block)
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module ViewComponent
|
4
|
-
module RenderToStringMonkeyPatch # :nodoc:
|
5
|
-
def render_to_string(options = {}, args = {})
|
6
|
-
if options.respond_to?(:render_in)
|
7
|
-
options.render_in(view_context)
|
8
|
-
else
|
9
|
-
super
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module ViewComponent
|
4
|
-
module RenderingMonkeyPatch # :nodoc:
|
5
|
-
def render(options = {}, args = {})
|
6
|
-
if options.respond_to?(:render_in)
|
7
|
-
self.response_body = options.render_in(view_context)
|
8
|
-
else
|
9
|
-
super
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
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
|