actionview 7.2.1 → 8.0.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -99
- data/lib/action_view/dependency_tracker/erb_tracker.rb +35 -27
- data/lib/action_view/dependency_tracker/ruby_tracker.rb +2 -19
- data/lib/action_view/dependency_tracker/wildcard_resolver.rb +32 -0
- data/lib/action_view/dependency_tracker.rb +1 -0
- data/lib/action_view/gem_version.rb +4 -4
- data/lib/action_view/helpers/cache_helper.rb +8 -0
- data/lib/action_view/helpers/form_helper.rb +59 -60
- data/lib/action_view/helpers/form_options_helper.rb +16 -14
- data/lib/action_view/helpers/form_tag_helper.rb +18 -16
- data/lib/action_view/helpers/rendering_helper.rb +160 -50
- data/lib/action_view/helpers/tag_helper.rb +41 -38
- data/lib/action_view/helpers/tags/collection_check_boxes.rb +4 -3
- data/lib/action_view/helpers/url_helper.rb +3 -3
- data/lib/action_view/layouts.rb +1 -1
- data/lib/action_view/render_parser/prism_render_parser.rb +13 -1
- data/lib/action_view/render_parser/ripper_render_parser.rb +10 -1
- data/lib/action_view/renderer/streaming_template_renderer.rb +0 -1
- data/lib/action_view/rendering.rb +2 -3
- data/lib/action_view/template/resolver.rb +0 -1
- data/lib/action_view/template.rb +0 -1
- metadata +17 -16
@@ -1,32 +1,140 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# :markup: markdown
|
4
|
+
|
3
5
|
module ActionView
|
4
6
|
module Helpers # :nodoc:
|
5
|
-
#
|
7
|
+
# # Action View Rendering Helpers
|
6
8
|
#
|
7
|
-
# Implements methods that allow rendering from a view context.
|
8
|
-
#
|
9
|
-
#
|
9
|
+
# Implements methods that allow rendering from a view context. In order to use
|
10
|
+
# this module, all you need is to implement view_renderer that returns an
|
11
|
+
# ActionView::Renderer object.
|
10
12
|
module RenderingHelper
|
11
|
-
#
|
13
|
+
# Renders a template and returns the result.
|
14
|
+
#
|
15
|
+
# Pass the template to render as the first argument. This is shorthand
|
16
|
+
# syntax for partial rendering, so the template filename should be
|
17
|
+
# prefixed with an underscore. The partial renderer looks for the partial
|
18
|
+
# template in the directory of the calling template first.
|
19
|
+
#
|
20
|
+
# <% # app/views/posts/new.html.erb %>
|
21
|
+
# <%= render "form" %>
|
22
|
+
# # => renders app/views/posts/_form.html.erb
|
23
|
+
#
|
24
|
+
# Use the complete view path to render a partial from another directory.
|
25
|
+
#
|
26
|
+
# <% # app/views/posts/show.html.erb %>
|
27
|
+
# <%= render "comments/form" %>
|
28
|
+
# # => renders app/views/comments/_form.html.erb
|
29
|
+
#
|
30
|
+
# Without the rendering mode, the second argument can be a Hash of local
|
31
|
+
# variable assignments for the template.
|
32
|
+
#
|
33
|
+
# <% # app/views/posts/new.html.erb %>
|
34
|
+
# <%= render "form", post: Post.new %>
|
35
|
+
# # => renders app/views/posts/_form.html.erb
|
36
|
+
#
|
37
|
+
# If the first argument responds to `render_in`, the template will be rendered
|
38
|
+
# by calling `render_in` with the current view context.
|
39
|
+
#
|
40
|
+
# class Greeting
|
41
|
+
# def render_in(view_context)
|
42
|
+
# view_context.render html: "<h1>Hello, World</h1>"
|
43
|
+
# end
|
44
|
+
#
|
45
|
+
# def format
|
46
|
+
# :html
|
47
|
+
# end
|
48
|
+
# end
|
49
|
+
#
|
50
|
+
# <%= render Greeting.new %>
|
51
|
+
# # => "<h1>Hello, World</h1>"
|
52
|
+
#
|
53
|
+
# #### Rendering Mode
|
54
|
+
#
|
55
|
+
# Pass the rendering mode as first argument to override it.
|
56
|
+
#
|
57
|
+
# `:partial`
|
58
|
+
# : See ActionView::PartialRenderer for details.
|
59
|
+
#
|
60
|
+
# <%= render partial: "form", locals: { post: Post.new } %>
|
61
|
+
# # => renders app/views/posts/_form.html.erb
|
62
|
+
#
|
63
|
+
# `:file`
|
64
|
+
# : Renders the contents of a file. This option should **not** be used with
|
65
|
+
# unsanitized user input.
|
66
|
+
#
|
67
|
+
# <%= render file: "/path/to/some/file" %>
|
68
|
+
# # => renders /path/to/some/file
|
69
|
+
#
|
70
|
+
# `:inline`
|
71
|
+
# : Renders an ERB template string.
|
72
|
+
#
|
73
|
+
# <% name = "World" %>
|
74
|
+
# <%= render inline: "<h1>Hello, <%= name %>!</h1>" %>
|
75
|
+
# # => renders "<h1>Hello, World!</h1>"
|
76
|
+
#
|
77
|
+
# `:body`
|
78
|
+
# : Renders the provided text, and sets the format as `:text`.
|
79
|
+
#
|
80
|
+
# <%= render body: "Hello, World!" %>
|
81
|
+
# # => renders "Hello, World!"
|
82
|
+
#
|
83
|
+
# `:plain`
|
84
|
+
# : Renders the provided text, and sets the format as `:text`.
|
85
|
+
#
|
86
|
+
# <%= render plain: "Hello, World!" %>
|
87
|
+
# # => renders "Hello, World!"
|
88
|
+
#
|
89
|
+
# `:html`
|
90
|
+
# : Renders the provided HTML string, and sets the format as
|
91
|
+
# `:html`. If the string is not `html_safe?`, performs HTML escaping on
|
92
|
+
# the string before rendering.
|
93
|
+
#
|
94
|
+
# <%= render html: "<h1>Hello, World!</h1>".html_safe %>
|
95
|
+
# # => renders "<h1>Hello, World!</h1>"
|
96
|
+
#
|
97
|
+
# <%= render html: "<h1>Hello, World!</h1>" %>
|
98
|
+
# # => renders "<h1>Hello, World!</h1>"
|
99
|
+
#
|
100
|
+
# `:renderable`
|
101
|
+
# : Renders the provided object by calling `render_in` with the current view
|
102
|
+
# context. The format is determined by calling `format` on the
|
103
|
+
# renderable if it responds to `format`, falling back to `:html` by
|
104
|
+
# default.
|
105
|
+
#
|
106
|
+
# <%= render renderable: Greeting.new %>
|
107
|
+
# # => renders "<h1>Hello, World</h1>"
|
108
|
+
#
|
109
|
+
#
|
110
|
+
# #### Options
|
111
|
+
#
|
112
|
+
# `:locals`
|
113
|
+
# : Hash of local variable assignments for the template.
|
114
|
+
#
|
115
|
+
# <%= render inline: "<h1>Hello, <%= name %>!</h1>", locals: { name: "World" } %>
|
116
|
+
# # => renders "<h1>Hello, World!</h1>"
|
117
|
+
#
|
118
|
+
# `:formats`
|
119
|
+
# : Override the current format to render a template for a different format.
|
120
|
+
#
|
121
|
+
# <% # app/views/posts/show.html.erb %>
|
122
|
+
# <%= render template: "posts/content", formats: [:text] %>
|
123
|
+
# # => renders app/views/posts/content.text.erb
|
12
124
|
#
|
13
|
-
#
|
14
|
-
#
|
15
|
-
# * <tt>:inline</tt> - Renders an inline template similar to how it's done in the controller.
|
16
|
-
# * <tt>:plain</tt> - Renders the text passed in out. Setting the content
|
17
|
-
# type as <tt>text/plain</tt>.
|
18
|
-
# * <tt>:html</tt> - Renders the HTML safe string passed in out, otherwise
|
19
|
-
# performs HTML escape on the string first. Setting the content type as
|
20
|
-
# <tt>text/html</tt>.
|
21
|
-
# * <tt>:body</tt> - Renders the text passed in, and inherits the content
|
22
|
-
# type of <tt>text/plain</tt> from ActionDispatch::Response object.
|
125
|
+
# `:variants`
|
126
|
+
# : Render a template for a different variant.
|
23
127
|
#
|
24
|
-
#
|
128
|
+
# <% # app/views/posts/show.html.erb %>
|
129
|
+
# <%= render template: "posts/content", variants: [:tablet] %>
|
130
|
+
# # => renders app/views/posts/content.html+tablet.erb
|
25
131
|
#
|
26
|
-
#
|
27
|
-
#
|
132
|
+
# `:handlers`
|
133
|
+
# : Render a template for a different handler.
|
28
134
|
#
|
29
|
-
#
|
135
|
+
# <% # app/views/posts/show.html.erb %>
|
136
|
+
# <%= render template: "posts/content", handlers: [:builder] %>
|
137
|
+
# # => renders app/views/posts/content.html.builder
|
30
138
|
def render(options = {}, locals = {}, &block)
|
31
139
|
case options
|
32
140
|
when Hash
|
@@ -47,52 +155,54 @@ module ActionView
|
|
47
155
|
end
|
48
156
|
|
49
157
|
# Overrides _layout_for in the context object so it supports the case a block is
|
50
|
-
# passed to a partial. Returns the contents that are yielded to a layout, given
|
51
|
-
# name or a block.
|
158
|
+
# passed to a partial. Returns the contents that are yielded to a layout, given
|
159
|
+
# a name or a block.
|
52
160
|
#
|
53
|
-
# You can think of a layout as a method that is called with a block. If the user
|
54
|
-
#
|
55
|
-
# If the user calls simply
|
161
|
+
# You can think of a layout as a method that is called with a block. If the user
|
162
|
+
# calls `yield :some_name`, the block, by default, returns
|
163
|
+
# `content_for(:some_name)`. If the user calls simply `yield`, the default block
|
164
|
+
# returns `content_for(:layout)`.
|
56
165
|
#
|
57
166
|
# The user can override this default by passing a block to the layout:
|
58
167
|
#
|
59
|
-
#
|
60
|
-
#
|
61
|
-
#
|
62
|
-
#
|
168
|
+
# # The template
|
169
|
+
# <%= render layout: "my_layout" do %>
|
170
|
+
# Content
|
171
|
+
# <% end %>
|
63
172
|
#
|
64
|
-
#
|
65
|
-
#
|
66
|
-
#
|
67
|
-
#
|
173
|
+
# # The layout
|
174
|
+
# <html>
|
175
|
+
# <%= yield %>
|
176
|
+
# </html>
|
68
177
|
#
|
69
|
-
# In this case, instead of the default block, which would return
|
70
|
-
# this method returns the block that was passed in to
|
178
|
+
# In this case, instead of the default block, which would return `content_for(:layout)`,
|
179
|
+
# this method returns the block that was passed in to `render :layout`, and the response
|
71
180
|
# would be
|
72
181
|
#
|
73
|
-
#
|
74
|
-
#
|
75
|
-
#
|
182
|
+
# <html>
|
183
|
+
# Content
|
184
|
+
# </html>
|
76
185
|
#
|
77
|
-
# Finally, the block can take block arguments, which can be passed in by
|
186
|
+
# Finally, the block can take block arguments, which can be passed in by
|
187
|
+
# `yield`:
|
78
188
|
#
|
79
|
-
#
|
80
|
-
#
|
81
|
-
#
|
82
|
-
#
|
189
|
+
# # The template
|
190
|
+
# <%= render layout: "my_layout" do |customer| %>
|
191
|
+
# Hello <%= customer.name %>
|
192
|
+
# <% end %>
|
83
193
|
#
|
84
|
-
#
|
85
|
-
#
|
86
|
-
#
|
87
|
-
#
|
194
|
+
# # The layout
|
195
|
+
# <html>
|
196
|
+
# <%= yield Struct.new(:name).new("David") %>
|
197
|
+
# </html>
|
88
198
|
#
|
89
|
-
# In this case, the layout would receive the block passed into
|
199
|
+
# In this case, the layout would receive the block passed into `render :layout`,
|
90
200
|
# and the struct specified would be passed into the block as an argument. The result
|
91
201
|
# would be
|
92
202
|
#
|
93
|
-
#
|
94
|
-
#
|
95
|
-
#
|
203
|
+
# <html>
|
204
|
+
# Hello David
|
205
|
+
# </html>
|
96
206
|
#
|
97
207
|
def _layout_for(*args, &block)
|
98
208
|
name = args.first
|
@@ -48,48 +48,51 @@ module ActionView
|
|
48
48
|
include CaptureHelper
|
49
49
|
include OutputSafetyHelper
|
50
50
|
|
51
|
-
def
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
51
|
+
def deprecated_void_content(name)
|
52
|
+
ActionView.deprecator.warn <<~TEXT
|
53
|
+
Putting content inside a void element (#{name}) is invalid
|
54
|
+
according to the HTML5 spec, and so it is being deprecated
|
55
|
+
without replacement. In Rails 8.0, passing content as a
|
56
|
+
positional argument will raise, and using a block will have
|
57
|
+
no effect.
|
58
|
+
TEXT
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.define_element(name, code_generator:, method_name: name)
|
62
|
+
return if method_defined?(name)
|
63
|
+
|
64
|
+
code_generator.class_eval do |batch|
|
65
|
+
batch << "\n" <<
|
66
|
+
"def #{method_name}(content = nil, escape: true, **options, &block)" <<
|
67
|
+
" tag_string(#{name.inspect}, content, options, escape: escape, &block)" <<
|
68
|
+
"end"
|
58
69
|
end
|
59
70
|
end
|
60
71
|
|
61
|
-
def self.define_void_element(name, code_generator:, method_name: name
|
62
|
-
code_generator.
|
63
|
-
batch
|
64
|
-
def #{method_name}(content = nil, escape: true, **options, &block)
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
TEXT
|
73
|
-
tag_string("#{name}", content, options, escape: escape, &block)
|
74
|
-
else
|
75
|
-
self_closing_tag_string("#{name}", options, escape, ">")
|
76
|
-
end
|
77
|
-
end
|
78
|
-
RUBY
|
72
|
+
def self.define_void_element(name, code_generator:, method_name: name)
|
73
|
+
code_generator.class_eval do |batch|
|
74
|
+
batch << "\n" <<
|
75
|
+
"def #{method_name}(content = nil, escape: true, **options, &block)" <<
|
76
|
+
" if content || block" <<
|
77
|
+
" deprecated_void_content(#{name.inspect})" <<
|
78
|
+
" tag_string(#{name.inspect}, content, options, escape: escape, &block)" <<
|
79
|
+
" else" <<
|
80
|
+
" self_closing_tag_string(#{name.inspect}, options, escape, '>')" <<
|
81
|
+
" end" <<
|
82
|
+
"end"
|
79
83
|
end
|
80
84
|
end
|
81
85
|
|
82
|
-
def self.define_self_closing_element(name, code_generator:, method_name: name
|
83
|
-
code_generator.
|
84
|
-
batch
|
85
|
-
def #{method_name}(content = nil, escape: true, **options, &block)
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
end
|
92
|
-
RUBY
|
86
|
+
def self.define_self_closing_element(name, code_generator:, method_name: name)
|
87
|
+
code_generator.class_eval do |batch|
|
88
|
+
batch << "\n" <<
|
89
|
+
"def #{method_name}(content = nil, escape: true, **options, &block)" <<
|
90
|
+
" if content || block" <<
|
91
|
+
" tag_string(#{name.inspect}, content, options, escape: escape, &block)" <<
|
92
|
+
" else" <<
|
93
|
+
" self_closing_tag_string(#{name.inspect}, options, escape)" <<
|
94
|
+
" end" <<
|
95
|
+
"end"
|
93
96
|
end
|
94
97
|
end
|
95
98
|
|
@@ -110,8 +113,8 @@ module ActionView
|
|
110
113
|
define_void_element :wbr, code_generator: code_generator
|
111
114
|
|
112
115
|
define_self_closing_element :animate, code_generator: code_generator
|
113
|
-
define_self_closing_element :animateMotion, code_generator: code_generator
|
114
|
-
define_self_closing_element :animateTransform, code_generator: code_generator
|
116
|
+
define_self_closing_element :animateMotion, code_generator: code_generator, method_name: :animate_motion
|
117
|
+
define_self_closing_element :animateTransform, code_generator: code_generator, method_name: :animate_transform
|
115
118
|
define_self_closing_element :circle, code_generator: code_generator
|
116
119
|
define_self_closing_element :ellipse, code_generator: code_generator
|
117
120
|
define_self_closing_element :line, code_generator: code_generator
|
@@ -10,12 +10,13 @@ module ActionView
|
|
10
10
|
include FormOptionsHelper
|
11
11
|
|
12
12
|
class CheckBoxBuilder < Builder # :nodoc:
|
13
|
-
def
|
13
|
+
def checkbox(extra_html_options = {})
|
14
14
|
html_options = extra_html_options.merge(@input_html_options)
|
15
15
|
html_options[:multiple] = true
|
16
16
|
html_options[:skip_default_ids] = false
|
17
|
-
@template_object.
|
17
|
+
@template_object.checkbox(@object_name, @method_name, html_options, @value, nil)
|
18
18
|
end
|
19
|
+
alias_method :check_box, :checkbox
|
19
20
|
end
|
20
21
|
|
21
22
|
def render(&block)
|
@@ -24,7 +25,7 @@ module ActionView
|
|
24
25
|
|
25
26
|
private
|
26
27
|
def render_component(builder)
|
27
|
-
builder.
|
28
|
+
builder.checkbox + builder.label
|
28
29
|
end
|
29
30
|
|
30
31
|
def hidden_field_name
|
@@ -556,14 +556,14 @@ module ActionView
|
|
556
556
|
|
557
557
|
options ||= options_as_kwargs
|
558
558
|
check_parameters ||= options.is_a?(Hash) && options.delete(:check_parameters)
|
559
|
-
url_string = URI::
|
559
|
+
url_string = URI::RFC2396_PARSER.unescape(url_for(options)).force_encoding(Encoding::BINARY)
|
560
560
|
|
561
561
|
# We ignore any extra parameters in the request_uri if the
|
562
562
|
# submitted URL doesn't have any either. This lets the function
|
563
563
|
# work with things like ?order=asc
|
564
564
|
# the behavior can be disabled with check_parameters: true
|
565
565
|
request_uri = url_string.index("?") || check_parameters ? request.fullpath : request.path
|
566
|
-
request_uri = URI::
|
566
|
+
request_uri = URI::RFC2396_PARSER.unescape(request_uri).force_encoding(Encoding::BINARY)
|
567
567
|
|
568
568
|
if %r{^\w+://}.match?(url_string)
|
569
569
|
request_uri = +"#{request.protocol}#{request.host_with_port}#{request_uri}"
|
@@ -710,7 +710,7 @@ module ActionView
|
|
710
710
|
end
|
711
711
|
|
712
712
|
def add_method_to_attributes!(html_options, method)
|
713
|
-
if method_not_get_method?(method) && !html_options["rel"]
|
713
|
+
if method_not_get_method?(method) && !html_options["rel"].to_s.include?("nofollow")
|
714
714
|
if html_options["rel"].blank?
|
715
715
|
html_options["rel"] = "nofollow"
|
716
716
|
else
|
data/lib/action_view/layouts.rb
CHANGED
@@ -97,9 +97,21 @@ module ActionView
|
|
97
97
|
def render_call_template(node)
|
98
98
|
object_template = false
|
99
99
|
template =
|
100
|
-
|
100
|
+
case node.type
|
101
|
+
when :string_node
|
101
102
|
path = node.unescaped
|
102
103
|
path.include?("/") ? path : "#{directory}/#{path}"
|
104
|
+
when :interpolated_string_node
|
105
|
+
node.parts.map do |node|
|
106
|
+
case node.type
|
107
|
+
when :string_node
|
108
|
+
node.unescaped
|
109
|
+
when :embedded_statements_node
|
110
|
+
"*"
|
111
|
+
else
|
112
|
+
return
|
113
|
+
end
|
114
|
+
end.join("")
|
103
115
|
else
|
104
116
|
dependency =
|
105
117
|
case node.type
|
@@ -66,7 +66,16 @@ module ActionView
|
|
66
66
|
|
67
67
|
def to_string
|
68
68
|
raise unless string?
|
69
|
-
|
69
|
+
|
70
|
+
# s(:string_literal, s(:string_content, map))
|
71
|
+
self[0].map do |node|
|
72
|
+
case node.type
|
73
|
+
when :@tstring_content
|
74
|
+
node[0]
|
75
|
+
when :string_embexpr
|
76
|
+
"*"
|
77
|
+
end
|
78
|
+
end.join("")
|
70
79
|
end
|
71
80
|
|
72
81
|
def hash?
|
@@ -118,6 +118,7 @@ module ActionView
|
|
118
118
|
|
119
119
|
def render_to_body(options = {})
|
120
120
|
_process_options(options)
|
121
|
+
_process_render_template_options(options)
|
121
122
|
_render_template(options)
|
122
123
|
end
|
123
124
|
|
@@ -173,8 +174,7 @@ module ActionView
|
|
173
174
|
end
|
174
175
|
|
175
176
|
# Normalize options.
|
176
|
-
def
|
177
|
-
options = super(options)
|
177
|
+
def _process_render_template_options(options)
|
178
178
|
if options[:partial] == true
|
179
179
|
options[:partial] = action_name
|
180
180
|
end
|
@@ -184,7 +184,6 @@ module ActionView
|
|
184
184
|
end
|
185
185
|
|
186
186
|
options[:template] ||= (options[:action] || action_name).to_s
|
187
|
-
options
|
188
187
|
end
|
189
188
|
end
|
190
189
|
end
|
data/lib/action_view/template.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: actionview
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 8.0.0.beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Heinemeier Hansson
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-09-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 8.0.0.beta1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 8.0.0.beta1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: builder
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,28 +86,28 @@ dependencies:
|
|
86
86
|
requirements:
|
87
87
|
- - '='
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
89
|
+
version: 8.0.0.beta1
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - '='
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
96
|
+
version: 8.0.0.beta1
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: activemodel
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - '='
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
103
|
+
version: 8.0.0.beta1
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - '='
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
110
|
+
version: 8.0.0.beta1
|
111
111
|
description: Simple, battle-tested conventions and helpers for building web pages.
|
112
112
|
email: david@loudthinking.com
|
113
113
|
executables: []
|
@@ -127,6 +127,7 @@ files:
|
|
127
127
|
- lib/action_view/dependency_tracker.rb
|
128
128
|
- lib/action_view/dependency_tracker/erb_tracker.rb
|
129
129
|
- lib/action_view/dependency_tracker/ruby_tracker.rb
|
130
|
+
- lib/action_view/dependency_tracker/wildcard_resolver.rb
|
130
131
|
- lib/action_view/deprecator.rb
|
131
132
|
- lib/action_view/digestor.rb
|
132
133
|
- lib/action_view/flows.rb
|
@@ -246,12 +247,12 @@ licenses:
|
|
246
247
|
- MIT
|
247
248
|
metadata:
|
248
249
|
bug_tracker_uri: https://github.com/rails/rails/issues
|
249
|
-
changelog_uri: https://github.com/rails/rails/blob/
|
250
|
-
documentation_uri: https://api.rubyonrails.org/
|
250
|
+
changelog_uri: https://github.com/rails/rails/blob/v8.0.0.beta1/actionview/CHANGELOG.md
|
251
|
+
documentation_uri: https://api.rubyonrails.org/v8.0.0.beta1/
|
251
252
|
mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
|
252
|
-
source_code_uri: https://github.com/rails/rails/tree/
|
253
|
+
source_code_uri: https://github.com/rails/rails/tree/v8.0.0.beta1/actionview
|
253
254
|
rubygems_mfa_required: 'true'
|
254
|
-
post_install_message:
|
255
|
+
post_install_message:
|
255
256
|
rdoc_options: []
|
256
257
|
require_paths:
|
257
258
|
- lib
|
@@ -259,7 +260,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
259
260
|
requirements:
|
260
261
|
- - ">="
|
261
262
|
- !ruby/object:Gem::Version
|
262
|
-
version: 3.
|
263
|
+
version: 3.2.0
|
263
264
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
264
265
|
requirements:
|
265
266
|
- - ">="
|
@@ -267,8 +268,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
267
268
|
version: '0'
|
268
269
|
requirements:
|
269
270
|
- none
|
270
|
-
rubygems_version: 3.5.
|
271
|
-
signing_key:
|
271
|
+
rubygems_version: 3.5.16
|
272
|
+
signing_key:
|
272
273
|
specification_version: 4
|
273
274
|
summary: Rendering framework putting the V in MVC (part of Rails).
|
274
275
|
test_files: []
|