view_component 2.63.0 → 2.64.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/docs/CHANGELOG.md +24 -0
- data/lib/view_component/compiler.rb +11 -5
- data/lib/view_component/polymorphic_slots.rb +6 -4
- data/lib/view_component/slotable_v2.rb +32 -4
- data/lib/view_component/version.rb +1 -1
- metadata +30 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1cee1c1b53cec5fec9d4613416a27999c653c2cf8fb176798b235c7b71dc795d
|
4
|
+
data.tar.gz: 5fb8a364788849fecfb8bb2160ebd6dc403f624ba6b3fe13c818706f928b8257
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d721f8d07af64e314a506afc364941f95d3b824d27e587e12d8c774f4fa168b7ae00ac400c4f73b546ed0d5728aec60d586e52dacaee2b8f10e01230bbe3ab8f
|
7
|
+
data.tar.gz: 598ab2f08524a8eb10b17a001ed7429223ca39ab204c25cec4375ea201e3afa1c852ba1578f81a1de5c83211e1eb05f3c1a7d146f83cc1d77e3f4ed0bfdef962
|
data/docs/CHANGELOG.md
CHANGED
@@ -9,6 +9,30 @@ title: Changelog
|
|
9
9
|
|
10
10
|
## main
|
11
11
|
|
12
|
+
## 2.64.0
|
13
|
+
|
14
|
+
* Add `warn_on_deprecated_slot_setter` flag to opt-in to deprecation warning.
|
15
|
+
|
16
|
+
In [v2.54.0](https://viewcomponent.org/CHANGELOG.html#2540), the Slots API was updated to require the `with_*` prefix for setting Slots. The non-`with_*` setters will be deprecated in a coming version and removed in `v3.0`.
|
17
|
+
|
18
|
+
To enable the coming deprecation warning, add `warn_on_deprecated_slot_setter`:
|
19
|
+
|
20
|
+
```ruby
|
21
|
+
class DeprecatedSlotsSetterComponent < ViewComponent::Base
|
22
|
+
warn_on_deprecated_slot_setter
|
23
|
+
end
|
24
|
+
```
|
25
|
+
|
26
|
+
*Joel Hawksley*
|
27
|
+
|
28
|
+
* Add [`m`](https://rubygems.org/gems/m) to development environment.
|
29
|
+
|
30
|
+
*Joel Hawksley*
|
31
|
+
|
32
|
+
* Fix potential deadlock scenario in the compiler's development mode.
|
33
|
+
|
34
|
+
*Blake Williams*
|
35
|
+
|
12
36
|
## 2.63.0
|
13
37
|
|
14
38
|
* Fixed typo in `renders_many` documentation.
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "concurrent-ruby"
|
4
|
+
|
3
5
|
module ViewComponent
|
4
6
|
class Compiler
|
5
7
|
# Lock required to be obtained before compiling the component
|
@@ -16,7 +18,7 @@ module ViewComponent
|
|
16
18
|
|
17
19
|
def initialize(component_class)
|
18
20
|
@component_class = component_class
|
19
|
-
@__vc_compiler_lock =
|
21
|
+
@__vc_compiler_lock = Concurrent::ReadWriteLock.new
|
20
22
|
end
|
21
23
|
|
22
24
|
def compiled?
|
@@ -33,7 +35,7 @@ module ViewComponent
|
|
33
35
|
|
34
36
|
component_class.superclass.compile(raise_errors: raise_errors) if should_compile_superclass?
|
35
37
|
|
36
|
-
|
38
|
+
with_write_lock do
|
37
39
|
CompileCache.invalidate_class!(component_class)
|
38
40
|
|
39
41
|
subclass_instance_methods = component_class.instance_methods(false)
|
@@ -90,14 +92,18 @@ module ViewComponent
|
|
90
92
|
end
|
91
93
|
end
|
92
94
|
|
93
|
-
def
|
95
|
+
def with_write_lock(&block)
|
94
96
|
if development?
|
95
|
-
__vc_compiler_lock.
|
97
|
+
__vc_compiler_lock.with_write_lock(&block)
|
96
98
|
else
|
97
99
|
block.call
|
98
100
|
end
|
99
101
|
end
|
100
102
|
|
103
|
+
def with_read_lock(&block)
|
104
|
+
__vc_compiler_lock.with_read_lock(&block)
|
105
|
+
end
|
106
|
+
|
101
107
|
private
|
102
108
|
|
103
109
|
attr_reader :component_class
|
@@ -123,7 +129,7 @@ module ViewComponent
|
|
123
129
|
if development?
|
124
130
|
component_class.class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
125
131
|
def render_template_for(variant = nil)
|
126
|
-
self.class.compiler.
|
132
|
+
self.class.compiler.with_read_lock do
|
127
133
|
#{body}
|
128
134
|
end
|
129
135
|
end
|
@@ -61,10 +61,12 @@ module ViewComponent
|
|
61
61
|
end
|
62
62
|
|
63
63
|
define_method(setter_name) do |*args, &block|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
64
|
+
if _warn_on_deprecated_slot_setter
|
65
|
+
ViewComponent::Deprecation.warn(
|
66
|
+
"polymorphic slot setters like `#{setter_name}` are deprecated and will be removed in " \
|
67
|
+
"ViewComponent v3.0.0.\n\nUse `with_#{setter_name}` instead."
|
68
|
+
)
|
69
|
+
end
|
68
70
|
|
69
71
|
set_polymorphic_slot(slot_name, poly_type, *args, &block)
|
70
72
|
end
|
@@ -17,9 +17,19 @@ module ViewComponent
|
|
17
17
|
# Hash of registered Slots
|
18
18
|
class_attribute :registered_slots
|
19
19
|
self.registered_slots = {}
|
20
|
+
|
21
|
+
class_attribute :_warn_on_deprecated_slot_setter
|
22
|
+
self._warn_on_deprecated_slot_setter = false
|
20
23
|
end
|
21
24
|
|
22
25
|
class_methods do
|
26
|
+
##
|
27
|
+
# Enables deprecations coming to the Slots API in ViewComponent v3
|
28
|
+
#
|
29
|
+
def warn_on_deprecated_slot_setter
|
30
|
+
self._warn_on_deprecated_slot_setter = true
|
31
|
+
end
|
32
|
+
|
23
33
|
##
|
24
34
|
# Registers a sub-component
|
25
35
|
#
|
@@ -80,7 +90,13 @@ module ViewComponent
|
|
80
90
|
if args.empty? && block.nil?
|
81
91
|
get_slot(slot_name)
|
82
92
|
else
|
83
|
-
|
93
|
+
if _warn_on_deprecated_slot_setter
|
94
|
+
ViewComponent::Deprecation.warn(
|
95
|
+
"Setting a slot with `##{slot_name}` is deprecated and will be removed in ViewComponent v3.0.0. " \
|
96
|
+
"Use `#with_#{slot_name}` to set the slot instead."
|
97
|
+
)
|
98
|
+
end
|
99
|
+
|
84
100
|
set_slot(slot_name, nil, *args, &block)
|
85
101
|
end
|
86
102
|
end
|
@@ -138,9 +154,15 @@ module ViewComponent
|
|
138
154
|
# Define setter for singular names
|
139
155
|
# for example `renders_many :items` allows fetching all tabs with
|
140
156
|
# `component.tabs` and setting a tab with `component.tab`
|
141
|
-
|
142
|
-
# Deprecated: Will remove in 3.0
|
157
|
+
|
143
158
|
define_method singular_name do |*args, &block|
|
159
|
+
if _warn_on_deprecated_slot_setter
|
160
|
+
ViewComponent::Deprecation.warn(
|
161
|
+
"Setting a slot with `##{singular_name}` is deprecated and will be removed in ViewComponent v3.0.0. " \
|
162
|
+
"Use `#with_#{singular_name}` to set the slot instead."
|
163
|
+
)
|
164
|
+
end
|
165
|
+
|
144
166
|
set_slot(slot_name, nil, *args, &block)
|
145
167
|
end
|
146
168
|
ruby2_keywords(singular_name.to_sym) if respond_to?(:ruby2_keywords, true)
|
@@ -162,7 +184,13 @@ module ViewComponent
|
|
162
184
|
if collection_args.nil? && block.nil?
|
163
185
|
get_slot(slot_name)
|
164
186
|
else
|
165
|
-
|
187
|
+
if _warn_on_deprecated_slot_setter
|
188
|
+
ViewComponent::Deprecation.warn(
|
189
|
+
"Setting a slot with `##{slot_name}` is deprecated and will be removed in ViewComponent v3.0.0. " \
|
190
|
+
"Use `#with_#{slot_name}` to set the slot instead."
|
191
|
+
)
|
192
|
+
end
|
193
|
+
|
166
194
|
collection_args.map do |args|
|
167
195
|
set_slot(slot_name, nil, **args, &block)
|
168
196
|
end
|
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.64.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: 2022-08-
|
11
|
+
date: 2022-08-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -44,6 +44,20 @@ dependencies:
|
|
44
44
|
- - "~>"
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: '1.0'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: concurrent-ruby
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '1.0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '1.0'
|
47
61
|
- !ruby/object:Gem::Dependency
|
48
62
|
name: appraisal
|
49
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -142,6 +156,20 @@ dependencies:
|
|
142
156
|
- - "~>"
|
143
157
|
- !ruby/object:Gem::Version
|
144
158
|
version: '2'
|
159
|
+
- !ruby/object:Gem::Dependency
|
160
|
+
name: m
|
161
|
+
requirement: !ruby/object:Gem::Requirement
|
162
|
+
requirements:
|
163
|
+
- - "~>"
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '1'
|
166
|
+
type: :development
|
167
|
+
prerelease: false
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
requirements:
|
170
|
+
- - "~>"
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: '1'
|
145
173
|
- !ruby/object:Gem::Dependency
|
146
174
|
name: minitest
|
147
175
|
requirement: !ruby/object:Gem::Requirement
|