activemodel 8.0.0.beta1 → 8.0.0.rc2
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 +22 -0
- data/lib/active_model/attribute_set.rb +1 -1
- data/lib/active_model/conversion.rb +1 -1
- data/lib/active_model/dirty.rb +10 -4
- data/lib/active_model/gem_version.rb +1 -1
- data/lib/active_model/type/value.rb +2 -2
- data/lib/active_model/validations/validates.rb +7 -2
- data/lib/active_model/validations.rb +21 -2
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe86b869064247ef19c8c715e9c0488388d6560596263be3da35e496da95d1bc
|
4
|
+
data.tar.gz: bacf541e392054fe3d8db5c23f2ef572ffb9423594aac67ac80797a102f99fec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3be677d21f7ad823f4ced7c283159fdf9e4a3a74f806d68b80dfb4683965099e975c7fa56a4b35e520690d25c1a62c0d690ffe9a67ccd050708cb946631dd1a8
|
7
|
+
data.tar.gz: 73546bdd04dc2ca32cfd3a1a006cda6e1c4ea0922a9697c4bc72f64c62cc2d79cb774695f4b11d4dc07121ebc4d04cf743834b1d01a209e1614b7a1230f0173a
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,25 @@
|
|
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
|
+
* Add `:except_on` option for validations. Grants the ability to _skip_ validations in specified contexts.
|
9
|
+
|
10
|
+
```ruby
|
11
|
+
class User < ApplicationRecord
|
12
|
+
#...
|
13
|
+
validates :birthday, presence: { except_on: :admin }
|
14
|
+
#...
|
15
|
+
end
|
16
|
+
|
17
|
+
user = User.new(attributes except birthday)
|
18
|
+
user.save(context: :admin)
|
19
|
+
```
|
20
|
+
|
21
|
+
*Drew Bragg*
|
22
|
+
|
1
23
|
## Rails 8.0.0.beta1 (September 26, 2024) ##
|
2
24
|
|
3
25
|
* Make `ActiveModel::Serialization#read_attribute_for_serialization` public
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module ActiveModel
|
4
4
|
# = Active \Model \Conversion
|
5
5
|
#
|
6
|
-
# Handles default conversions: to_model, to_key, to_param, and to_partial_path.
|
6
|
+
# Handles default conversions: #to_model, #to_key, #to_param, and #to_partial_path.
|
7
7
|
#
|
8
8
|
# Let's take for example this non-persisted object.
|
9
9
|
#
|
data/lib/active_model/dirty.rb
CHANGED
@@ -247,12 +247,18 @@ module ActiveModel
|
|
247
247
|
|
248
248
|
def initialize_dup(other) # :nodoc:
|
249
249
|
super
|
250
|
-
|
251
|
-
|
252
|
-
|
250
|
+
@mutations_from_database = nil
|
251
|
+
end
|
252
|
+
|
253
|
+
def init_attributes(other) # :nodoc:
|
254
|
+
attrs = super
|
255
|
+
if other.persisted? && self.class.respond_to?(:_default_attributes)
|
256
|
+
self.class._default_attributes.map do |attr|
|
257
|
+
attr.with_value_from_user(attrs.fetch_value(attr.name))
|
253
258
|
end
|
259
|
+
else
|
260
|
+
attrs
|
254
261
|
end
|
255
|
-
@mutations_from_database = nil
|
256
262
|
end
|
257
263
|
|
258
264
|
def as_json(options = {}) # :nodoc:
|
@@ -78,7 +78,12 @@ module ActiveModel
|
|
78
78
|
# or an array of symbols. (e.g. <tt>on: :create</tt> or
|
79
79
|
# <tt>on: :custom_validation_context</tt> or
|
80
80
|
# <tt>on: [:create, :custom_validation_context]</tt>)
|
81
|
-
# * <tt>:
|
81
|
+
# * <tt>:except_on</tt> - Specifies the contexts where this validation is not active.
|
82
|
+
# Runs in all validation contexts by default +nil+. You can pass a symbol
|
83
|
+
# or an array of symbols. (e.g. <tt>except: :create</tt> or
|
84
|
+
# <tt>except_on: :custom_validation_context</tt> or
|
85
|
+
# <tt>except_on: [:create, :custom_validation_context]</tt>)
|
86
|
+
# * <tt>:if</tt> - Specifies a method, proc or string to call to determine
|
82
87
|
# if the validation should occur (e.g. <tt>if: :allow_validation</tt>,
|
83
88
|
# or <tt>if: Proc.new { |user| user.signup_step > 2 }</tt>). The method,
|
84
89
|
# proc or string should return or evaluate to a +true+ or +false+ value.
|
@@ -155,7 +160,7 @@ module ActiveModel
|
|
155
160
|
# When creating custom validators, it might be useful to be able to specify
|
156
161
|
# additional default keys. This can be done by overwriting this method.
|
157
162
|
def _validates_default_keys
|
158
|
-
[:if, :unless, :on, :allow_blank, :allow_nil, :strict]
|
163
|
+
[:if, :unless, :on, :allow_blank, :allow_nil, :strict, :except_on]
|
159
164
|
end
|
160
165
|
|
161
166
|
def _parse_validates_options(options)
|
@@ -69,6 +69,11 @@ module ActiveModel
|
|
69
69
|
# or an array of symbols. (e.g. <tt>on: :create</tt> or
|
70
70
|
# <tt>on: :custom_validation_context</tt> or
|
71
71
|
# <tt>on: [:create, :custom_validation_context]</tt>)
|
72
|
+
# * <tt>:except_on</tt> - Specifies the contexts where this validation is not active.
|
73
|
+
# Runs in all validation contexts by default +nil+. You can pass a symbol
|
74
|
+
# or an array of symbols. (e.g. <tt>except: :create</tt> or
|
75
|
+
# <tt>except_on: :custom_validation_context</tt> or
|
76
|
+
# <tt>except_on: [:create, :custom_validation_context]</tt>)
|
72
77
|
# * <tt>:allow_nil</tt> - Skip validation if attribute is +nil+.
|
73
78
|
# * <tt>:allow_blank</tt> - Skip validation if attribute is blank.
|
74
79
|
# * <tt>:if</tt> - Specifies a method, proc, or string to call to determine
|
@@ -84,7 +89,7 @@ module ActiveModel
|
|
84
89
|
validates_with BlockValidator, _merge_attributes(attr_names), &block
|
85
90
|
end
|
86
91
|
|
87
|
-
VALID_OPTIONS_FOR_VALIDATE = [:on, :if, :unless, :prepend].freeze # :nodoc:
|
92
|
+
VALID_OPTIONS_FOR_VALIDATE = [:on, :if, :unless, :prepend, :except_on].freeze # :nodoc:
|
88
93
|
|
89
94
|
# Adds a validation method or block to the class. This is useful when
|
90
95
|
# overriding the +validate+ instance method becomes too unwieldy and
|
@@ -135,7 +140,12 @@ module ActiveModel
|
|
135
140
|
# or an array of symbols. (e.g. <tt>on: :create</tt> or
|
136
141
|
# <tt>on: :custom_validation_context</tt> or
|
137
142
|
# <tt>on: [:create, :custom_validation_context]</tt>)
|
138
|
-
# * <tt>:
|
143
|
+
# * <tt>:except_on</tt> - Specifies the contexts where this validation is not active.
|
144
|
+
# Runs in all validation contexts by default +nil+. You can pass a symbol
|
145
|
+
# or an array of symbols. (e.g. <tt>except: :create</tt> or
|
146
|
+
# <tt>except_on: :custom_validation_context</tt> or
|
147
|
+
# <tt>except_on: [:create, :custom_validation_context]</tt>)
|
148
|
+
# * <tt>:if</tt> - Specifies a method, proc or string to call to determine
|
139
149
|
# if the validation should occur (e.g. <tt>if: :allow_validation</tt>,
|
140
150
|
# or <tt>if: Proc.new { |user| user.signup_step > 2 }</tt>). The method,
|
141
151
|
# proc or string should return or evaluate to a +true+ or +false+ value.
|
@@ -162,6 +172,15 @@ module ActiveModel
|
|
162
172
|
options = options.merge(if: [predicate_for_validation_context(options[:on]), *options[:if]])
|
163
173
|
end
|
164
174
|
|
175
|
+
if options.key?(:except_on)
|
176
|
+
options = options.dup
|
177
|
+
options[:except_on] = Array(options[:except_on])
|
178
|
+
options[:unless] = [
|
179
|
+
->(o) { (options[:except_on] & Array(o.validation_context)).any? },
|
180
|
+
*options[:unless]
|
181
|
+
]
|
182
|
+
end
|
183
|
+
|
165
184
|
set_callback(:validate, *args, options, &block)
|
166
185
|
end
|
167
186
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activemodel
|
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
|
description: A toolkit for building modeling frameworks like Active Record. Rich support
|
28
28
|
for attributes, callbacks, validations, serialization, internationalization, and
|
29
29
|
testing.
|
@@ -112,10 +112,10 @@ licenses:
|
|
112
112
|
- MIT
|
113
113
|
metadata:
|
114
114
|
bug_tracker_uri: https://github.com/rails/rails/issues
|
115
|
-
changelog_uri: https://github.com/rails/rails/blob/v8.0.0.
|
116
|
-
documentation_uri: https://api.rubyonrails.org/v8.0.0.
|
115
|
+
changelog_uri: https://github.com/rails/rails/blob/v8.0.0.rc2/activemodel/CHANGELOG.md
|
116
|
+
documentation_uri: https://api.rubyonrails.org/v8.0.0.rc2/
|
117
117
|
mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
|
118
|
-
source_code_uri: https://github.com/rails/rails/tree/v8.0.0.
|
118
|
+
source_code_uri: https://github.com/rails/rails/tree/v8.0.0.rc2/activemodel
|
119
119
|
rubygems_mfa_required: 'true'
|
120
120
|
post_install_message:
|
121
121
|
rdoc_options: []
|