view_component 3.23.2 → 4.12.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.
- checksums.yaml +4 -4
- data/app/controllers/concerns/view_component/preview_actions.rb +11 -14
- data/app/controllers/view_components_system_test_controller.rb +25 -19
- data/app/views/test_mailer/test_asset_email.html.erb +1 -0
- data/app/views/test_mailer/test_url_email.html.erb +1 -0
- data/app/views/view_components/preview.html.erb +1 -9
- data/docs/CHANGELOG.md +612 -108
- data/lib/{rails/generators → generators/view_component}/abstract_generator.rb +2 -2
- data/lib/{rails/generators → generators/view_component}/component/component_generator.rb +17 -4
- data/lib/{rails/generators → generators/view_component}/component/templates/component.rb.tt +6 -1
- data/lib/{rails/generators/erb/component_generator.rb → generators/view_component/erb/erb_generator.rb} +4 -3
- data/lib/{rails/generators/haml/component_generator.rb → generators/view_component/haml/haml_generator.rb} +3 -3
- data/lib/{rails/generators/locale/component_generator.rb → generators/view_component/locale/locale_generator.rb} +3 -3
- data/lib/{rails/generators/preview/component_generator.rb → generators/view_component/preview/preview_generator.rb} +3 -3
- data/lib/{rails/generators/rspec/component_generator.rb → generators/view_component/rspec/rspec_generator.rb} +3 -3
- data/lib/{rails/generators/slim/component_generator.rb → generators/view_component/slim/slim_generator.rb} +3 -3
- data/lib/{rails/generators/stimulus/component_generator.rb → generators/view_component/stimulus/stimulus_generator.rb} +3 -3
- data/lib/generators/view_component/tailwindcss/tailwindcss_generator.rb +11 -0
- data/lib/{rails/generators/test_unit/component_generator.rb → generators/view_component/test_unit/test_unit_generator.rb} +2 -2
- data/lib/view_component/base.rb +252 -163
- data/lib/view_component/collection.rb +33 -35
- data/lib/view_component/compiler.rb +55 -80
- data/lib/view_component/config.rb +55 -85
- data/lib/view_component/configurable.rb +19 -3
- data/lib/view_component/deprecation.rb +1 -1
- data/lib/view_component/engine.rb +46 -106
- data/lib/view_component/errors.rb +16 -34
- data/lib/view_component/inline_template.rb +4 -4
- data/lib/view_component/instrumentation.rb +21 -14
- data/lib/view_component/preview.rb +7 -12
- data/lib/view_component/request_details.rb +30 -0
- data/lib/view_component/slot.rb +7 -15
- data/lib/view_component/slotable.rb +94 -80
- data/lib/view_component/system_spec_helpers.rb +11 -0
- data/lib/view_component/system_test_helpers.rb +2 -2
- data/lib/view_component/template.rb +159 -83
- data/lib/view_component/test_helpers.rb +67 -50
- data/lib/view_component/translatable.rb +33 -32
- data/lib/view_component/version.rb +3 -3
- data/lib/view_component.rb +9 -6
- metadata +36 -556
- 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/tailwindcss/component_generator.rb +0 -11
- data/lib/view_component/capture_compatibility.rb +0 -44
- data/lib/view_component/component_error.rb +0 -6
- 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/view_component/slotable_default.rb +0 -20
- data/lib/view_component/use_helpers.rb +0 -42
- /data/lib/{rails/generators → generators/view_component}/erb/templates/component.html.erb.tt +0 -0
- /data/lib/{rails/generators → generators/view_component}/haml/templates/component.html.haml.tt +0 -0
- /data/lib/{rails/generators → generators/view_component}/preview/templates/component_preview.rb.tt +0 -0
- /data/lib/{rails/generators → generators/view_component}/rspec/templates/component_spec.rb.tt +0 -0
- /data/lib/{rails/generators → generators/view_component}/slim/templates/component.html.slim.tt +0 -0
- /data/lib/{rails/generators → generators/view_component}/stimulus/templates/component_controller.js.tt +0 -0
- /data/lib/{rails/generators → generators/view_component}/stimulus/templates/component_controller.ts.tt +0 -0
- /data/lib/{rails/generators → generators/view_component}/tailwindcss/templates/component.html.erb.tt +0 -0
- /data/lib/{rails/generators → generators/view_component}/test_unit/templates/component_test.rb.tt +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b2f1a7d34956fc9ae629c0f0e710f4a7335b33ebc99f1c3eccafc41d19713524
|
|
4
|
+
data.tar.gz: efd4bec7d2425da171f89f28fbc1bfaf9f2cba94fd0f2a9cbce674830281938e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5d0f5024d419a56b5e178f0cce3d77ac4a1ae2d4d3efc0ac5334e7b55a4dcb6cc7460aa4d60a47bce63918b0a452b53c5425297ef03da2ce074793407acef570
|
|
7
|
+
data.tar.gz: be1d649efec64995de234eb70998001d42cd9b0197bdce00ec5011d68cb2a2784925abf283b3f51c3986a55a446db3ba0c17cedf406c919e31b178ece2be6b51
|
|
@@ -8,20 +8,13 @@ module ViewComponent
|
|
|
8
8
|
prepend_view_path File.expand_path("../../../views", __dir__)
|
|
9
9
|
|
|
10
10
|
around_action :set_locale, only: :previews
|
|
11
|
-
before_action :require_local!, unless: :
|
|
11
|
+
before_action :require_local!, unless: :previews_enabled?
|
|
12
12
|
|
|
13
|
-
content_security_policy(false)
|
|
13
|
+
content_security_policy(false)
|
|
14
14
|
|
|
15
15
|
# Including helpers here ensures that we're loading the
|
|
16
16
|
# latest version of helpers if code-reloading is enabled
|
|
17
|
-
if include_all_helpers
|
|
18
|
-
helper :all
|
|
19
|
-
else
|
|
20
|
-
# :nocov:
|
|
21
|
-
# Always provide the #view_source helper
|
|
22
|
-
helper PreviewHelper
|
|
23
|
-
# :nocov:
|
|
24
|
-
end
|
|
17
|
+
helper :all if include_all_helpers
|
|
25
18
|
end
|
|
26
19
|
|
|
27
20
|
def index
|
|
@@ -54,12 +47,12 @@ module ViewComponent
|
|
|
54
47
|
|
|
55
48
|
# :doc:
|
|
56
49
|
def default_preview_layout
|
|
57
|
-
ViewComponent::Base.config.
|
|
50
|
+
ViewComponent::Base.config.previews.default_layout
|
|
58
51
|
end
|
|
59
52
|
|
|
60
53
|
# :doc:
|
|
61
|
-
def
|
|
62
|
-
ViewComponent::Base.config.
|
|
54
|
+
def previews_enabled?
|
|
55
|
+
ViewComponent::Base.config.previews.enabled
|
|
63
56
|
end
|
|
64
57
|
|
|
65
58
|
# :doc:
|
|
@@ -71,7 +64,11 @@ module ViewComponent
|
|
|
71
64
|
if preview
|
|
72
65
|
@preview = ViewComponent::Preview.find(preview)
|
|
73
66
|
else
|
|
67
|
+
# TODO: This branch is covered in #test_returns_404_when_preview_does_not_exist,
|
|
68
|
+
# but Simplecov doesn't always mark it as covered.
|
|
69
|
+
# :nocov:
|
|
74
70
|
raise AbstractController::ActionNotFound, "Component preview '#{params[:path]}' not found."
|
|
71
|
+
# :nocov:
|
|
75
72
|
end
|
|
76
73
|
end
|
|
77
74
|
|
|
@@ -102,7 +99,7 @@ module ViewComponent
|
|
|
102
99
|
end
|
|
103
100
|
|
|
104
101
|
def prepend_preview_examples_view_path
|
|
105
|
-
prepend_view_path(ViewComponent::Base.
|
|
102
|
+
prepend_view_path(ViewComponent::Base.previews.paths)
|
|
106
103
|
end
|
|
107
104
|
end
|
|
108
105
|
end
|
|
@@ -1,30 +1,36 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require "view_component/errors"
|
|
4
|
+
|
|
3
5
|
class ViewComponentsSystemTestController < ActionController::Base # :nodoc:
|
|
4
|
-
|
|
5
|
-
|
|
6
|
+
if Rails.env.test?
|
|
7
|
+
before_action :validate_file_path
|
|
6
8
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
9
|
+
def self.temp_dir
|
|
10
|
+
@_tmpdir ||= FileUtils.mkdir_p("./tmp/view_components/").first
|
|
11
|
+
end
|
|
10
12
|
|
|
11
|
-
|
|
12
|
-
render file: @path
|
|
13
|
-
end
|
|
13
|
+
rescue_from ViewComponent::SystemTestControllerNefariousPathError, with: :render_not_found
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
def system_test_entrypoint
|
|
16
|
+
render file: @path
|
|
17
|
+
end
|
|
16
18
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
def render_not_found
|
|
22
|
+
head :not_found
|
|
23
|
+
end
|
|
20
24
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
# Ensure that the file path is valid and doesn't target files outside
|
|
26
|
+
# the expected directory (e.g. via a path traversal or symlink attack)
|
|
27
|
+
def validate_file_path
|
|
28
|
+
base_path = ::File.realpath(self.class.temp_dir)
|
|
29
|
+
@path = ::File.realpath(params.permit(:file)[:file], base_path)
|
|
30
|
+
allowed_prefix = "#{base_path}#{::File::SEPARATOR}"
|
|
31
|
+
unless @path == base_path || @path.start_with?(allowed_prefix)
|
|
32
|
+
raise ViewComponent::SystemTestControllerNefariousPathError
|
|
33
|
+
end
|
|
28
34
|
end
|
|
29
35
|
end
|
|
30
36
|
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%= render AssetComponent.new %>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%= render(UrlForMailerComponent.new) %>
|
|
@@ -1,13 +1,5 @@
|
|
|
1
1
|
<% if @render_args[:component] %>
|
|
2
|
-
|
|
3
|
-
<%= render(@render_args[:component], @render_args[:args], &@render_args[:block]) %>
|
|
4
|
-
<% else %>
|
|
5
|
-
<%= render_component(@render_args[:component], &@render_args[:block]) %>
|
|
6
|
-
<% end %>
|
|
2
|
+
<%= render(@render_args[:component], @render_args[:args], &@render_args[:block]) %>
|
|
7
3
|
<% else %>
|
|
8
4
|
<%= render template: @render_args[:template], locals: @render_args[:locals] || {} %>
|
|
9
5
|
<% end %>
|
|
10
|
-
|
|
11
|
-
<% if ViewComponent::Base.config.show_previews_source %>
|
|
12
|
-
<%= preview_source %>
|
|
13
|
-
<% end %>
|