aboutsummaryrefslogtreecommitdiffstats
path: root/activemodel
Commit message (Collapse)AuthorAgeFilesLines
...
* | | | | | | revises AM:Dirty example [Godfrey Chan & Xavier Noria]Xavier Noria2015-02-061-6/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The existing example seems somewhat forced: is it realistic to have a model that accepts state in its initializer but considers it has not been changed? By allowing state changes to happen only via accessors it seems more natural that new instances are considered to be unchanged (as they are in AR). [ci skip]
* | | | | | | use parentheses here, for the beard of the Prophet! [ci skip]Xavier Noria2015-02-061-1/+1
| | | | | | |
* | | | | | | applies guidelines to dirty.rb [ci skip]Xavier Noria2015-02-061-11/+11
| | | | | | |
* | | | | | | Merge pull request #18795 from vipulnsward/remove-magic-commentsJeremy Kemper2015-02-0316-17/+0
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | Removed magic comments (`# encoding: utf-8`) from tests since it's default from ruby 2 onwards
| * | | | | | | Removed magic comments # encoding: utf-8 , since its default from ruby 2.0 ↵Vipul A M2015-02-0316-17/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | onwards.
* | | | | | | | Wrap method arguments with parentheses in docsCarlos Antonio da Silva2015-02-031-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | As per Rails general coding conventions. Related to #18794 [ci skip]
* | | | | | | | Person class doesn't contain finder methods, hence usage of Person.find_by ↵Vipul A M2015-02-031-1/+5
|/ / / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | is wrong. Added simple initialize and made use of Person.new instead of Person.find_by to clarify the docs. [ci skip]
* | | | | | | Fix validations on child record when record parent has validate: falseeileencodes2015-02-011-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes #17621. This 5 year old (or older) issue causes validations to fire when a parent record has `validate: false` option and a child record is saved. It's not the responsibility of the model to validate an associated object unless the object was created or modified by the parent. Clean up tests related to validations `assert_nothing_raised` is not benefiting us in these tests Corrected spelling of "respects" It's better to use `assert_not_operator` over `assert !r.valid`
* | | | | | | Move required error message and changelog to Active RecordCarlos Antonio da Silva2015-02-012-7/+1
| |_|_|/ / / |/| | | | | | | | | | | | | | | | | | | | | | | The new association error belongs to Active Record, not Active Model. See #18700 for reference.
* | | | | | Merge pull request #18700 from nygrenh/better-required-messageAaron Patterson2015-01-312-0/+6
|\ \ \ \ \ \ | | | | | | | | | | | | | | Provide a better error message on :required association
| * | | | | | Provide a better error message on :required associationHenrik Nygren2015-01-282-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes #18696.
* | | | | | | unify CHANGELOG format. [ci skip]Yves Senn2015-01-311-32/+30
|/ / / / / /
* | | | | | Merge pull request #18670 from morgoth/fix-duplicating-errors-detailsYves Senn2015-01-242-2/+3
|\ \ \ \ \ \ | | | | | | | | | | | | | | Fixed duplicating ActiveModel::Errors#details
| * | | | | | Fixed duplicating ActiveModel::Errors#detailsWojciech Wnętrzak2015-01-242-2/+3
| | | | | | |
* | | | | | | use attribute assignment module logic during active model initializationEugene Gilburg2015-01-233-5/+17
|/ / / / / /
* | | | | | ✂️ and 💅 for #10776Sean Griffin2015-01-233-33/+33
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Minor style changes across the board. Changed an alias to an explicit method declaration, since the alias will not be documented otherwise.
* | | | | | Extracted `ActiveRecord::AttributeAssignment` to ↵Bogdan Gusiev2015-01-234-0/+191
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `ActiveModel::AttributesAssignment` Allows to use it for any object as an includable module.
* | | | | | Merge pull request #18322 from morgoth/add-error-codesRafael Mendonça França2015-01-213-21/+98
|\ \ \ \ \ \ | | | | | | | | | | | | | | Add ActiveModel::Errors#codes
| * | | | | | Add ActiveModel::Errors#detailsWojciech Wnętrzak2015-01-203-21/+98
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | To be able to return type of validator, one can now call `details` on Errors instance: ```ruby class User < ActiveRecord::Base validates :name, presence: true end ``` ```ruby user = User.new; user.valid?; user.errors.details => {name: [{error: :blank}]} ```
* | | | | | | Add missing AS core extension dependencyWojciech Wnętrzak2015-01-211-0/+1
|/ / / / / /
* | | / / / Don't calculate in-place changes on attribute assignmentSean Griffin2015-01-181-0/+1
| |_|/ / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When an attribute is assigned, we determine if it was already marked as changed so we can determine if we need to clear the changes, or mark it as changed. Since this only affects the `attributes_changed_by_setter` hash, in-place changes are irrelevant to this process. Since calculating in-place changes can be expensive, we can just skip it here. I also added a test for the only edge case I could think of that would be affected by this change.
* | | | | Merge pull request #18439 from mokhan/validates-acceptance-of-arraySean Griffin2015-01-123-2/+18
|\ \ \ \ \ | | | | | | | | | | | | allow '1' or true for acceptance validation.
| * | | | | allow '1' or true for acceptance validation.mo khan2015-01-103-2/+18
| | | | | |
* | | | | | Fix error messages scope [skip ci]Anton Davydov2015-01-121-2/+2
| | | | | |
* | | | | | Merge pull request #18454 from claudiob/test-on-option-for-amv-callbacksCarlos Antonio da Silva2015-01-111-0/+26
|\ \ \ \ \ \ | | | | | | | | | | | | | | Add test for AM::Validation::Callbacks with :on
| * | | | | | Add test for AM::Validation::Callbacks with :onclaudiob2015-01-111-0/+26
| |/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `before_validation` and `after_validation` from ActiveModel::Validation::Callbacks accept an optional `:on` parameter that was not previously documented or tested. For instance given before_validation :do_something, on: :create then `object.valid?(:create)` will invoke `:do_something` while `object.valid?` or `object.valid?(:anything_else)` will not.
* / / / / / Remove unused "deprecated_reload" methodclaudiob2015-01-111-4/+0
|/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | The method was introduced in https://github.com/rails/rails/commit/66d0a0153578ce760d822580c5b8c0b726042ac2#diff-8cec05860729a3851ceb756f4dd90370R49 for the "reset_changes is deprecated" test, but this test was successively removed in https://github.com/rails/rails/commit/37175a24bd508e2983247ec5d011d57df836c743
* / / / / Remove attributes_protected_by_default reference, since ↵robertomiranda2015-01-091-7/+0
|/ / / / | | | | | | | | | | | | MassAssignmentSecurity was removed from ActiveModel f8c9a4d3e88181
* | | | removing unecessary parameter in private methodGeorge Millo2015-01-061-2/+2
| | | | | | | | | | | | | | | | '_singularize' only ever gets called with one argument
* | | | Remove unneeded requiresRafael Mendonça França2015-01-041-1/+0
| | | | | | | | | | | | | | | | These requires were added only to change deprecation message
* | | | Remove deprecated `ActiveModel::Dirty#reset_#{attribute}` and ↵Rafael Mendonça França2015-01-043-37/+5
| | | | | | | | | | | | | | | | `ActiveModel::Dirty#reset_changes`.
* | | | Merge pull request #17227 from claudiob/explicitly-abort-callbacksRafael Mendonça França2015-01-035-11/+44
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Introduce explicit way of halting callback chains by throwing :abort. Deprecate current implicit behavior of halting callback chains by returning `false` in apps ported to Rails 5.0. Completely remove that behavior in brand new Rails 5.0 apps. Conflicts: railties/CHANGELOG.md
| * | | | Add config to halt callback chain on return falseclaudiob2015-01-021-7/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This stems from [a comment](rails#17227 (comment)) by @dhh. In summary: * New Rails 5.0 apps will not accept `return false` as a way to halt callback chains, and will not display a deprecation warning. * Existing apps ported to Rails 5.0 will still accept `return false` as a way to halt callback chains, albeit with a deprecation warning. For this purpose, this commit introduces a Rails configuration option: ```ruby config.active_support.halt_callback_chains_on_return_false ``` For new Rails 5.0 apps, this option will be set to `false` by a new initializer `config/initializers/callback_terminator.rb`: ```ruby Rails.application.config.active_support.halt_callback_chains_on_return_false = false ``` For existing apps ported to Rails 5.0, the initializers above will not exist. Even running `rake rails:update` will not create this initializer. Since the default value of `halt_callback_chains_on_return_false` is set to `true`, these apps will still accept `return true` as a way to halt callback chains, displaying a deprecation warning. Developers will be able to switch to the new behavior (and stop the warning) by manually adding the line above to their `config/application.rb`. A gist with the suggested release notes to add to Rails 5.0 after this commit is available at https://gist.github.com/claudiob/614c59409fb7d11f2931
| * | | | Deprecate `false` as the way to halt AM callbacksclaudiob2015-01-023-6/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Before this commit, returning `false` in an ActiveModel `before_` callback such as `before_create` would halt the callback chain. After this commit, the behavior is deprecated: will still work until the next release of Rails but will also display a deprecation warning. The preferred way to halt a callback chain is to explicitly `throw(:abort)`.
| * | | | Deprecate `false` as the way to halt AM validation callbacksclaudiob2015-01-023-6/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Before this commit, returning `false` in an ActiveModel validation callback such as `before_validation` would halt the callback chain. After this commit, the behavior is deprecated: will still work until the next release of Rails but will also display a deprecation warning. The preferred way to halt a callback chain is to explicitly `throw(:abort)`.
| * | | | Throw :abort halts default CallbackChainsclaudiob2015-01-022-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit changes arguments and default value of CallbackChain's :terminator option. After this commit, Chains of callbacks defined **without** an explicit `:terminator` option will be halted as soon as a `before_` callback throws `:abort`. Chains of callbacks defined **with** a `:terminator` option will maintain their existing behavior of halting as soon as a `before_` callback matches the terminator's expectation. For instance, ActiveModel's callbacks will still halt the chain when a `before_` callback returns `false`.
* | | | | Merge branch 'master' of github.com:rails/docrailsVijay Dev2015-01-038-10/+10
|\ \ \ \ \ | |/ / / / |/| | | |
| * | | | Use Active Model, not ActiveModel in plain Englishclaudiob2015-01-028-10/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Also prevents the word "Model" from linking to the documentation of ActiveModel::Model because that's not intended. [ci skip]
* | | | | Update copyright notices to 2015 [ci skip]Arun Agrawal2014-12-312-2/+2
| | | | |
* | | | | Use more semantic method to check passwordRohit Arondekar2014-12-301-1/+1
| | | | |
* | | | | Require Ruby 2.2 for Rails 5.0claudiob2014-12-261-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | Stems from [this comment](https://github.com/rails/rails/pull/18203#issuecomment-68138096) by @robin850 and by the blog post http://weblog.rubyonrails.org/2014/12/19/Rails-4-2-final
* | | | | Don't calculate all in-place changes to determine if attribute_changed?Sean Griffin2014-12-221-1/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Calling `changed_attributes` will ultimately check if every mutable attribute has changed in place. Since this gets called whenever an attribute is assigned, it's extremely slow. Instead, we can avoid this calculation until we actually need it. Fixes #18029
* | | | | Fix inaccurate docs in active_model errors [ci skip]Robson Marques2014-12-221-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The default value for the argument `message` in `ActiveModel::Errors#add` has a new behavior since ca99ab2481d44d67bc392d0ec1125ff1439e9f94. Before person.errors.add(:name, nil) # => ["is invalid"] After person.errors.add(:name, nil) # => [nil]
* | | | | - Fixed unused variableVipul A M2014-12-211-3/+2
|/ / / / | | | | | | | | | | | | - Changed test to verify complete message instead of verifying if message contains text.
* | | | Add AM test: after/around callback returning falseclaudiob2014-12-141-4/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This stems from https://github.com/rails/rails/pull/17227#discussion_r21641358 It's simply a clarification of the current behavior by which if an `after_` or `around_` ActiveModel callback returns +false+, then the callback chain **is not halted**. The callback chain in ActiveModel is only halted when a `before_` callback returns `false`.
* | | | Add AM test for after_validation returning falseclaudiob2014-12-141-2/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This stems from https://github.com/rails/rails/pull/17227#discussion_r21641358 It's simply a clarification of the current behavior by which if an `after_validation` ActiveModel callback returns +false+, then further `after_` callbacks **are not halted**.
* | | | Pass through the `prepend` option to `AS::Callback`Godfrey Chan2014-12-122-2/+38
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I'm not sure what's the use case for this, but apparently it broke some apps. Since it was not the intended result from #16210 I fixed it to not raise an exception anymore. However, I didn't add documentation for it because I don't know if this should be officially supported without knowing how it's meant to be used. In general, validations should be side-effect-free (other than adding to the error message to `@errors`). Order-dependent validations seems like a bad idea. Fixes #18002
* | | | add brackets around attribute_name_tiii2014-12-081-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | since 'attr_name_will_change!' is not an actual method it should be clearer that you have to insert the attribute name as in line 104 [ci skip]
* | | | Correctly handle multiple attribute method prefix/suffixes which matchSean Griffin2014-12-041-6/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Active Record defines `attribute_method_suffix :?`. That suffix will match any predicate method when the lookup occurs in Active Model. This will make it incorrectly decide that `id_changed?` should not exist, because it attempts to determine if the attribute `id_changed` is present, rather than `id` with the `_changed?` suffix. Instead, we will look for any correct match.
* | | | Ensure numericality validations work with mutationSean Griffin2014-12-011-0/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The detection of in-place changes caused a weird unexpected issue with numericality validations. That validator (out of necessity) works on the `_before_type_cast` version of the attribute, since on an `:integer` type column, a non-numeric string would type cast to 0. However, strings are mutable, and we changed strings to ensure that the post type cast version of the attribute was a different instance than the before type cast version (so the mutation detection can work properly). Even though strings are the only mutable type for which a numericality validation makes sense, special casing strings would feel like a strange change to make here. Instead, we can make the assumption that for all mutable types, we should work on the post-type-cast version of the attribute, since all cases which would return 0 for non-numeric strings are immutable. Fixes #17852