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: []
         
     |