actionview 8.0.0.beta1 → 8.0.0.rc2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +16 -0
- data/lib/action_view/dependency_tracker/erb_tracker.rb +2 -1
- data/lib/action_view/gem_version.rb +1 -1
- data/lib/action_view/helpers/atom_feed_helper.rb +0 -2
- data/lib/action_view/helpers/date_helper.rb +3 -3
- data/lib/action_view/helpers/form_helper.rb +17 -16
- data/lib/action_view/helpers/form_options_helper.rb +7 -7
- data/lib/action_view/helpers/tag_helper.rb +2 -18
- data/lib/action_view/helpers/text_helper.rb +1 -1
- data/lib/action_view/record_identifier.rb +1 -1
- data/lib/action_view/template.rb +13 -3
- metadata +11 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce23d8a9002fa8d5652aa3ad756287330509fc1c7c32944a99e5859a70d50d5a
|
4
|
+
data.tar.gz: 475923449e3916cd5feb3db9eaf19d44dac25f6b9c01196a63c6995060550d2e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2cc4355e81f77ee5f7e06fdddc53e4e7aebdce0b4c8c0d4bc83e9ab39a0042fc70d54acf2a55f6b0f12a79fdda710d4fd5a26fb156edea0b8a5a01a5bc5bbe51
|
7
|
+
data.tar.gz: dcdbfa1dc4538656447d4594dee2c6d8c75a67930f9672f80ae3e6d068088f3331fb1f00568da812f35834b058fc9e56d990cfc5e2684149ad43b0fd50ef06f8
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,19 @@
|
|
1
|
+
## Rails 8.0.0.rc2 (October 30, 2024) ##
|
2
|
+
|
3
|
+
* No changes.
|
4
|
+
|
5
|
+
|
6
|
+
## Rails 8.0.0.rc1 (October 19, 2024) ##
|
7
|
+
|
8
|
+
* Remove deprecated support to passing a content to void tag elements on the `tag` builder.
|
9
|
+
|
10
|
+
*Rafael Mendonça França*
|
11
|
+
|
12
|
+
* Remove deprecated support to passing `nil` to the `model:` argument of `form_with`.
|
13
|
+
|
14
|
+
*Rafael Mendonça França*
|
15
|
+
|
16
|
+
|
1
17
|
## Rails 8.0.0.beta1 (September 26, 2024) ##
|
2
18
|
|
3
19
|
* Enable DependencyTracker to evaluate renders with trailing interpolation.
|
@@ -127,7 +127,8 @@ module ActionView
|
|
127
127
|
wildcard_dependency << scanner.pre_match
|
128
128
|
|
129
129
|
while unmatched_brackets > 0 && !scanner.eos?
|
130
|
-
scanner.scan_until(/[{}]/)
|
130
|
+
found = scanner.scan_until(/[{}]/)
|
131
|
+
return unless found
|
131
132
|
|
132
133
|
case scanner.matched
|
133
134
|
when "{"
|
@@ -1228,7 +1228,7 @@ module ActionView
|
|
1228
1228
|
class FormBuilder
|
1229
1229
|
# Wraps ActionView::Helpers::DateHelper#date_select for form builders:
|
1230
1230
|
#
|
1231
|
-
# <%=
|
1231
|
+
# <%= form_with model: @person do |f| %>
|
1232
1232
|
# <%= f.date_select :birth_date %>
|
1233
1233
|
# <%= f.submit %>
|
1234
1234
|
# <% end %>
|
@@ -1240,7 +1240,7 @@ module ActionView
|
|
1240
1240
|
|
1241
1241
|
# Wraps ActionView::Helpers::DateHelper#time_select for form builders:
|
1242
1242
|
#
|
1243
|
-
# <%=
|
1243
|
+
# <%= form_with model: @race do |f| %>
|
1244
1244
|
# <%= f.time_select :average_lap %>
|
1245
1245
|
# <%= f.submit %>
|
1246
1246
|
# <% end %>
|
@@ -1252,7 +1252,7 @@ module ActionView
|
|
1252
1252
|
|
1253
1253
|
# Wraps ActionView::Helpers::DateHelper#datetime_select for form builders:
|
1254
1254
|
#
|
1255
|
-
# <%=
|
1255
|
+
# <%= form_with model: @person do |f| %>
|
1256
1256
|
# <%= f.datetime_select :last_request_at %>
|
1257
1257
|
# <%= f.submit %>
|
1258
1258
|
# <% end %>
|
@@ -30,20 +30,21 @@ module ActionView
|
|
30
30
|
# when the form is initially displayed, input fields corresponding to attributes
|
31
31
|
# of the resource should show the current values of those attributes.
|
32
32
|
#
|
33
|
-
# In \Rails, this is usually achieved by creating the form using
|
34
|
-
# a number of related helper methods.
|
35
|
-
#
|
36
|
-
#
|
37
|
-
#
|
33
|
+
# In \Rails, this is usually achieved by creating the form using either
|
34
|
+
# +form_with+ or +form_for+ and a number of related helper methods. These
|
35
|
+
# methods generate an appropriate <tt>form</tt> tag and yield a form
|
36
|
+
# builder object that knows the model the form is about. Input fields are
|
37
|
+
# created by calling methods defined on the form builder, which means they
|
38
|
+
# are able to generate the appropriate names and default values
|
38
39
|
# corresponding to the model attributes, as well as convenient IDs, etc.
|
39
|
-
# Conventions in the generated field names allow controllers to receive form
|
40
|
-
# nicely structured in +params+ with no effort on your side.
|
40
|
+
# Conventions in the generated field names allow controllers to receive form
|
41
|
+
# data nicely structured in +params+ with no effort on your side.
|
41
42
|
#
|
42
43
|
# For example, to create a new person you typically set up a new instance of
|
43
44
|
# +Person+ in the <tt>PeopleController#new</tt> action, <tt>@person</tt>, and
|
44
|
-
# in the view template pass that object to +form_for+:
|
45
|
+
# in the view template pass that object to +form_with+ or +form_for+:
|
45
46
|
#
|
46
|
-
# <%=
|
47
|
+
# <%= form_with model: @person do |f| %>
|
47
48
|
# <%= f.label :first_name %>:
|
48
49
|
# <%= f.text_field :first_name %><br />
|
49
50
|
#
|
@@ -753,7 +754,7 @@ module ActionView
|
|
753
754
|
# form_with(**options.merge(builder: LabellingFormBuilder), &block)
|
754
755
|
# end
|
755
756
|
def form_with(model: false, scope: nil, url: nil, format: nil, **options, &block)
|
756
|
-
|
757
|
+
raise ArgumentError, "Passed nil to the :model argument, expect an object or false" if model.nil?
|
757
758
|
|
758
759
|
options = { allow_method_names_outside_object: true, skip_default_ids: !form_with_generates_ids }.merge!(options)
|
759
760
|
|
@@ -783,9 +784,9 @@ module ActionView
|
|
783
784
|
end
|
784
785
|
end
|
785
786
|
|
786
|
-
# Creates a scope around a specific model object like form_with
|
787
|
-
# doesn't create the form tags themselves. This makes fields_for
|
788
|
-
# for specifying additional model objects in the same form.
|
787
|
+
# Creates a scope around a specific model object like +form_with+, but
|
788
|
+
# doesn't create the form tags themselves. This makes +fields_for+
|
789
|
+
# suitable for specifying additional model objects in the same form.
|
789
790
|
#
|
790
791
|
# Although the usage and purpose of +fields_for+ is similar to +form_with+'s,
|
791
792
|
# its method signature is slightly different. Like +form_with+, it yields
|
@@ -2032,9 +2033,9 @@ module ActionView
|
|
2032
2033
|
end
|
2033
2034
|
alias_method :text_area, :textarea
|
2034
2035
|
|
2035
|
-
# Creates a scope around a specific model object like form_with
|
2036
|
-
# doesn't create the form tags themselves. This makes fields_for
|
2037
|
-
# for specifying additional model objects in the same form.
|
2036
|
+
# Creates a scope around a specific model object like +form_with+, but
|
2037
|
+
# doesn't create the form tags themselves. This makes +fields_for+
|
2038
|
+
# suitable for specifying additional model objects in the same form.
|
2038
2039
|
#
|
2039
2040
|
# Although the usage and purpose of +fields_for+ is similar to +form_with+'s,
|
2040
2041
|
# its method signature is slightly different. Like +form_with+, it yields
|
@@ -840,7 +840,7 @@ module ActionView
|
|
840
840
|
class FormBuilder
|
841
841
|
# Wraps ActionView::Helpers::FormOptionsHelper#select for form builders:
|
842
842
|
#
|
843
|
-
# <%=
|
843
|
+
# <%= form_with model: @post do |f| %>
|
844
844
|
# <%= f.select :person_id, Person.all.collect { |p| [ p.name, p.id ] }, include_blank: true %>
|
845
845
|
# <%= f.submit %>
|
846
846
|
# <% end %>
|
@@ -852,7 +852,7 @@ module ActionView
|
|
852
852
|
|
853
853
|
# Wraps ActionView::Helpers::FormOptionsHelper#collection_select for form builders:
|
854
854
|
#
|
855
|
-
# <%=
|
855
|
+
# <%= form_with model: @post do |f| %>
|
856
856
|
# <%= f.collection_select :person_id, Author.all, :id, :name_with_initial, prompt: true %>
|
857
857
|
# <%= f.submit %>
|
858
858
|
# <% end %>
|
@@ -864,7 +864,7 @@ module ActionView
|
|
864
864
|
|
865
865
|
# Wraps ActionView::Helpers::FormOptionsHelper#grouped_collection_select for form builders:
|
866
866
|
#
|
867
|
-
# <%=
|
867
|
+
# <%= form_with model: @city do |f| %>
|
868
868
|
# <%= f.grouped_collection_select :country_id, @continents, :countries, :name, :id, :name %>
|
869
869
|
# <%= f.submit %>
|
870
870
|
# <% end %>
|
@@ -876,7 +876,7 @@ module ActionView
|
|
876
876
|
|
877
877
|
# Wraps ActionView::Helpers::FormOptionsHelper#time_zone_select for form builders:
|
878
878
|
#
|
879
|
-
# <%=
|
879
|
+
# <%= form_with model: @user do |f| %>
|
880
880
|
# <%= f.time_zone_select :time_zone, nil, include_blank: true %>
|
881
881
|
# <%= f.submit %>
|
882
882
|
# <% end %>
|
@@ -888,7 +888,7 @@ module ActionView
|
|
888
888
|
|
889
889
|
# Wraps ActionView::Helpers::FormOptionsHelper#weekday_select for form builders:
|
890
890
|
#
|
891
|
-
# <%=
|
891
|
+
# <%= form_with model: @user do |f| %>
|
892
892
|
# <%= f.weekday_select :weekday, include_blank: true %>
|
893
893
|
# <%= f.submit %>
|
894
894
|
# <% end %>
|
@@ -900,7 +900,7 @@ module ActionView
|
|
900
900
|
|
901
901
|
# Wraps ActionView::Helpers::FormOptionsHelper#collection_checkboxes for form builders:
|
902
902
|
#
|
903
|
-
# <%=
|
903
|
+
# <%= form_with model: @post do |f| %>
|
904
904
|
# <%= f.collection_checkboxes :author_ids, Author.all, :id, :name_with_initial %>
|
905
905
|
# <%= f.submit %>
|
906
906
|
# <% end %>
|
@@ -913,7 +913,7 @@ module ActionView
|
|
913
913
|
|
914
914
|
# Wraps ActionView::Helpers::FormOptionsHelper#collection_radio_buttons for form builders:
|
915
915
|
#
|
916
|
-
# <%=
|
916
|
+
# <%= form_with model: @post do |f| %>
|
917
917
|
# <%= f.collection_radio_buttons :author_id, Author.all, :id, :name_with_initial %>
|
918
918
|
# <%= f.submit %>
|
919
919
|
# <% end %>
|
@@ -4,7 +4,6 @@ require "active_support/code_generator"
|
|
4
4
|
require "active_support/core_ext/enumerable"
|
5
5
|
require "active_support/core_ext/string/output_safety"
|
6
6
|
require "active_support/core_ext/string/inflections"
|
7
|
-
require "set"
|
8
7
|
require "action_view/helpers/capture_helper"
|
9
8
|
require "action_view/helpers/output_safety_helper"
|
10
9
|
|
@@ -48,16 +47,6 @@ module ActionView
|
|
48
47
|
include CaptureHelper
|
49
48
|
include OutputSafetyHelper
|
50
49
|
|
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
50
|
def self.define_element(name, code_generator:, method_name: name)
|
62
51
|
return if method_defined?(name)
|
63
52
|
|
@@ -72,13 +61,8 @@ module ActionView
|
|
72
61
|
def self.define_void_element(name, code_generator:, method_name: name)
|
73
62
|
code_generator.class_eval do |batch|
|
74
63
|
batch << "\n" <<
|
75
|
-
"def #{method_name}(
|
76
|
-
"
|
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" <<
|
64
|
+
"def #{method_name}(escape: true, **options, &block)" <<
|
65
|
+
" self_closing_tag_string(#{name.inspect}, options, escape, '>')" <<
|
82
66
|
"end"
|
83
67
|
end
|
84
68
|
end
|
@@ -166,7 +166,7 @@ module ActionView
|
|
166
166
|
# highlight('You searched for: rails', 'rails', highlighter: '<a href="search?q=\1">\1</a>')
|
167
167
|
# # => "You searched for: <a href=\"search?q=rails\">rails</a>"
|
168
168
|
#
|
169
|
-
# highlight('You searched for: rails', 'rails') { |match| link_to(search_path(q: match
|
169
|
+
# highlight('You searched for: rails', 'rails') { |match| link_to(search_path(q: match)) }
|
170
170
|
# # => "You searched for: <a href=\"search?q=rails\">rails</a>"
|
171
171
|
#
|
172
172
|
# highlight('<a href="javascript:alert(\'no!\')">ruby</a> on rails', 'rails', sanitize: false)
|
data/lib/action_view/template.rb
CHANGED
@@ -229,11 +229,21 @@ module ActionView
|
|
229
229
|
end
|
230
230
|
|
231
231
|
def spot(location) # :nodoc:
|
232
|
-
ast = RubyVM::AbstractSyntaxTree.parse(compiled_source, keep_script_lines: true)
|
233
232
|
node_id = RubyVM::AbstractSyntaxTree.node_id_for_backtrace_location(location)
|
234
|
-
|
233
|
+
found =
|
234
|
+
if RubyVM::InstructionSequence.compile("").to_a[4][:parser] == :prism
|
235
|
+
require "prism"
|
235
236
|
|
236
|
-
|
237
|
+
if Prism::VERSION >= "1.0.0"
|
238
|
+
result = Prism.parse(compiled_source).value
|
239
|
+
result.breadth_first_search { |node| node.node_id == node_id }
|
240
|
+
end
|
241
|
+
else
|
242
|
+
node = RubyVM::AbstractSyntaxTree.parse(compiled_source, keep_script_lines: true)
|
243
|
+
find_node_by_id(node, node_id)
|
244
|
+
end
|
245
|
+
|
246
|
+
ErrorHighlight.spot(found) if found
|
237
247
|
end
|
238
248
|
|
239
249
|
# Translate an error location returned by ErrorHighlight to the correct
|
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: 8.0.0.
|
4
|
+
version: 8.0.0.rc2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Heinemeier Hansson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-10-30 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: 8.0.0.
|
19
|
+
version: 8.0.0.rc2
|
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: 8.0.0.
|
26
|
+
version: 8.0.0.rc2
|
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: 8.0.0.
|
89
|
+
version: 8.0.0.rc2
|
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: 8.0.0.
|
96
|
+
version: 8.0.0.rc2
|
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: 8.0.0.
|
103
|
+
version: 8.0.0.rc2
|
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: 8.0.0.
|
110
|
+
version: 8.0.0.rc2
|
111
111
|
description: Simple, battle-tested conventions and helpers for building web pages.
|
112
112
|
email: david@loudthinking.com
|
113
113
|
executables: []
|
@@ -247,10 +247,10 @@ licenses:
|
|
247
247
|
- MIT
|
248
248
|
metadata:
|
249
249
|
bug_tracker_uri: https://github.com/rails/rails/issues
|
250
|
-
changelog_uri: https://github.com/rails/rails/blob/v8.0.0.
|
251
|
-
documentation_uri: https://api.rubyonrails.org/v8.0.0.
|
250
|
+
changelog_uri: https://github.com/rails/rails/blob/v8.0.0.rc2/actionview/CHANGELOG.md
|
251
|
+
documentation_uri: https://api.rubyonrails.org/v8.0.0.rc2/
|
252
252
|
mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
|
253
|
-
source_code_uri: https://github.com/rails/rails/tree/v8.0.0.
|
253
|
+
source_code_uri: https://github.com/rails/rails/tree/v8.0.0.rc2/actionview
|
254
254
|
rubygems_mfa_required: 'true'
|
255
255
|
post_install_message:
|
256
256
|
rdoc_options: []
|