1. 21 11月, 2018 1 次提交
  2. 17 11月, 2018 1 次提交
  3. 13 11月, 2018 1 次提交
  4. 12 11月, 2018 1 次提交
    • R
      Ensure casting by decimal attribute when querying · a741208f
      Ryuta Kamizono 提交于
      Related 34cc301f.
      
      `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.
      a741208f
  5. 07 11月, 2018 2 次提交
  6. 31 10月, 2018 1 次提交
    • S
      `update_columns` raises if the column is unknown · b63701e2
      Sean Griffin 提交于
      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`.
      b63701e2
  7. 29 10月, 2018 1 次提交
  8. 21 10月, 2018 1 次提交
  9. 13 10月, 2018 1 次提交
    • D
      Improve model attribute accessor method names for backtraces · 99c87ad2
      Dylan Thacker-Smith 提交于
      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.
      99c87ad2
  10. 03 10月, 2018 1 次提交
  11. 02 10月, 2018 1 次提交
  12. 29 9月, 2018 1 次提交
    • Y
      Add `Style/RedundantFreeze` to remove redudant `.freeze` · aa3dcabd
      Yasuo Honda 提交于
      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'
      aa3dcabd
  13. 26 9月, 2018 1 次提交
  14. 23 9月, 2018 2 次提交
    • S
      Remove private def · 0fe2bb81
      Sakshi Jain 提交于
      0fe2bb81
    • Y
      Enable `Performance/UnfreezeString` cop · 1b86d901
      yuuji.yaginuma 提交于
      In Ruby 2.3 or later, `String#+@` is available and `+@` is faster than `dup`.
      
      ```ruby
      # frozen_string_literal: true
      
      require "bundler/inline"
      
      gemfile(true) do
        source "https://rubygems.org"
      
        gem "benchmark-ips"
      end
      
      Benchmark.ips do |x|
        x.report('+@') { +"" }
        x.report('dup') { "".dup }
        x.compare!
      end
      ```
      
      ```
      $ ruby -v benchmark.rb
      ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
      Warming up --------------------------------------
                        +@   282.289k i/100ms
                       dup   187.638k i/100ms
      Calculating -------------------------------------
                        +@      6.775M (± 3.6%) i/s -     33.875M in   5.006253s
                       dup      3.320M (± 2.2%) i/s -     16.700M in   5.032125s
      
      Comparison:
                        +@:  6775299.3 i/s
                       dup:  3320400.7 i/s - 2.04x  slower
      
      ```
      1b86d901
  15. 07 9月, 2018 2 次提交
    • Y
      Fix non_numeric_string? · ba406d9c
      Yoshiyuki Kinjo 提交于
      For example, dirty checking was not right for the following case:
      
      ```
      model.int_column = "+5"
      model.float_column = "0.5E+1"
      model.decimal_column = "0.5e-3"
      ```
      
      It is enough to see whether leading character is a digit for avoiding
      invalid numeric expression like 'wibble' to be type-casted to 0, as
      this method's comment says.
      
      Fixes #33801
      ba406d9c
    • R
      Formatting CHANGELOGs [ci skip] · 736edb98
      Ryuta Kamizono 提交于
      Fixing code block rendering, indentation, backticks, etc.
      736edb98
  16. 30 8月, 2018 1 次提交
    • S
      Faster time_value.rb · e81b0ddd
      schneems 提交于
      The multiplication of the value takes a long time when we can instead mutate and use the string value directly.
      
      The `microsec` perf increases speed by 27% in the ideal case (which is the most common).
      
      ```
      original_string = ".443959"
      
      require 'benchmark/ips'
      
      Benchmark.ips do |x|
        x.report("multiply") { 
          string = original_string.dup
          (string.to_r * 1_000_000).to_i 
        }
        x.report("new     ") { 
          string = original_string.dup
          if string && string.start_with?(".".freeze) && string.length == 7
            string[0] = ''.freeze
            string.to_i
          end
        }
        x.compare!
      end
      
      # Warming up --------------------------------------
      #             multiply   125.783k i/100ms
      #             new        146.543k i/100ms
      # Calculating -------------------------------------
      #             multiply      1.751M (± 3.3%) i/s -      8.805M in   5.033779s
      #             new           2.225M (± 2.1%) i/s -     11.137M in   5.007110s
      
      # Comparison:
      #             new     :  2225289.7 i/s
      #             multiply:  1751254.2 i/s - 1.27x  slower
      ```
      e81b0ddd
  17. 23 8月, 2018 1 次提交
    • R
      Fix numericality validator to still use value before type cast except Active Record · 47a6d788
      Ryuta Kamizono 提交于
      The purpose of fe9547b6 is to work type casting to value from database.
      
      But that was caused not to use the value before type cast even except
      Active Record.
      
      There we never guarantees that the value before type cast was going to
      the used in this validation, but we should not change the behavior
      unless there is some particular reason.
      
      To restore original behavior, still use the value before type cast if
      `came_from_user?` is undefined (i.e. except Active Record).
      
      Fixes #33651.
      Fixes #33686.
      47a6d788
  18. 16 8月, 2018 1 次提交
  19. 15 8月, 2018 1 次提交
  20. 13 8月, 2018 1 次提交
    • R
      Fix numericality validator not to be affected by custom getter · 2fece903
      Ryuta Kamizono 提交于
      Since fe9547b6, numericality validator would parse raw value only when a
      value came from user to work type casting to a value from database.
      
      But that was caused a regression that the validator would work against
      getter value instead of parsed raw value, a getter is sometimes
      customized by people. #33550
      
      There we never guarantees that the value before type cast was going to
      the used in this validation (actually here is only place that getter
      value might not be used), but we should not change the behavior unless
      there is some particular reason.
      
      The purpose of fe9547b6 is to work type casting to a value from
      database. We could achieve the purpose by using `read_attribute`,
      without using getter value.
      
      Fixes #33550.
      2fece903
  21. 12 8月, 2018 2 次提交
    • B
      Add changelog entry for #31503 [ci skip] · 159dc60b
      bogdanvlviv 提交于
      Related to #31503
      159dc60b
    • B
      Fix test failure · 3a0a8cf6
      bogdanvlviv 提交于
      ```
      ...
      (snip)
      ............F
      Failure:
      JsonSerializationTest#test_as_json_should_return_a_hash_if_include_root_
      in_json_is_true [/home/travis/build/rails/rails/activemodel/test/cases/serializers/json_serialization_test.rb:145]:
      Expected: 2006-08-01 00:00:00 UTC
        Actual: "2006-08-01T00:00:00.000Z"
      rails test home/travis/build/rails/rails/activemodel/test/cases/serializers/json_serialization_test.rb:136
      (snip)
      ...
      ```
      
      Related to #31503
      3a0a8cf6
  22. 30 7月, 2018 1 次提交
  23. 24 7月, 2018 1 次提交
  24. 23 7月, 2018 1 次提交
  25. 15 7月, 2018 1 次提交
  26. 08 7月, 2018 1 次提交
  27. 07 7月, 2018 1 次提交
    • B
      Improve `SecurePasswordTest#test_authenticate` · 382b5ca7
      bogdanvlviv 提交于
      - Ensure that execution of `authenticate`/`authenticate_XXX` returns
      `self` if password is correct, otherwise `false` (as mentioned in the documentation).
      - Test `authenticate_password`.
      382b5ca7
  28. 05 7月, 2018 1 次提交
    • C
      Shorter code: remove unnecessary condition · 0cd36e2b
      claudiob 提交于
      See https://github.com/rails/rails/commit/136fc65c9b8b66e1fb56f3a17f0d1fddff9b4bd0#r28897107
      
       I _think_ that this method can now be rewritten from:
      
      ```ruby
      def attribute_previous_change(attr)
        previous_changes[attr] if attribute_previously_changed?(attr)
      end
      ```
      
      to:
      
      ```ruby
      def attribute_previous_change(attr)
        previous_changes[attr]
      end
      ```
      
      without losing performance.
      
      ---
      
      Calling
      
      ```ruby
      previous_changes[attr] if attribute_previously_changed?(attr)
      ```
      
      is equivalent to calling
      
      ```ruby
      previous_changes[attr] if previous_changes.include?(attr)
      ```
      
      When this commit 136fc65c was made, Active Record had its own `previous_changes` method, added here below. However, that method has been recently removed from the codebase, so `previous_changes` is now only the method defined in Active Model as:
      
      ```ruby
      def previous_changes
        @previously_changed ||= ActiveSupport::HashWithIndifferentAccess.new
        @previously_changed.merge(mutations_before_last_save.changes)
      end
      ```
      
      Since we are dealing with a memoized Hash, there is probably no need to check `if .include?(attr_name)` before trying to fetch `[attr]` for it.
      
      Does that make sense? Did I miss anything? Thanks!
      0cd36e2b
  29. 30 6月, 2018 1 次提交
  30. 12 6月, 2018 2 次提交
  31. 06 6月, 2018 2 次提交
  32. 29 5月, 2018 1 次提交
    • R
      Ensure casting by boolean attribute when querying · 34cc301f
      Ryuta Kamizono 提交于
      `QueryAttribute#value_for_database` calls only `type.serialize`, and
      `Boolean#serialize` is a no-op unlike other attribute types.
      
      It caused the issue #32624. 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.
      
      Fixes #32624.
      34cc301f
  33. 28 5月, 2018 1 次提交
  34. 25 5月, 2018 1 次提交