view_component 2.24.0 → 2.25.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.
Potentially problematic release.
This version of view_component might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -0
- data/lib/rails/generators/component/component_generator.rb +7 -0
- data/lib/rails/generators/component/templates/component.rb.tt +6 -0
- data/lib/rails/generators/erb/component_generator.rb +7 -4
- data/lib/rails/generators/preview/component_generator.rb +21 -0
- data/lib/rails/generators/preview/templates/component_preview.rb.tt +5 -0
- data/lib/view_component/base.rb +20 -1
- data/lib/view_component/compiler.rb +6 -6
- data/lib/view_component/version.rb +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ed1ee878b4b1519adcb75b06689a3341367cca5aa8ae4dd087cb2fba0c06a355
|
4
|
+
data.tar.gz: 70459f53b555b8edf6675346a42c1be87bb36267bce23ffb9cc4a639731c1b77
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ac2189345c278608e8dc96ec1c7f90472991aefc86da43968489f3ea3cff4c9306ef8280553b2dad6a7a35b24e74eabd2269b3efcba4026b00b642dcac0dcf4
|
7
|
+
data.tar.gz: 6a393762db37291a6f6eaa2e19575aa035f103cc6c0fe71c96648fb827ed0e140c0e9d9f297901f699f7abd3e4946ca8e048bf53b1dbe62e47663e2bb591918e
|
data/CHANGELOG.md
CHANGED
@@ -2,8 +2,22 @@
|
|
2
2
|
|
3
3
|
## main
|
4
4
|
|
5
|
+
## 2.25.0
|
6
|
+
|
7
|
+
* Add `--preview` generator option to create an associated preview file.
|
8
|
+
|
9
|
+
*Bob Maerten*
|
10
|
+
|
11
|
+
* Add argument validation to avoid `content` override.
|
12
|
+
|
13
|
+
*Manuel Puyol*
|
14
|
+
|
5
15
|
## 2.24.0
|
6
16
|
|
17
|
+
* Add `--inline` option to the erb generator. Prevents default erb template from being created and creates a component with a call method.
|
18
|
+
|
19
|
+
*Nachiket Pusalkar*
|
20
|
+
|
7
21
|
* Add test case for checking presence of `content` in `#render?`.
|
8
22
|
|
9
23
|
*Joel Hawksley*
|
@@ -7,6 +7,7 @@ module Rails
|
|
7
7
|
|
8
8
|
argument :attributes, type: :array, default: [], banner: "attribute"
|
9
9
|
check_class_collision suffix: "Component"
|
10
|
+
class_option :inline, type: :boolean, default: false
|
10
11
|
|
11
12
|
def create_component_file
|
12
13
|
template "component.rb", File.join("app/components", class_path, "#{file_name}_component.rb")
|
@@ -14,6 +15,8 @@ module Rails
|
|
14
15
|
|
15
16
|
hook_for :test_framework
|
16
17
|
|
18
|
+
hook_for :preview, type: :boolean
|
19
|
+
|
17
20
|
hook_for :template_engine do |instance, template_engine|
|
18
21
|
instance.invoke template_engine, [instance.name]
|
19
22
|
end
|
@@ -37,6 +40,10 @@ module Rails
|
|
37
40
|
def initialize_body
|
38
41
|
attributes.map { |attr| "@#{attr.name} = #{attr.name}" }.join("\n ")
|
39
42
|
end
|
43
|
+
|
44
|
+
def initialize_call_method_for_inline?
|
45
|
+
options["inline"]
|
46
|
+
end
|
40
47
|
end
|
41
48
|
end
|
42
49
|
end
|
@@ -7,6 +7,7 @@ module Erb
|
|
7
7
|
class ComponentGenerator < Base
|
8
8
|
source_root File.expand_path("templates", __dir__)
|
9
9
|
class_option :sidecar, type: :boolean, default: false
|
10
|
+
class_option :inline, type: :boolean, default: false
|
10
11
|
|
11
12
|
def copy_view_file
|
12
13
|
template "component.html.erb", destination
|
@@ -15,10 +16,12 @@ module Erb
|
|
15
16
|
private
|
16
17
|
|
17
18
|
def destination
|
18
|
-
if options["
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
if !options["inline"]
|
20
|
+
if options["sidecar"]
|
21
|
+
File.join("app/components", class_path, "#{file_name}_component", "#{file_name}_component.html.erb")
|
22
|
+
else
|
23
|
+
File.join("app/components", class_path, "#{file_name}_component.html.erb")
|
24
|
+
end
|
22
25
|
end
|
23
26
|
end
|
24
27
|
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Preview
|
4
|
+
module Generators
|
5
|
+
class ComponentGenerator < ::Rails::Generators::NamedBase
|
6
|
+
source_root File.expand_path("templates", __dir__)
|
7
|
+
|
8
|
+
check_class_collision suffix: "ComponentPreview"
|
9
|
+
|
10
|
+
def create_preview_file
|
11
|
+
template "component_preview.rb", File.join("test/components/previews", class_path, "#{file_name}_component_preview.rb")
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def file_name
|
17
|
+
@_file_name ||= super.sub(/_component\z/i, "")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/view_component/base.rb
CHANGED
@@ -15,6 +15,8 @@ module ViewComponent
|
|
15
15
|
|
16
16
|
ViewContextCalledBeforeRenderError = Class.new(StandardError)
|
17
17
|
|
18
|
+
RESERVED_PARAMETER = :content
|
19
|
+
|
18
20
|
# For CSRF authenticity tokens in forms
|
19
21
|
delegate :form_authenticity_token, :protect_against_forgery?, :config, to: :helpers
|
20
22
|
|
@@ -264,7 +266,7 @@ module ViewComponent
|
|
264
266
|
parameter = validate_default ? collection_parameter : provided_collection_parameter
|
265
267
|
|
266
268
|
return unless parameter
|
267
|
-
return if
|
269
|
+
return if initialize_parameter_names.include?(parameter)
|
268
270
|
|
269
271
|
# If Ruby cannot parse the component class, then the initalize
|
270
272
|
# parameters will be empty and ViewComponent will not be able to render
|
@@ -281,8 +283,25 @@ module ViewComponent
|
|
281
283
|
)
|
282
284
|
end
|
283
285
|
|
286
|
+
# Ensure the component initializer does not define
|
287
|
+
# invalid parameters that could override the framework's
|
288
|
+
# methods.
|
289
|
+
def validate_initialization_parameters!
|
290
|
+
return unless initialize_parameter_names.include?(RESERVED_PARAMETER)
|
291
|
+
|
292
|
+
raise ArgumentError.new(
|
293
|
+
"#{self} initializer cannot contain " \
|
294
|
+
"`#{RESERVED_PARAMETER}` since it will override a " \
|
295
|
+
"public ViewComponent method."
|
296
|
+
)
|
297
|
+
end
|
298
|
+
|
284
299
|
private
|
285
300
|
|
301
|
+
def initialize_parameter_names
|
302
|
+
initialize_parameters.map(&:last)
|
303
|
+
end
|
304
|
+
|
286
305
|
def initialize_parameters
|
287
306
|
instance_method(:initialize).parameters
|
288
307
|
end
|
@@ -46,7 +46,10 @@ module ViewComponent
|
|
46
46
|
instance_method(:initialize).parameters.map(&:second).include?(collection_counter_parameter)
|
47
47
|
end
|
48
48
|
|
49
|
-
|
49
|
+
if raise_errors
|
50
|
+
component_class.validate_initialization_parameters!
|
51
|
+
component_class.validate_collection_parameter!
|
52
|
+
end
|
50
53
|
|
51
54
|
templates.each do |template|
|
52
55
|
# Remove existing compiled template methods,
|
@@ -163,9 +166,8 @@ module ViewComponent
|
|
163
166
|
# end
|
164
167
|
#
|
165
168
|
# Without this, `MyOtherComponent` will not look for `my_component/my_other_component.html.erb`
|
166
|
-
nested_component_files = if component_class.name.include?("::")
|
167
|
-
|
168
|
-
Dir["#{directory}/#{nested_component_path}/#{component_name}.*{#{extensions}}"]
|
169
|
+
nested_component_files = if component_class.name.include?("::") && component_name != filename
|
170
|
+
Dir["#{directory}/#{filename}/#{component_name}.*{#{extensions}}"]
|
169
171
|
else
|
170
172
|
[]
|
171
173
|
end
|
@@ -205,7 +207,6 @@ module ViewComponent
|
|
205
207
|
end
|
206
208
|
end
|
207
209
|
|
208
|
-
# :nocov:
|
209
210
|
def compiled_template(file_path)
|
210
211
|
handler = ActionView::Template.handler_for_extension(File.extname(file_path).gsub(".", ""))
|
211
212
|
template = File.read(file_path)
|
@@ -216,7 +217,6 @@ module ViewComponent
|
|
216
217
|
handler.call(OpenStruct.new(source: template, identifier: component_class.identifier, type: component_class.type))
|
217
218
|
end
|
218
219
|
end
|
219
|
-
# :nocov:
|
220
220
|
|
221
221
|
def call_method_name(variant)
|
222
222
|
if variant.present? && variants.include?(variant)
|
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.
|
4
|
+
version: 2.25.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GitHub Open Source
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -219,6 +219,8 @@ files:
|
|
219
219
|
- lib/rails/generators/erb/templates/component.html.erb.tt
|
220
220
|
- lib/rails/generators/haml/component_generator.rb
|
221
221
|
- lib/rails/generators/haml/templates/component.html.haml.tt
|
222
|
+
- lib/rails/generators/preview/component_generator.rb
|
223
|
+
- lib/rails/generators/preview/templates/component_preview.rb.tt
|
222
224
|
- lib/rails/generators/rspec/component_generator.rb
|
223
225
|
- lib/rails/generators/rspec/templates/component_spec.rb.tt
|
224
226
|
- lib/rails/generators/slim/component_generator.rb
|
@@ -268,7 +270,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
268
270
|
- !ruby/object:Gem::Version
|
269
271
|
version: '0'
|
270
272
|
requirements: []
|
271
|
-
rubygems_version: 3.
|
273
|
+
rubygems_version: 3.0.3
|
272
274
|
signing_key:
|
273
275
|
specification_version: 4
|
274
276
|
summary: View components for Rails
|