aboutsummaryrefslogtreecommitdiffstats
path: root/activemodel/lib
Commit message (Collapse)AuthorAgeFilesLines
* Set default array to detailslulalala2019-03-311-1/+9
| | | | maintaining behavior errors.details[:foo].any?
* Fix messages[]= does not override valuelulalala2019-03-311-0/+1
|
* Freeze DeprecationHandling array and hashlulalala2019-03-311-13/+20
|
* Fix equality comparison raising error buglulalala2019-03-311-1/+1
|
* Fix speclulalala2019-03-311-1/+1
|
* Split messages and to_hashlulalala2019-03-311-18/+21
| | | | | | Fix double wrapping issue Revert messages_for wrapping. It's a new method so no need to put deprecation warnings.
* Raise deprecation for calling `[:f] = 'b'` or `[:f] << 'b'`lulalala2019-03-311-4/+46
| | | | Revert some tests to ensure back compatibility
* Add deprecation to slice!lulalala2019-03-311-0/+2
|
* Nested attribute error's attribute name to use different key:lulalala2019-03-311-1/+1
| | | | To keep the same as SHA dcafe995bfe51e53dd04607956be9b54073e9cb6
* String override options in #import to convert to symbollulalala2019-03-311-0/+5
|
* Allow errors to remove duplicates, and ensure cyclic associations w/ ↵lulalala2019-03-312-1/+16
| | | | | autosave duplicate errors can be removed See SHA 7550f0a016ee6647aaa76c0c0ae30bebc3867288
* Add messages_forlulalala2019-03-311-1/+7
|
* Add a transitional method `objects`, for accessing the array directly.lulalala2019-03-311-0/+1
| | | | This is because we try to accommodate old hash behavior, so `first` and `last` now does not return Error object.
* Backward compatibility for errors.collect/select etc.lulalala2019-03-311-2/+2
| | | | | All enumerable methods must go through the `each` so it retain old hash behavior. Revert this after Rails 6.1 in order to speed up enumerable methods.
* Add convenience method group_by_attributelulalala2019-03-311-20/+9
| | | | | | Many operations need grouping of errors by attributes, e.g. ActiveRecord::AutosaveAssociation#association_valid? Refactor other methods using group_by_attribute
* Change errorslulalala2019-03-312-109/+190
| | | | | | | | | | | | Allow `each` to behave in new way if block arity is 1 Ensure dumped marshal from Rails 5 can be loaded Make errors compatible with marshal and YAML dumps from previous versions of Rails Add deprecation warnings Ensure each behave like the past, sorted by attribute
* Add ActiveModel::Error and NestedErrorlulalala2019-03-313-16/+93
| | | | | | | Add initialize_dup to deep dup. Move proc eval and flexible message position out to Errors, because proc eval is needed for Errors#added? and Errors#delete
* Merge pull request #35794 from kamipo/type_cast_symbol_falseRyuta Kamizono2019-03-301-1/+10
|\ | | | | Type cast falsy boolean symbols on boolean attribute as false
| * Type cast falsy boolean symbols on boolean attribute as falseRyuta Kamizono2019-03-301-1/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Before 34cc301, type casting by boolean attribute when querying is a no-op, so finding by truthy boolean string (i.e. `where(value: "true") # => value = 'true'`) didn't work as expected (matches it to FALSE in MySQL #32624). By type casting is ensured, a value on boolean attribute is always serialized to TRUE or FALSE. In PostgreSQL, `where(value: :false) # => value = 'false'` was a valid SQL, so 34cc301 is a regresson for PostgreSQL since all symbol values are serialized as TRUE. I'd say using `:false` is mostly a developer's mistake (user's input basically comes as a string), but `:false` on boolean attribute is serialized as TRUE is not a desirable behavior for anybody. This allows falsy boolean symbols as false, i.e. `klass.create(value: :false).value? # => false` and `where(value: :false) # => value = FALSE`. Fixes #35676.
* | Rename `i18n_full_message` config option to `i18n_customize_full_message`Prathamesh Sonpatki2019-03-292-5/+5
|/ | | | | | - I feel `i18n_customize_full_messages` explains the meaning of the config better. - Followup of https://github.com/rails/rails/pull/32956
* Merge tag 'v6.0.0.beta3'eileencodes2019-03-131-1/+1
|\ | | | | | | v6.0.0.beta3 release
| * Prep releaseeileencodes2019-03-111-1/+1
| | | | | | | | | | | | | | * Update RAILS_VERSION * Bundle * rake update_versions * rake changelog:header
* | Fall back to parent locale before it falls back to the :errors namespaceHugo Vacher2019-03-041-9/+14
|/
* Preparing for 6.0.0.beta2 releaseRafael Mendonça França2019-02-251-1/+1
|
* Merge pull request #35336 from ↵Ryuta Kamizono2019-02-212-8/+9
|\ | | | | | | | | kamipo/dont_allow_non_numeric_string_matches_to_zero Don't allow `where` with non numeric string matches to 0 values
| * Don't allow `where` with non numeric string matches to 0 valuesRyuta Kamizono2019-02-202-8/+9
| | | | | | | | | | | | | | | | | | | | | | | | This is a follow-up of #35310. Currently `Topic.find_by(id: "not-a-number")` matches to a `id = 0` record. That is considered as silently leaking information. If non numeric string is given to find by an integer column, it should not be matched to any record. Related #12793.
* | Revert "Speed up integer casting from DB"Ryuta Kamizono2019-02-211-5/+0
|/ | | | | | | | | | | This reverts commit 52fddcc653458456f98b3683dffd781cf00b35fe. 52fddcc was to short-circuit `ensure_in_range` in `cast_value`. But that caused a regression for empty string deserialization. Since 7c6f393, `ensure_in_range` is moved into `serialize`. As 52fddcc said, the absolute gain is quite small. So I've reverted that commit to fix the regression.
* Don't allow `where` with invalid value matches to nil valuesRyuta Kamizono2019-02-181-4/+0
| | | | | | | | | That is considered as silently leaking information. If type casting doesn't return any actual value, it should not be matched to any record. Fixes #33624. Closes #33946.
* Merge pull request #29651 from Sayanc93/return-correct-dateRyuta Kamizono2019-02-181-1/+1
|\ | | | | | | Return correct date in ActiveModel for time to date conversions
| * Return correct date in ActiveModel for time to date conversionsSayan Chakraborty2017-12-171-1/+13
| | | | | | | | | | | | | | time.to_date conversion happens considering leap years so a conversion of "Day.new({'day(1i)'=>'1', 'day(2i)'=>'1', 'day(3i)'=>'1'})" results in saving the date as Mon, 03 Jan 0001 which might seem weird on the user level, hence falling back to parsing on string level resolves this data mismatch Fixes #28521
* | Extract duplicated `serialize` methods into helpersRyuta Kamizono2019-02-188-21/+14
| | | | | | | | | | | | | | | | Since `serialize` is passed user input args (from `where`, schema default, etc), a helper should provide `serialize` if the helper also provide `cast`. Related #32624, 34cc301, a741208.
* | Fix type cast with values hash for Date typeRyuta Kamizono2019-02-186-12/+23
| | | | | | | | | | | | | | | | `value_from_multiparameter_assignment` defined by `AcceptsMultiparameterTime` helper requires `default_timezone` method which is defined at `TimeValue` helper. Since `Date` type doesn't include `TimeValue`, I've extracted `Timezone` helper to be shared by `Date`, `DateTime`, and `Time` types.
* | activemodel typo fixes.alkesh262019-01-311-1/+1
| |
* | Add missing require for `Float#to_d`yuuji.yaginuma2019-01-261-0/+2
| | | | | | | | | | | | | | In master, tests pass because `bigdecimal/util` requires in `active_support/xml_mini`. But test fails in 5-2-stable because that require does not exist. Ref: https://travis-ci.org/rails/rails/jobs/484627996#L1969
* | Fix NumericalityValidator on object responding to `to_f`:Edouard CHIN2019-01-221-8/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - If you had a PORO that acted like a Numeric, the validator would work correctly because it was previously using `Kernel.Float` which is implicitely calling `to_f` on the passed argument. Since rails/rails@d126c0d , we are now using `BigDecimal` which does not implicitely call `to_f` on the argument, making the validator fail with an underlying `TypeError` exception. This patch replate the `is_decimal?` check with `Kernel.Float`. Using `Kernel.Float` as argument for the BigDecimal call has two advantages: 1. It calls `to_f` implicetely for us. 2. It's also smart enough to detect that `Kernel.Float("a")` isn't a Numeric and will raise an error. We don't need the `is_decimal?` check thanks to that. Passing `Float::DIG` as second argument to `BigDecimal` is mandatory because the precision can't be omitted when passing a Float. `Float::DIG` is what is used internally by ruby when calling `123.to_d` https://github.com/ruby/ruby/blob/trunk/ext/bigdecimal/lib/bigdecimal/util.rb#L47 - Another small issue introduced in https://github.com/rails/rails/pull/34693 would now raise a TypeError because `Regexp#===` will just return false if the passed argument isn't a string or symbol, whereas `Regexp#match?` will.
* | Fix year value when casting a multiparameter time hashAndrew White2019-01-211-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When assigning a hash to a time attribute that's missing a year component (e.g. a `time_select` with `:ignore_date` set to `true`) then the year defaults to 1970 instead of the expected 2000. This results in the attribute changing as a result of the save. Before: event = Event.new(start_time: { 4 => 20, 5 => 30 }) event.start_time # => 1970-01-01 20:30:00 UTC event.save event.reload event.start_time # => 2000-01-01 20:30:00 UTC After: event = Event.new(start_time: { 4 => 20, 5 => 30 }) event.start_time # => 2000-01-01 20:30:00 UTC event.save event.reload event.start_time # => 2000-01-01 20:30:00 UTC
* | Preparing for 6.0.0.beta1 releaseRafael Mendonça França2019-01-181-1/+1
| |
* | Require hash/keys inside active_model/callbacksRafael Mendonça França2019-01-161-0/+1
| | | | | | | | | | | | | | | | | | This file uses assert_valid_keys but it was not being required. You can reproduce this error with a script that uses this feature by using those requires: require 'active_model' require 'active_model/callbacks'
* | Add `ActiveModel::Errors#of_kind?`bogdanvlviv2019-01-041-9/+30
| | | | | | | | Related to https://github.com/rails/rails/pull/34817#issuecomment-451508668
* | Bump license years for 2019Arun Agrawal2018-12-311-1/+1
| |
* | Module#{attr,attr_accessor,attr_reader,attr_writer} become public since Ruby 2.5Ryuta Kamizono2018-12-213-5/+5
| | | | | | | | https://bugs.ruby-lang.org/issues/14132
* | Module#{define_method,alias_method,undef_method,remove_method} become public ↵Ryuta Kamizono2018-12-211-2/+2
| | | | | | | | | | | | since Ruby 2.5 https://bugs.ruby-lang.org/issues/14133
* | Use native `Array#append`, `Array#prepend`, `Hash#transform_keys`, and ↵Ryuta Kamizono2018-12-201-2/+0
| | | | | | | | | | | | | | | | | | | | `Hash#transform_keys!` Since Rails 6 requires Ruby 2.5. https://github.com/ruby/ruby/blob/ruby_2_5/NEWS Follow up #34754.
* | Merge pull request #30973 from k0kubun/prefer-block-parameterRyuta Kamizono2018-12-201-10/+2
|\ \ | | | | | | Unify _read_attribute definition to use &block
| * | Unify _read_attribute definition to use &blockTakashi Kokubun2018-12-201-10/+2
| | | | | | | | | | | | | | | | | | | | | | | | Thanks to ko1, passing block parameter to another method is significantly optimized in Ruby 2.5. https://bugs.ruby-lang.org/issues/14045 Thus we no longer need to keep this ugly hack.
* | | Prevent infinit method_missing loop on attribute methodsRyuta Kamizono2018-12-151-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If a klass has acceptance validation and then `klass.undefine_attribute_methods` is happened before an attribute method is called, infinit loop is caused on the `method_missing` defined by the `LazilyDefineAttributes`. https://travis-ci.org/rails/rails/jobs/467053984#L1409 To prevent the infinit loop, the `method_missing` should ensure `klass.define_attribute_methods`.
* | | Merge pull request #34693 from ahorek/matchRyuta Kamizono2018-12-131-3/+3
|\ \ \ | | | | | | | | | | | | [perf] use #match?
| * | | use match?pavel2018-12-121-3/+3
|/ / /
* | | Fix numericality equality validation on floatsGannon McGibbon2018-12-121-10/+22
| | |
* | | Do not use deprecated Object#!~ in Ruby 2.6Rafael Mendonça França2018-11-261-1/+5
| | | | | | | | | | | | Closes #34530.