actionview 7.2.3 → 8.0.0.beta1
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/CHANGELOG.md +13 -186
- data/README.rdoc +1 -1
- data/lib/action_view/base.rb +9 -6
- 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/digestor.rb +2 -6
- data/lib/action_view/gem_version.rb +4 -4
- data/lib/action_view/helpers/asset_tag_helper.rb +4 -4
- data/lib/action_view/helpers/atom_feed_helper.rb +1 -1
- data/lib/action_view/helpers/cache_helper.rb +10 -2
- data/lib/action_view/helpers/date_helper.rb +1 -8
- data/lib/action_view/helpers/form_helper.rb +90 -91
- data/lib/action_view/helpers/form_options_helper.rb +19 -20
- data/lib/action_view/helpers/form_tag_helper.rb +18 -16
- data/lib/action_view/helpers/output_safety_helper.rb +2 -1
- 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/tags/collection_helpers.rb +1 -2
- data/lib/action_view/helpers/text_helper.rb +4 -11
- data/lib/action_view/helpers/url_helper.rb +2 -4
- data/lib/action_view/layouts.rb +7 -7
- 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/partial_renderer.rb +2 -2
- data/lib/action_view/renderer/streaming_template_renderer.rb +0 -1
- data/lib/action_view/renderer/template_renderer.rb +3 -3
- data/lib/action_view/rendering.rb +2 -3
- data/lib/action_view/template/error.rb +0 -11
- data/lib/action_view/template/handlers/erb.rb +37 -45
- data/lib/action_view/template/resolver.rb +0 -1
- data/lib/action_view/template.rb +3 -14
- data/lib/action_view/test_case.rb +1 -0
- data/lib/action_view.rb +0 -1
- metadata +17 -27
|
@@ -500,8 +500,6 @@ module ActionView
|
|
|
500
500
|
content_tag("a", name || email_address, html_options, &block)
|
|
501
501
|
end
|
|
502
502
|
|
|
503
|
-
RFC2396_PARSER = defined?(URI::RFC2396_PARSER) ? URI::RFC2396_PARSER : URI::RFC2396_Parser.new
|
|
504
|
-
|
|
505
503
|
# True if the current request URI was generated by the given +options+.
|
|
506
504
|
#
|
|
507
505
|
# ==== Examples
|
|
@@ -558,14 +556,14 @@ module ActionView
|
|
|
558
556
|
|
|
559
557
|
options ||= options_as_kwargs
|
|
560
558
|
check_parameters ||= options.is_a?(Hash) && options.delete(:check_parameters)
|
|
561
|
-
url_string = RFC2396_PARSER.unescape(url_for(options)).force_encoding(Encoding::BINARY)
|
|
559
|
+
url_string = URI::RFC2396_PARSER.unescape(url_for(options)).force_encoding(Encoding::BINARY)
|
|
562
560
|
|
|
563
561
|
# We ignore any extra parameters in the request_uri if the
|
|
564
562
|
# submitted URL doesn't have any either. This lets the function
|
|
565
563
|
# work with things like ?order=asc
|
|
566
564
|
# the behavior can be disabled with check_parameters: true
|
|
567
565
|
request_uri = url_string.index("?") || check_parameters ? request.fullpath : request.path
|
|
568
|
-
request_uri = RFC2396_PARSER.unescape(request_uri).force_encoding(Encoding::BINARY)
|
|
566
|
+
request_uri = URI::RFC2396_PARSER.unescape(request_uri).force_encoding(Encoding::BINARY)
|
|
569
567
|
|
|
570
568
|
if %r{^\w+://}.match?(url_string)
|
|
571
569
|
request_uri = +"#{request.protocol}#{request.host_with_port}#{request_uri}"
|
data/lib/action_view/layouts.rb
CHANGED
|
@@ -284,7 +284,7 @@ module ActionView
|
|
|
284
284
|
silence_redefinition_of_method(:_layout)
|
|
285
285
|
|
|
286
286
|
prefixes = /\blayouts/.match?(_implied_layout_name) ? [] : ["layouts"]
|
|
287
|
-
default_behavior = "lookup_context.find_all('#{_implied_layout_name}', #{prefixes.inspect}, false,
|
|
287
|
+
default_behavior = "lookup_context.find_all('#{_implied_layout_name}', #{prefixes.inspect}, false, [], { formats: formats }).first || super"
|
|
288
288
|
name_clause = if name
|
|
289
289
|
default_behavior
|
|
290
290
|
else
|
|
@@ -325,7 +325,7 @@ module ActionView
|
|
|
325
325
|
|
|
326
326
|
class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
|
327
327
|
# frozen_string_literal: true
|
|
328
|
-
def _layout(lookup_context, formats
|
|
328
|
+
def _layout(lookup_context, formats)
|
|
329
329
|
if _conditional_layout?
|
|
330
330
|
#{layout_definition}
|
|
331
331
|
else
|
|
@@ -347,7 +347,7 @@ module ActionView
|
|
|
347
347
|
end
|
|
348
348
|
end
|
|
349
349
|
|
|
350
|
-
def
|
|
350
|
+
def _process_render_template_options(options) # :nodoc:
|
|
351
351
|
super
|
|
352
352
|
|
|
353
353
|
if _include_layout?(options)
|
|
@@ -389,8 +389,8 @@ module ActionView
|
|
|
389
389
|
case name
|
|
390
390
|
when String then _normalize_layout(name)
|
|
391
391
|
when Proc then name
|
|
392
|
-
when true then Proc.new { |lookup_context, formats
|
|
393
|
-
when :default then Proc.new { |lookup_context, formats
|
|
392
|
+
when true then Proc.new { |lookup_context, formats| _default_layout(lookup_context, formats, true) }
|
|
393
|
+
when :default then Proc.new { |lookup_context, formats| _default_layout(lookup_context, formats, false) }
|
|
394
394
|
when false, nil then nil
|
|
395
395
|
else
|
|
396
396
|
raise ArgumentError,
|
|
@@ -412,9 +412,9 @@ module ActionView
|
|
|
412
412
|
#
|
|
413
413
|
# ==== Returns
|
|
414
414
|
# * <tt>template</tt> - The template object for the default layout (or +nil+)
|
|
415
|
-
def _default_layout(lookup_context, formats,
|
|
415
|
+
def _default_layout(lookup_context, formats, require_layout = false)
|
|
416
416
|
begin
|
|
417
|
-
value = _layout(lookup_context, formats
|
|
417
|
+
value = _layout(lookup_context, formats) if action_has_layout?
|
|
418
418
|
rescue NameError => e
|
|
419
419
|
raise e, "Could not render layout: #{e.message}"
|
|
420
420
|
end
|
|
@@ -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?
|
|
@@ -94,7 +94,7 @@ module ActionView
|
|
|
94
94
|
# # <%= render partial: "accounts/account", locals: { account: @account} %>
|
|
95
95
|
# <%= render partial: @account %>
|
|
96
96
|
#
|
|
97
|
-
# # @posts is an array of Post instances, so every post record returns 'posts/post' on
|
|
97
|
+
# # @posts is an array of Post instances, so every post record returns 'posts/post' on +to_partial_path+,
|
|
98
98
|
# # that's why we can replace:
|
|
99
99
|
# # <%= render partial: "posts/post", collection: @posts %>
|
|
100
100
|
# <%= render partial: @posts %>
|
|
@@ -114,7 +114,7 @@ module ActionView
|
|
|
114
114
|
# # <%= render partial: "accounts/account", locals: { account: @account} %>
|
|
115
115
|
# <%= render @account %>
|
|
116
116
|
#
|
|
117
|
-
# # @posts is an array of Post instances, so every post record returns 'posts/post' on
|
|
117
|
+
# # @posts is an array of Post instances, so every post record returns 'posts/post' on +to_partial_path+,
|
|
118
118
|
# # that's why we can replace:
|
|
119
119
|
# # <%= render partial: "posts/post", collection: @posts %>
|
|
120
120
|
# <%= render @posts %>
|
|
@@ -99,14 +99,14 @@ module ActionView
|
|
|
99
99
|
if layout.start_with?("/")
|
|
100
100
|
raise ArgumentError, "Rendering layouts from an absolute path is not supported."
|
|
101
101
|
else
|
|
102
|
-
@lookup_context.find_template(layout, nil, false,
|
|
102
|
+
@lookup_context.find_template(layout, nil, false, [], details)
|
|
103
103
|
end
|
|
104
104
|
rescue ActionView::MissingTemplate
|
|
105
105
|
all_details = @details.merge(formats: @lookup_context.default_formats)
|
|
106
|
-
raise unless template_exists?(layout, nil, false,
|
|
106
|
+
raise unless template_exists?(layout, nil, false, [], **all_details)
|
|
107
107
|
end
|
|
108
108
|
when Proc
|
|
109
|
-
resolve_layout(layout.call(@lookup_context, formats
|
|
109
|
+
resolve_layout(layout.call(@lookup_context, formats), keys, formats)
|
|
110
110
|
else
|
|
111
111
|
layout
|
|
112
112
|
end
|
|
@@ -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
|
|
@@ -27,17 +27,6 @@ module ActionView
|
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
class StrictLocalsError < ArgumentError # :nodoc:
|
|
31
|
-
def initialize(argument_error, template)
|
|
32
|
-
message = argument_error.message.
|
|
33
|
-
gsub("unknown keyword:", "unknown local:").
|
|
34
|
-
gsub("missing keyword:", "missing local:").
|
|
35
|
-
gsub("no keywords accepted", "no locals accepted").
|
|
36
|
-
concat(" for #{template.short_identifier}")
|
|
37
|
-
super(message)
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
|
|
41
30
|
class MissingTemplate < ActionViewError # :nodoc:
|
|
42
31
|
attr_reader :path, :paths, :prefixes, :partial
|
|
43
32
|
|
|
@@ -42,9 +42,7 @@ module ActionView
|
|
|
42
42
|
# source location inside the template.
|
|
43
43
|
def translate_location(spot, backtrace_location, source)
|
|
44
44
|
# Tokenize the source line
|
|
45
|
-
|
|
46
|
-
return nil if source_lines.size < backtrace_location.lineno
|
|
47
|
-
tokens = ::ERB::Util.tokenize(source_lines[backtrace_location.lineno - 1])
|
|
45
|
+
tokens = ::ERB::Util.tokenize(source.lines[backtrace_location.lineno - 1])
|
|
48
46
|
new_first_column = find_offset(spot[:snippet], tokens, spot[:first_column])
|
|
49
47
|
lineno_delta = spot[:first_lineno] - backtrace_location.lineno
|
|
50
48
|
spot[:first_lineno] -= lineno_delta
|
|
@@ -53,7 +51,7 @@ module ActionView
|
|
|
53
51
|
column_delta = spot[:first_column] - new_first_column
|
|
54
52
|
spot[:first_column] -= column_delta
|
|
55
53
|
spot[:last_column] -= column_delta
|
|
56
|
-
spot[:script_lines] =
|
|
54
|
+
spot[:script_lines] = source.lines
|
|
57
55
|
|
|
58
56
|
spot
|
|
59
57
|
rescue NotImplementedError, LocationParsingError
|
|
@@ -107,57 +105,51 @@ module ActionView
|
|
|
107
105
|
raise WrongEncodingError.new(string, string.encoding)
|
|
108
106
|
end
|
|
109
107
|
|
|
110
|
-
# Find which token in the source template spans the byte range that
|
|
111
|
-
# contains the error_column, then return the offset compared to the
|
|
112
|
-
# original source template.
|
|
113
|
-
#
|
|
114
|
-
# Iterate consecutive pairs of CODE or TEXT tokens, requiring
|
|
115
|
-
# a match of the first token before matching either token.
|
|
116
|
-
#
|
|
117
|
-
# For example, if we want to find tokens A, B, C, we do the following:
|
|
118
|
-
# 1. Find a match for A: test error_column or advance scanner.
|
|
119
|
-
# 2. Find a match for B or A:
|
|
120
|
-
# a. If B: start over with next token set (B, C).
|
|
121
|
-
# b. If A: test error_column or advance scanner.
|
|
122
|
-
# c. Otherwise: Advance 1 byte
|
|
123
|
-
#
|
|
124
|
-
# Prioritize matching the next token over the current token once
|
|
125
|
-
# a match for the current token has been found. This is to prevent
|
|
126
|
-
# the current token from looping past the next token if they both
|
|
127
|
-
# match (i.e. if the current token is a single space character).
|
|
128
108
|
def find_offset(compiled, source_tokens, error_column)
|
|
129
109
|
compiled = StringScanner.new(compiled)
|
|
130
|
-
offset_source_tokens(source_tokens).each_cons(2) do |(name, str, offset), (_, next_str, _)|
|
|
131
|
-
matched_str = false
|
|
132
110
|
|
|
133
|
-
|
|
134
|
-
if matched_str && next_str && compiled.match?(next_str)
|
|
135
|
-
break
|
|
136
|
-
elsif compiled.match?(str)
|
|
137
|
-
matched_str = true
|
|
111
|
+
passed_tokens = []
|
|
138
112
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
113
|
+
while tok = source_tokens.shift
|
|
114
|
+
tok_name, str = *tok
|
|
115
|
+
case tok_name
|
|
116
|
+
when :TEXT
|
|
117
|
+
loop do
|
|
118
|
+
break if compiled.match?(str)
|
|
119
|
+
compiled.getch
|
|
120
|
+
end
|
|
121
|
+
raise LocationParsingError unless compiled.scan(str)
|
|
122
|
+
when :CODE
|
|
123
|
+
if compiled.pos > error_column
|
|
124
|
+
raise LocationParsingError, "We went too far"
|
|
125
|
+
end
|
|
142
126
|
|
|
143
|
-
|
|
127
|
+
if compiled.pos + str.bytesize >= error_column
|
|
128
|
+
offset = error_column - compiled.pos
|
|
129
|
+
return passed_tokens.map(&:last).join.bytesize + offset
|
|
144
130
|
else
|
|
145
|
-
compiled.
|
|
131
|
+
unless compiled.scan(str)
|
|
132
|
+
raise LocationParsingError, "Couldn't find code snippet"
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
when :OPEN
|
|
136
|
+
next_tok = source_tokens.first.last
|
|
137
|
+
loop do
|
|
138
|
+
break if compiled.match?(next_tok)
|
|
139
|
+
compiled.getch
|
|
146
140
|
end
|
|
141
|
+
when :CLOSE
|
|
142
|
+
next_tok = source_tokens.first.last
|
|
143
|
+
loop do
|
|
144
|
+
break if compiled.match?(next_tok)
|
|
145
|
+
compiled.getch
|
|
146
|
+
end
|
|
147
|
+
else
|
|
148
|
+
raise LocationParsingError, "Not implemented: #{tok.first}"
|
|
147
149
|
end
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
raise LocationParsingError, "Couldn't find code snippet"
|
|
151
|
-
end
|
|
152
150
|
|
|
153
|
-
|
|
154
|
-
source_offset = 0
|
|
155
|
-
with_offset = source_tokens.filter_map do |(name, str)|
|
|
156
|
-
result = [name, str, source_offset] if name == :CODE || name == :TEXT
|
|
157
|
-
source_offset += str.bytesize
|
|
158
|
-
result
|
|
151
|
+
passed_tokens << tok
|
|
159
152
|
end
|
|
160
|
-
with_offset << [:EOS, nil, source_offset]
|
|
161
153
|
end
|
|
162
154
|
end
|
|
163
155
|
end
|
data/lib/action_view/template.rb
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require "thread"
|
|
4
3
|
require "delegate"
|
|
5
4
|
|
|
6
5
|
module ActionView
|
|
@@ -230,21 +229,11 @@ module ActionView
|
|
|
230
229
|
end
|
|
231
230
|
|
|
232
231
|
def spot(location) # :nodoc:
|
|
232
|
+
ast = RubyVM::AbstractSyntaxTree.parse(compiled_source, keep_script_lines: true)
|
|
233
233
|
node_id = RubyVM::AbstractSyntaxTree.node_id_for_backtrace_location(location)
|
|
234
|
-
|
|
235
|
-
if RubyVM::InstructionSequence.compile("").to_a[4][:parser] == :prism
|
|
236
|
-
require "prism"
|
|
234
|
+
node = find_node_by_id(ast, node_id)
|
|
237
235
|
|
|
238
|
-
|
|
239
|
-
result = Prism.parse(compiled_source).value
|
|
240
|
-
result.breadth_first_search { |node| node.node_id == node_id }
|
|
241
|
-
end
|
|
242
|
-
else
|
|
243
|
-
node = RubyVM::AbstractSyntaxTree.parse(compiled_source, keep_script_lines: true)
|
|
244
|
-
find_node_by_id(node, node_id)
|
|
245
|
-
end
|
|
246
|
-
|
|
247
|
-
ErrorHighlight.spot(found) if found
|
|
236
|
+
ErrorHighlight.spot(node)
|
|
248
237
|
end
|
|
249
238
|
|
|
250
239
|
# Translate an error location returned by ErrorHighlight to the correct
|
|
@@ -301,6 +301,7 @@ module ActionView
|
|
|
301
301
|
class RenderedViewContent < String # :nodoc:
|
|
302
302
|
end
|
|
303
303
|
|
|
304
|
+
# Need to experiment if this priority is the best one: rendered => output_buffer
|
|
304
305
|
class RenderedViewsCollection
|
|
305
306
|
def initialize
|
|
306
307
|
@rendered_views ||= Hash.new { |hash, key| hash[key] = [] }
|
data/lib/action_view.rb
CHANGED
metadata
CHANGED
|
@@ -1,13 +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
9
|
bindir: bin
|
|
9
10
|
cert_chain: []
|
|
10
|
-
date:
|
|
11
|
+
date: 2024-09-26 00:00:00.000000000 Z
|
|
11
12
|
dependencies:
|
|
12
13
|
- !ruby/object:Gem::Dependency
|
|
13
14
|
name: activesupport
|
|
@@ -15,28 +16,14 @@ dependencies:
|
|
|
15
16
|
requirements:
|
|
16
17
|
- - '='
|
|
17
18
|
- !ruby/object:Gem::Version
|
|
18
|
-
version:
|
|
19
|
+
version: 8.0.0.beta1
|
|
19
20
|
type: :runtime
|
|
20
21
|
prerelease: false
|
|
21
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
23
|
requirements:
|
|
23
24
|
- - '='
|
|
24
25
|
- !ruby/object:Gem::Version
|
|
25
|
-
version:
|
|
26
|
-
- !ruby/object:Gem::Dependency
|
|
27
|
-
name: cgi
|
|
28
|
-
requirement: !ruby/object:Gem::Requirement
|
|
29
|
-
requirements:
|
|
30
|
-
- - ">="
|
|
31
|
-
- !ruby/object:Gem::Version
|
|
32
|
-
version: '0'
|
|
33
|
-
type: :runtime
|
|
34
|
-
prerelease: false
|
|
35
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
-
requirements:
|
|
37
|
-
- - ">="
|
|
38
|
-
- !ruby/object:Gem::Version
|
|
39
|
-
version: '0'
|
|
26
|
+
version: 8.0.0.beta1
|
|
40
27
|
- !ruby/object:Gem::Dependency
|
|
41
28
|
name: builder
|
|
42
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -99,28 +86,28 @@ dependencies:
|
|
|
99
86
|
requirements:
|
|
100
87
|
- - '='
|
|
101
88
|
- !ruby/object:Gem::Version
|
|
102
|
-
version:
|
|
89
|
+
version: 8.0.0.beta1
|
|
103
90
|
type: :development
|
|
104
91
|
prerelease: false
|
|
105
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
106
93
|
requirements:
|
|
107
94
|
- - '='
|
|
108
95
|
- !ruby/object:Gem::Version
|
|
109
|
-
version:
|
|
96
|
+
version: 8.0.0.beta1
|
|
110
97
|
- !ruby/object:Gem::Dependency
|
|
111
98
|
name: activemodel
|
|
112
99
|
requirement: !ruby/object:Gem::Requirement
|
|
113
100
|
requirements:
|
|
114
101
|
- - '='
|
|
115
102
|
- !ruby/object:Gem::Version
|
|
116
|
-
version:
|
|
103
|
+
version: 8.0.0.beta1
|
|
117
104
|
type: :development
|
|
118
105
|
prerelease: false
|
|
119
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
120
107
|
requirements:
|
|
121
108
|
- - '='
|
|
122
109
|
- !ruby/object:Gem::Version
|
|
123
|
-
version:
|
|
110
|
+
version: 8.0.0.beta1
|
|
124
111
|
description: Simple, battle-tested conventions and helpers for building web pages.
|
|
125
112
|
email: david@loudthinking.com
|
|
126
113
|
executables: []
|
|
@@ -140,6 +127,7 @@ files:
|
|
|
140
127
|
- lib/action_view/dependency_tracker.rb
|
|
141
128
|
- lib/action_view/dependency_tracker/erb_tracker.rb
|
|
142
129
|
- lib/action_view/dependency_tracker/ruby_tracker.rb
|
|
130
|
+
- lib/action_view/dependency_tracker/wildcard_resolver.rb
|
|
143
131
|
- lib/action_view/deprecator.rb
|
|
144
132
|
- lib/action_view/digestor.rb
|
|
145
133
|
- lib/action_view/flows.rb
|
|
@@ -259,11 +247,12 @@ licenses:
|
|
|
259
247
|
- MIT
|
|
260
248
|
metadata:
|
|
261
249
|
bug_tracker_uri: https://github.com/rails/rails/issues
|
|
262
|
-
changelog_uri: https://github.com/rails/rails/blob/
|
|
263
|
-
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/
|
|
264
252
|
mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
|
|
265
|
-
source_code_uri: https://github.com/rails/rails/tree/
|
|
253
|
+
source_code_uri: https://github.com/rails/rails/tree/v8.0.0.beta1/actionview
|
|
266
254
|
rubygems_mfa_required: 'true'
|
|
255
|
+
post_install_message:
|
|
267
256
|
rdoc_options: []
|
|
268
257
|
require_paths:
|
|
269
258
|
- lib
|
|
@@ -271,7 +260,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
271
260
|
requirements:
|
|
272
261
|
- - ">="
|
|
273
262
|
- !ruby/object:Gem::Version
|
|
274
|
-
version: 3.
|
|
263
|
+
version: 3.2.0
|
|
275
264
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
276
265
|
requirements:
|
|
277
266
|
- - ">="
|
|
@@ -279,7 +268,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
279
268
|
version: '0'
|
|
280
269
|
requirements:
|
|
281
270
|
- none
|
|
282
|
-
rubygems_version: 3.
|
|
271
|
+
rubygems_version: 3.5.16
|
|
272
|
+
signing_key:
|
|
283
273
|
specification_version: 4
|
|
284
274
|
summary: Rendering framework putting the V in MVC (part of Rails).
|
|
285
275
|
test_files: []
|