aboutsummaryrefslogtreecommitdiffstats
path: root/activemodel
Commit message (Collapse)AuthorAgeFilesLines
* Preparing for 6.0.0.beta2 releaseRafael Mendonça França2019-02-252-1/+3
|
* activemodel typo fix.alkesh262019-02-251-3/+3
|
* Merge pull request #35336 from ↵Ryuta Kamizono2019-02-213-8/+17
|\ | | | | | | | | 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-203-8/+17
| | | | | | | | | | | | | | | | | | | | | | | | 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-212-6/+1
|/ | | | | | | | | | | 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-183-2/+30
|\ | | | | | | Return correct date in ActiveModel for time to date conversions
| * Return correct date in ActiveModel for time to date conversionsSayan Chakraborty2017-12-173-2/+40
| | | | | | | | | | | | | | 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-187-13/+27
| | | | | | | | | | | | | | | | `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.
* | Add edge test cases for integer and string typesRyuta Kamizono2019-02-172-0/+15
| |
* | activemodel typo fixes.alkesh262019-01-312-2/+2
| |
* | 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-222-8/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - 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-213-1/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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-182-1/+3
| |
* | 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'
* | Revert "Revert "Merge pull request #34387 from ↵Kasper Timm Hansen2019-01-081-0/+3
| | | | | | | | | | | | | | | | yhirano55/rails_info_properties_json"" I reverted the wrong commit. Damn it. This reverts commit f66a977fc7ae30d2a07124ad91924c4ee638a703.
* | Revert "Merge pull request #34387 from yhirano55/rails_info_properties_json"Kasper Timm Hansen2019-01-081-3/+0
| | | | | | | | | | | | | | | | | | | | | | We had a discussion on the Core team and we don't want to expose this information as a JSON endpoint and not by default. It doesn't make sense to expose this JSON locally and this controller is only accessible in dev, so the proposed access from a production app seems off. This reverts commit 8eaffe7e89719ac62ff29c2e4208cfbeb1cd1c38, reversing changes made to b6e4305c3bca4c673996d0af9db0f4cfbf50215e.
* | Add `ActiveModel::Errors#of_kind?`bogdanvlviv2019-01-043-10/+113
| | | | | | | | Related to https://github.com/rails/rails/pull/34817#issuecomment-451508668
* | Bump license years for 2019Arun Agrawal2018-12-312-2/+2
| |
* | Enable `Style/RedundantBegin` cop to avoid newly adding redundant begin blockRyuta Kamizono2018-12-214-106/+84
| | | | | | | | | | | | | | | | | | | | Currently we sometimes find a redundant begin block in code review (e.g. https://github.com/rails/rails/pull/33604#discussion_r209784205). I'd like to enable `Style/RedundantBegin` cop to avoid that, since rescue/else/ensure are allowed inside do/end blocks in Ruby 2.5 (https://bugs.ruby-lang.org/issues/12906), so we'd probably meets with that situation than before.
* | 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-213-8/+8
| | | | | | | | | | | | 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.
* | | Require Ruby 2.5 for Rails 6.Kasper Timm Hansen2018-12-192-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Generally followed the pattern for https://github.com/rails/rails/pull/32034 * Removes needless CI configs for 2.4 * Targets 2.5 in rubocop * Updates existing CHANGELOG entries for fewer merge conflicts * Removes Hash#slice extension as that's inlined on Ruby 2.5. * Removes the need for send on define_method in MethodCallAssertions.
* | | 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-123-10/+34
| | |
* | | Do not use deprecated Object#!~ in Ruby 2.6Rafael Mendonça França2018-11-261-1/+5
| | | | | | | | | | | | Closes #34530.
* | | Add slice! method to ActiveModel::ErrorsDaniel Lopez Prat2018-11-213-0/+39
| | |
* | | Re-add changes_applied docGannon McGibbon2018-11-161-1/+3
| | | | | | | | | | | | [ci skip]
* | | Merge pull request #34417 from r3trofitted/fix/added_options_checkRafael França2018-11-132-3/+13
|\ \ \ | | | | | | | | Fix ignored options in the `#added?` method
| * | | Fix ignored options in the `#added?` methodRonan Limon Duparcmeur2018-11-132-3/+13
| | | | | | | | | | | | | | | | Fixes #34416
* | | | Ensure casting by decimal attribute when queryingRyuta Kamizono2018-11-121-0/+4
|/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | Related 34cc301f03aea2e579d6687a9ea9782afc1089a0. `QueryAttribute#value_for_database` calls only `type.serialize`, and `Decimal#serialize` is a no-op unlike other attribute types. Whether or not `serialize` will invoke `cast` is undefined in our test cases, but it actually does not work properly unless it does so for now.
* | | Amend CVE note and security guide section wordingsGannon McGibbon2018-11-061-3/+3
| | | | | | | | | | | | | | | | | | | | | Reword first sentence of dep management and CVE section of security guide. Also, reword and move gemspec notes above deps. [ci skip]
* | | Add CVE note to security guide and gemspecsGannon McGibbon2018-11-061-0/+3
| | | | | | | | | | | | [ci skip]
* | | `update_columns` raises if the column is unknownSean Griffin2018-10-301-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | Previosly, `update_columns` would just take whatever keys you gave it and tried to run the update query. Most likely this would result in an error from the database. However, if the column actually did exist, but was in `ignored_columns`, this would result in the method returning successfully when it should have raised, and an attribute that should not exist written to `@attributes`.
* | | Fix grammar in changed? docs [ci skip]Alberto Almagro2018-10-281-1/+1
| | | | | | | | | | | | See https://english.stackexchange.com/questions/23218/anyone-has-or-anyone-have-seen-them
* | | Add new exception message to datetime from hash castwilddima2018-10-212-3/+14
| | |
* | | Improve model attribute accessor method names for backtracesDylan Thacker-Smith2018-10-122-22/+48
| | | | | | | | | | | | | | | | | | | | | | | | Ruby uses the original method name, so will show the __temp__ method name in the backtrace. However, in the common case the method name is compatible with the `def` keyword, so we can avoid the __temp__ method name in that case to improve the name shown in backtraces or TracePoint#method_id.
* | | Fix call sitesGannon McGibbon2018-10-021-1/+1
| | |
* | | Fix spellings for 'unmarshall(ing/ed)' & 'marshall(ing/ed)'Sharang Dashputre2018-10-021-1/+1
| | |
* | | Add `Style/RedundantFreeze` to remove redudant `.freeze`Yasuo Honda2018-09-297-8/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since Rails 6.0 will support Ruby 2.4.1 or higher `# frozen_string_literal: true` magic comment is enough to make string object frozen. This magic comment is enabled by `Style/FrozenStringLiteralComment` cop. * Exclude these files not to auto correct false positive `Regexp#freeze` - 'actionpack/lib/action_dispatch/journey/router/utils.rb' - 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb' It has been fixed by https://github.com/rubocop-hq/rubocop/pull/6333 Once the newer version of RuboCop released and available at Code Climate these exclude entries should be removed. * Replace `String#freeze` with `String#-@` manually if explicit frozen string objects are required - 'actionpack/test/controller/test_case_test.rb' - 'activemodel/test/cases/type/string_test.rb' - 'activesupport/lib/active_support/core_ext/string/strip.rb' - 'activesupport/test/core_ext/string_ext_test.rb' - 'railties/test/generators/actions_test.rb'
* | | Merge pull request #30676 from artofhuman/import-assert-attrs-error-messageRafael França2018-09-262-2/+4
|\ \ \ | | | | | | | | Improve error message when assign wrong attributes to model
| * | | Improve error message when assign wrong attributes to modelSemyon Pupkov2018-04-282-2/+4
| | | |
* | | | Change the empty block style to have space inside of the blockRafael Mendonça França2018-09-251-1/+1
| | | |