view_component 2.52.0 → 2.62.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of view_component might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/app/controllers/concerns/view_component/preview_actions.rb +101 -0
- data/app/controllers/view_components_controller.rb +1 -87
- data/app/helpers/preview_helper.rb +3 -3
- data/docs/CHANGELOG.md +285 -1
- data/lib/rails/generators/abstract_generator.rb +4 -4
- data/lib/view_component/base.rb +95 -33
- data/lib/view_component/collection.rb +9 -2
- data/lib/view_component/compile_cache.rb +1 -2
- data/lib/view_component/compiler.rb +31 -18
- data/lib/view_component/content_areas.rb +1 -1
- data/lib/view_component/docs_builder_component.rb +1 -1
- data/lib/view_component/engine.rb +6 -21
- data/lib/view_component/polymorphic_slots.rb +22 -1
- data/lib/view_component/preview.rb +12 -9
- data/lib/view_component/render_component_to_string_helper.rb +1 -1
- data/lib/view_component/render_preview_helper.rb +50 -0
- data/lib/view_component/render_to_string_monkey_patch.rb +1 -1
- data/lib/view_component/rendering_component_helper.rb +1 -1
- data/lib/view_component/rendering_monkey_patch.rb +1 -1
- data/lib/view_component/slotable.rb +5 -6
- data/lib/view_component/slotable_v2.rb +35 -17
- data/lib/view_component/test_helpers.rb +39 -7
- data/lib/view_component/translatable.rb +13 -14
- data/lib/view_component/version.rb +1 -1
- data/lib/view_component.rb +0 -2
- metadata +7 -7
- data/lib/view_component/global_output_buffer.rb +0 -99
- data/lib/view_component/output_buffer_stack.rb +0 -67
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e57d7d7eece678a577cf5f89f4b506fbe1026c79cc8b28d269e6984a01de29c7
|
4
|
+
data.tar.gz: e8fd167897e4bbcfaf0b4d657605acf26a5e1c6dc72e6fd5a868e0e0e76d232b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a6bae85903899c93cb78e11a49082c4e6c2393605c9b3e94cca98ecff1e790a97dd7acda4c5e13b11ad4e4591384d0d30e62d86831998577531b595378f9fcb7
|
7
|
+
data.tar.gz: 814913871cc0d5b4865a6864a0585f06d6c26088cdbab888e4c4d33787f7ab2e74c9dafffd52fe726999d03b9a453186b3f495afc1c0c9da5207b5edb3a89480
|
@@ -0,0 +1,101 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ViewComponent
|
4
|
+
module PreviewActions
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
included do
|
8
|
+
prepend_view_path File.expand_path("../../../views", __dir__)
|
9
|
+
|
10
|
+
around_action :set_locale, only: :previews
|
11
|
+
before_action :require_local!, unless: :show_previews?
|
12
|
+
|
13
|
+
if respond_to?(:content_security_policy)
|
14
|
+
content_security_policy(false)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def index
|
19
|
+
@previews = ViewComponent::Preview.all
|
20
|
+
@page_title = "Component Previews"
|
21
|
+
render "view_components/index", **determine_layout
|
22
|
+
end
|
23
|
+
|
24
|
+
def previews
|
25
|
+
find_preview
|
26
|
+
|
27
|
+
if params[:path] == @preview.preview_name
|
28
|
+
@page_title = "Component Previews for #{@preview.preview_name}"
|
29
|
+
render "view_components/previews", **determine_layout
|
30
|
+
else
|
31
|
+
prepend_application_view_paths
|
32
|
+
prepend_preview_examples_view_path
|
33
|
+
@example_name = File.basename(params[:path])
|
34
|
+
@render_args = @preview.render_args(@example_name, params: params.permit!)
|
35
|
+
layout = determine_layout(@render_args[:layout], prepend_views: false)[:layout]
|
36
|
+
locals = @render_args[:locals]
|
37
|
+
opts = {}
|
38
|
+
opts[:layout] = layout if layout.present? || layout == false
|
39
|
+
opts[:locals] = locals if locals.present?
|
40
|
+
render "view_components/preview", opts
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
# :doc:
|
47
|
+
def default_preview_layout
|
48
|
+
ViewComponent::Base.default_preview_layout
|
49
|
+
end
|
50
|
+
|
51
|
+
# :doc:
|
52
|
+
def show_previews?
|
53
|
+
ViewComponent::Base.show_previews
|
54
|
+
end
|
55
|
+
|
56
|
+
# :doc:
|
57
|
+
def find_preview
|
58
|
+
candidates = []
|
59
|
+
params[:path].to_s.scan(%r{/|$}) { candidates << $` }
|
60
|
+
preview = candidates.detect { |candidate| ViewComponent::Preview.exists?(candidate) }
|
61
|
+
|
62
|
+
if preview
|
63
|
+
@preview = ViewComponent::Preview.find(preview)
|
64
|
+
else
|
65
|
+
raise AbstractController::ActionNotFound, "Component preview '#{params[:path]}' not found."
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def set_locale
|
70
|
+
I18n.with_locale(params[:locale] || I18n.default_locale) do
|
71
|
+
yield
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
# Returns either {} or {layout: value} depending on configuration
|
76
|
+
def determine_layout(layout_override = nil, prepend_views: true)
|
77
|
+
return {} unless defined?(Rails.root)
|
78
|
+
|
79
|
+
layout_declaration = {}
|
80
|
+
|
81
|
+
if !layout_override.nil?
|
82
|
+
# Allow component-level override, even if false (thus no layout rendered)
|
83
|
+
layout_declaration[:layout] = layout_override
|
84
|
+
elsif default_preview_layout.present?
|
85
|
+
layout_declaration[:layout] = default_preview_layout
|
86
|
+
end
|
87
|
+
|
88
|
+
prepend_application_view_paths if layout_declaration[:layout].present? && prepend_views
|
89
|
+
|
90
|
+
layout_declaration
|
91
|
+
end
|
92
|
+
|
93
|
+
def prepend_application_view_paths
|
94
|
+
prepend_view_path Rails.root.join("app/views") if defined?(Rails.root)
|
95
|
+
end
|
96
|
+
|
97
|
+
def prepend_preview_examples_view_path
|
98
|
+
prepend_view_path(ViewComponent::Base.preview_paths)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
@@ -3,91 +3,5 @@
|
|
3
3
|
require "rails/application_controller"
|
4
4
|
|
5
5
|
class ViewComponentsController < Rails::ApplicationController # :nodoc:
|
6
|
-
|
7
|
-
|
8
|
-
around_action :set_locale, only: :previews
|
9
|
-
before_action :find_preview, only: :previews
|
10
|
-
before_action :require_local!, unless: :show_previews?
|
11
|
-
|
12
|
-
if respond_to?(:content_security_policy)
|
13
|
-
content_security_policy(false)
|
14
|
-
end
|
15
|
-
|
16
|
-
def index
|
17
|
-
@previews = ViewComponent::Preview.all
|
18
|
-
@page_title = "Component Previews"
|
19
|
-
render "view_components/index", **determine_layout
|
20
|
-
end
|
21
|
-
|
22
|
-
def previews
|
23
|
-
if params[:path] == @preview.preview_name
|
24
|
-
@page_title = "Component Previews for #{@preview.preview_name}"
|
25
|
-
render "view_components/previews", **determine_layout
|
26
|
-
else
|
27
|
-
prepend_application_view_paths
|
28
|
-
prepend_preview_examples_view_path
|
29
|
-
@example_name = File.basename(params[:path])
|
30
|
-
@render_args = @preview.render_args(@example_name, params: params.permit!)
|
31
|
-
layout = determine_layout(@render_args[:layout], prepend_views: false)[:layout]
|
32
|
-
locals = @render_args[:locals]
|
33
|
-
opts = {}
|
34
|
-
opts[:layout] = layout if layout.present? || layout == false
|
35
|
-
opts[:locals] = locals if locals.present?
|
36
|
-
render "view_components/preview", opts # rubocop:disable GitHub/RailsControllerRenderLiteral
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
private
|
41
|
-
|
42
|
-
def default_preview_layout # :doc:
|
43
|
-
ViewComponent::Base.default_preview_layout
|
44
|
-
end
|
45
|
-
|
46
|
-
def show_previews? # :doc:
|
47
|
-
ViewComponent::Base.show_previews
|
48
|
-
end
|
49
|
-
|
50
|
-
def find_preview # :doc:
|
51
|
-
candidates = []
|
52
|
-
params[:path].to_s.scan(%r{/|$}) { candidates << $` }
|
53
|
-
preview = candidates.detect { |candidate| ViewComponent::Preview.exists?(candidate) }
|
54
|
-
|
55
|
-
if preview
|
56
|
-
@preview = ViewComponent::Preview.find(preview)
|
57
|
-
else
|
58
|
-
raise AbstractController::ActionNotFound, "Component preview '#{params[:path]}' not found."
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def set_locale
|
63
|
-
I18n.with_locale(params[:locale] || I18n.default_locale) do
|
64
|
-
yield
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
# Returns either {} or {layout: value} depending on configuration
|
69
|
-
def determine_layout(layout_override = nil, prepend_views: true)
|
70
|
-
return {} unless defined?(Rails.root)
|
71
|
-
|
72
|
-
layout_declaration = {}
|
73
|
-
|
74
|
-
if !layout_override.nil?
|
75
|
-
# Allow component-level override, even if false (thus no layout rendered)
|
76
|
-
layout_declaration[:layout] = layout_override
|
77
|
-
elsif default_preview_layout.present?
|
78
|
-
layout_declaration[:layout] = default_preview_layout
|
79
|
-
end
|
80
|
-
|
81
|
-
prepend_application_view_paths if layout_declaration[:layout].present? && prepend_views
|
82
|
-
|
83
|
-
layout_declaration
|
84
|
-
end
|
85
|
-
|
86
|
-
def prepend_application_view_paths
|
87
|
-
prepend_view_path Rails.root.join("app/views") if defined?(Rails.root)
|
88
|
-
end
|
89
|
-
|
90
|
-
def prepend_preview_examples_view_path
|
91
|
-
prepend_view_path(ViewComponent::Base.preview_paths)
|
92
|
-
end
|
6
|
+
include ViewComponent::PreviewActions
|
93
7
|
end
|
@@ -7,14 +7,14 @@ module PreviewHelper
|
|
7
7
|
def preview_source
|
8
8
|
return if @render_args.nil?
|
9
9
|
|
10
|
-
render "preview_source"
|
10
|
+
render "preview_source"
|
11
11
|
end
|
12
12
|
|
13
13
|
def find_template_data(lookup_context:, template_identifier:)
|
14
14
|
template = lookup_context.find_template(template_identifier)
|
15
15
|
|
16
16
|
if Rails.version.to_f >= 6.1 || template.source.present?
|
17
|
-
|
17
|
+
{
|
18
18
|
source: template.source,
|
19
19
|
prism_language_name: prism_language_name_by_template(template: template)
|
20
20
|
}
|
@@ -40,7 +40,7 @@ module PreviewHelper
|
|
40
40
|
template_source = File.read(template_file_path)
|
41
41
|
prism_language_name = prism_language_name_by_template_path(template_file_path: template_file_path)
|
42
42
|
|
43
|
-
|
43
|
+
{
|
44
44
|
source: template_source,
|
45
45
|
prism_language_name: prism_language_name
|
46
46
|
}
|
data/docs/CHANGELOG.md
CHANGED
@@ -3,10 +3,290 @@ layout: default
|
|
3
3
|
title: Changelog
|
4
4
|
---
|
5
5
|
|
6
|
+
<!-- Add unreleased changes under the "main" heading. -->
|
7
|
+
|
6
8
|
# Changelog
|
7
9
|
|
8
10
|
## main
|
9
11
|
|
12
|
+
## 2.62.0
|
13
|
+
|
14
|
+
* Remove the experimental global output buffer feature.
|
15
|
+
* Restore functionality that used to attempt to compile templates on each call to `#render_in`.
|
16
|
+
* Un-pin `rails` `main` dependency.
|
17
|
+
|
18
|
+
*Cameron Dutro*
|
19
|
+
|
20
|
+
* Add blank space between "in" and "ViewComponent" in a deprecation warning.
|
21
|
+
|
22
|
+
*Vikram Dighe*
|
23
|
+
|
24
|
+
* Add HappyCo to list of companies using ViewComponent.
|
25
|
+
|
26
|
+
*Josh Clayton*
|
27
|
+
|
28
|
+
## 2.61.1
|
29
|
+
|
30
|
+
* Revert `Expose Capybara DSL methods directly inside tests.` This change unintentionally broke other Capybara methods and thus introduced a regression. We aren't confident that we can fail forward so we have decided to revert this change.
|
31
|
+
|
32
|
+
*Joel Hawksley*, *Blake Williams*
|
33
|
+
|
34
|
+
* Revert change making content evaluation consistent.
|
35
|
+
|
36
|
+
*Blake Williams*
|
37
|
+
|
38
|
+
* Pin `rails` `main` dependency due to incompatibility with Global Output Buffer.
|
39
|
+
|
40
|
+
*Joel Hawksley*
|
41
|
+
|
42
|
+
## 2.61.0
|
43
|
+
|
44
|
+
* Ensure side-effects in `content` are consistently evaluated before components are rendered. This change effectively means that `content` is evaluated for every component render where `render?` returns true. As a result, code that is passed to a component via a block/content will now always be evaluated, before `#call`, which can reveal bugs in existing components.
|
45
|
+
|
46
|
+
*Blake Williams*
|
47
|
+
|
48
|
+
## 2.60.0
|
49
|
+
|
50
|
+
* Add support for `render_preview` in RSpec tests.
|
51
|
+
|
52
|
+
*Thomas Hutterer*
|
53
|
+
|
54
|
+
## 2.59.0
|
55
|
+
|
56
|
+
* Expose Capybara DSL methods directly inside tests.
|
57
|
+
|
58
|
+
The following Capybara methods are now available directly without having to use the `page` method:
|
59
|
+
|
60
|
+
* [`all`](https://rubydoc.info/github/teamcapybara/capybara/Capybara%2FNode%2FFinders:all)
|
61
|
+
* [`first`](https://rubydoc.info/github/teamcapybara/capybara/Capybara%2FNode%2FFinders:first)
|
62
|
+
* [`text`](https://rubydoc.info/github/teamcapybara/capybara/Capybara%2FNode%2FSimple:text)
|
63
|
+
* [`find`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FFinders:find)
|
64
|
+
* [`find_all`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FFinders:find_all)
|
65
|
+
* [`find_button`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FFinders:find_button)
|
66
|
+
* [`find_by_id`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FFinders:find_by_id)
|
67
|
+
* [`find_field`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FFinders:find_field)
|
68
|
+
* [`find_link`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FFinders:find_link)
|
69
|
+
* [`has_content?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_content%3F)
|
70
|
+
* [`has_text?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_text%3F)
|
71
|
+
* [`has_css?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_css%3F)
|
72
|
+
* [`has_no_content?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_no_content%3F)
|
73
|
+
* [`has_no_text?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_no_text%3F)
|
74
|
+
* [`has_no_css?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_no_css%3F)
|
75
|
+
* [`has_no_xpath?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_no_xpath%3F)
|
76
|
+
* [`has_xpath?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_xpath%3F)
|
77
|
+
* [`has_link?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_link%3F)
|
78
|
+
* [`has_no_link?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_no_link%3F)
|
79
|
+
* [`has_button?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_button%3F)
|
80
|
+
* [`has_no_button?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_no_button%3F)
|
81
|
+
* [`has_field?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_field%3F)
|
82
|
+
* [`has_no_field?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_no_field%3F)
|
83
|
+
* [`has_checked_field?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_checked_field%3F)
|
84
|
+
* [`has_unchecked_field?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_unchecked_field%3F)
|
85
|
+
* [`has_no_table?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_no_table%3F)
|
86
|
+
* [`has_table?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_table%3F)
|
87
|
+
* [`has_select?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_select%3F)
|
88
|
+
* [`has_no_select?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_no_select%3F)
|
89
|
+
* [`has_selector?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_selector%3F)
|
90
|
+
* [`has_no_selector?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_no_selector%3F)
|
91
|
+
* [`has_no_checked_field?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_no_checked_field%3F)
|
92
|
+
* [`has_no_unchecked_field?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_no_unchecked_field%3F)
|
93
|
+
|
94
|
+
* Add support for `within*` Capybara DLS methods:
|
95
|
+
|
96
|
+
* [`within`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FSession:within)
|
97
|
+
* [`within_element`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FSession:within)
|
98
|
+
* [`within_fieldset`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FSession:within_fieldset)
|
99
|
+
* [`within_table`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FSession:within_table)
|
100
|
+
|
101
|
+
*Jacob Carlborg*
|
102
|
+
|
103
|
+
## 2.58.0
|
104
|
+
|
105
|
+
* Switch to `standardrb`.
|
106
|
+
|
107
|
+
*Joel Hawksley*
|
108
|
+
|
109
|
+
* Add BootrAils article to resources.
|
110
|
+
|
111
|
+
*Joel Hawksley*
|
112
|
+
|
113
|
+
* Add @boardfish and @spone as maintainers.
|
114
|
+
|
115
|
+
*Joel Hawksley*, *Cameron Dutro*, *Blake Williams*
|
116
|
+
|
117
|
+
* Re-compile updated, inherited templates when class caching is disabled.
|
118
|
+
|
119
|
+
*Patrick Arnett*
|
120
|
+
|
121
|
+
* Add the latest version to the docs index.
|
122
|
+
* Improve the docs: add the versions various features were introduced in.
|
123
|
+
|
124
|
+
*Hans Lemuet*
|
125
|
+
|
126
|
+
* Update docs to reflect lack of block content support in controllers.
|
127
|
+
|
128
|
+
*Joel Hawksley*
|
129
|
+
|
130
|
+
* Prevent adding duplicates to `autoload_paths`.
|
131
|
+
|
132
|
+
*Thomas Hutterer*
|
133
|
+
|
134
|
+
* Add FreeAgent to list of companies using ViewComponent.
|
135
|
+
|
136
|
+
*Simon Fish*
|
137
|
+
|
138
|
+
* Include polymorphic slots in `ViewComponent::Base` by default.
|
139
|
+
|
140
|
+
*Cameron Dutro*
|
141
|
+
|
142
|
+
* Add per-component config option for stripping newlines from templates before compilation.
|
143
|
+
|
144
|
+
*Cameron Dutro*
|
145
|
+
|
146
|
+
* Add link to article by Matouš Borák.
|
147
|
+
|
148
|
+
*Joel Hawksley*
|
149
|
+
|
150
|
+
## 2.57.1
|
151
|
+
|
152
|
+
* Fix issue causing `NoMethodError`s when calling helper methods from components rendered as part of a collection.
|
153
|
+
* Fix syntax error in the ERB example in the polymorphic slots docs.
|
154
|
+
|
155
|
+
*Cameron Dutro*
|
156
|
+
|
157
|
+
## 2.57.0
|
158
|
+
|
159
|
+
* Add missing `require` for `Translatable` module in `Base`.
|
160
|
+
|
161
|
+
*Hans Lemuet*
|
162
|
+
|
163
|
+
* Allow anything that responds to `#render_in` to be rendered in the parent component's view context.
|
164
|
+
|
165
|
+
*Cameron Dutro*
|
166
|
+
|
167
|
+
* Fix script/release so it honors semver.
|
168
|
+
|
169
|
+
*Cameron Dutro*
|
170
|
+
|
171
|
+
## 2.56.2
|
172
|
+
|
173
|
+
* Restore removed `rendered_component`, marking it for deprecation in v3.0.0.
|
174
|
+
|
175
|
+
*Tyson Gach*, *Richard Macklin*, *Joel Hawksley*
|
176
|
+
|
177
|
+
## 2.56.1
|
178
|
+
|
179
|
+
* Rename private accessor `rendered_component` to `rendered_content`.
|
180
|
+
|
181
|
+
*Yoshiyuki Hirano*, *Simon Dawson*
|
182
|
+
|
183
|
+
## 2.56.0
|
184
|
+
|
185
|
+
* Introduce experimental `render_preview` test helper. Note: `@rendered_component` in `TestHelpers` has been renamed to `@rendered_content`.
|
186
|
+
|
187
|
+
*Joel Hawksley*
|
188
|
+
|
189
|
+
* Move framework tests into sandbox application.
|
190
|
+
|
191
|
+
*Joel Hawksley*
|
192
|
+
|
193
|
+
* Add G2 to list of companies that use ViewComponent.
|
194
|
+
|
195
|
+
*Jack Shuff*
|
196
|
+
|
197
|
+
* Add Within3 to list of companies that use ViewComponent.
|
198
|
+
|
199
|
+
*Drew Bragg*
|
200
|
+
|
201
|
+
* Add Mission Met to list of companies that use ViewComponent.
|
202
|
+
|
203
|
+
*Nick Smith*
|
204
|
+
|
205
|
+
* Fix `#with_request_url` test helper not parsing nested query parameters into nested hashes.
|
206
|
+
|
207
|
+
*Richard Marbach*
|
208
|
+
|
209
|
+
## 2.55.0
|
210
|
+
|
211
|
+
* Add `render_parent` convenience method to avoid confusion between `<%= super %>` and `<% super %>` in template code.
|
212
|
+
|
213
|
+
*Cameron Dutro*
|
214
|
+
|
215
|
+
* Add note about discouraging inheritance.
|
216
|
+
|
217
|
+
*Joel Hawksley*
|
218
|
+
|
219
|
+
* Clean up grammar in documentation.
|
220
|
+
|
221
|
+
*Joel Hawksley*
|
222
|
+
|
223
|
+
* The ViewComponent team at GitHub is hiring! We're looking for a Rails engineer with accessibility experience: [https://boards.greenhouse.io/github/jobs/4020166](https://boards.greenhouse.io/github/jobs/4020166). Reach out to joelhawksley@github.com with any questions!
|
224
|
+
|
225
|
+
* The ViewComponent team is hosting a happy hour at RailsConf. Join us for snacks, drinks, and stickers: [https://www.eventbrite.com/e/viewcomponent-happy-hour-tickets-304168585427](https://www.eventbrite.com/e/viewcomponent-happy-hour-tickets-304168585427)
|
226
|
+
|
227
|
+
## 2.54.1
|
228
|
+
|
229
|
+
* Update docs dependencies.
|
230
|
+
|
231
|
+
*Joel Hawksley*
|
232
|
+
|
233
|
+
* Resolve warning in slots API.
|
234
|
+
* Raise in the test environment when ViewComponent code emits a warning.
|
235
|
+
|
236
|
+
*Blake Williams*
|
237
|
+
|
238
|
+
## 2.54.0
|
239
|
+
|
240
|
+
* Add `with_*` slot API for defining slots. Note: we plan to deprecate the non `with_*` API for slots in an upcoming release.
|
241
|
+
|
242
|
+
*Blake Williams*
|
243
|
+
|
244
|
+
* Add QuickNode to list of companies that use ViewComponent.
|
245
|
+
|
246
|
+
*Luc Castera*
|
247
|
+
|
248
|
+
* Include the `Translatable` module by default.
|
249
|
+
|
250
|
+
*Elia Schito*
|
251
|
+
|
252
|
+
* Update docs dependencies.
|
253
|
+
|
254
|
+
*Joel Hawksley*
|
255
|
+
|
256
|
+
## 2.53.0
|
257
|
+
|
258
|
+
* Add support for relative I18n scopes to translations.
|
259
|
+
|
260
|
+
*Elia Schito*
|
261
|
+
|
262
|
+
* Update CI configuration to use latest Rails 7.0.
|
263
|
+
|
264
|
+
*Hans Lemuet*
|
265
|
+
|
266
|
+
* Document how to use blocks with lambda slots.
|
267
|
+
|
268
|
+
*Sam Partington*
|
269
|
+
|
270
|
+
* Skip Rails 5.2 in local test environment if using incompatible Ruby version.
|
271
|
+
|
272
|
+
*Cameron Dutro*, *Blake Williams*, *Joel Hawksley*
|
273
|
+
|
274
|
+
* Improve landing page documentation.
|
275
|
+
|
276
|
+
*Jason Swett*
|
277
|
+
|
278
|
+
* Add Bearer to list of companies that use ViewComponent.
|
279
|
+
|
280
|
+
*Yaroslav Shmarov*
|
281
|
+
|
282
|
+
* Add articles to resources page.
|
283
|
+
|
284
|
+
*Joel Hawksley*
|
285
|
+
|
286
|
+
* Enable rendering arbitrary block contents in the view context in tests.
|
287
|
+
|
288
|
+
*Cameron Dutro*
|
289
|
+
|
10
290
|
## 2.52.0
|
11
291
|
|
12
292
|
* Add ADR for separate slot getter/setter API.
|
@@ -124,10 +404,14 @@ title: Changelog
|
|
124
404
|
|
125
405
|
*Joel Hawksley*
|
126
406
|
|
127
|
-
* Add Ruby 3.1 and Rails 7.0 to CI
|
407
|
+
* Add Ruby 3.1 and Rails 7.0 to CI.
|
128
408
|
|
129
409
|
*Peter Goldstein*
|
130
410
|
|
411
|
+
* Move preview logic to module for easier app integration.
|
412
|
+
|
413
|
+
*Sammy Henningsson*
|
414
|
+
|
131
415
|
## 2.48.0
|
132
416
|
|
133
417
|
* Correct path in example test command in Contributing docs.
|
@@ -36,10 +36,10 @@ module ViewComponent
|
|
36
36
|
|
37
37
|
def stimulus_controller
|
38
38
|
if options["stimulus"]
|
39
|
-
File.join(destination_directory, destination_file_name)
|
40
|
-
sub("#{component_path}/", "")
|
41
|
-
|
42
|
-
gsub("/", "--")
|
39
|
+
File.join(destination_directory, destination_file_name)
|
40
|
+
.sub("#{component_path}/", "")
|
41
|
+
.tr("_", "-")
|
42
|
+
.gsub("/", "--")
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|