1. 18 12月, 2017 1 次提交
    • S
      Return correct date in ActiveModel for time to date conversions · eb73dfc0
      Sayan Chakraborty 提交于
      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
      eb73dfc0
  2. 15 12月, 2017 1 次提交
    • Y
      Suppress `warning: BigDecimal.new is deprecated` in Active Model · bd4211ea
      Yasuo Honda 提交于
      `BigDecimal.new` has been deprecated in BigDecimal 1.3.3
       which will be a default for Ruby 2.5.
      
      Refer ruby/bigdecimal@5337373
      
      * This commit has been made as follows:
      
      ```ruby
      $ cd activemodel/
      $ git grep -l BigDecimal.new | grep \.rb | xargs sed -i -e "s/BigDecimal.new/BigDecimal/g"
      ```
      
      * This commit has been tested with these Ruby versions:
      
      ```
      ruby 2.5.0dev (2017-12-15 trunk 61262) [x86_64-linux]
      ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-linux]
      ruby 2.3.5p376 (2017-09-14 revision 59905) [x86_64-linux]
      ruby 2.2.8p477 (2017-09-14 revision 59906) [x86_64-linux]
      ```
      bd4211ea
  3. 13 12月, 2017 1 次提交
  4. 10 12月, 2017 1 次提交
  5. 29 11月, 2017 2 次提交
  6. 28 11月, 2017 2 次提交
    • S
      Change how `AttributeSet::Builder` receives its defaults · 95b86e57
      Sean Griffin 提交于
      There are two concerns which are both being combined into one here, but
      both have the same goal. There are certain attributes which we want to
      always consider initialized. Previously, they were handled separately.
      The primary key (which is assumed to be backed by a database column)
      needs to be initialized, because there is a ton of code in Active Record
      that assumes `foo.id` will never raise. Additionally, we want attributes
      which aren't backed by a database column to always be initialized, since
      we would never receive a database value for them.
      
      Ultimately these two concerns can be combined into one. The old
      implementation hid a lot of inherent complexity, and is hard to optimize
      from the outside. We can simplify things significantly by just passing
      in a hash.
      
      This has slightly different semantics from the old behavior, in that
      `Foo.select(:bar).first.id` will return the default value for the
      primary key, rather than `nil` unconditionally -- however, the default
      value is always `nil` in practice.
      95b86e57
    • R
      Preparing for 5.2.0.beta1 release · cceeeb6e
      Rafael Mendonça França 提交于
      cceeeb6e
  7. 14 11月, 2017 1 次提交
  8. 11 11月, 2017 1 次提交
    • R
      Add missing autoload `Type` (#31123) · 24b59434
      Ryuta Kamizono 提交于
      Attribute modules (`Attribute`, `Attributes`, `AttributeSet`) uses
      `Type`, but referencing `Type` before the modules still fail.
      
      ```
      % ./bin/test -w test/cases/attribute_test.rb -n test_with_value_from_user_validates_the_value
      Run options: -n test_with_value_from_user_validates_the_value --seed 31876
      
      E
      
      Error:
      ActiveModel::AttributeTest#test_with_value_from_user_validates_the_value:
      NameError: uninitialized constant ActiveModel::AttributeTest::Type
          /Users/kamipo/src/github.com/rails/rails/activemodel/test/cases/attribute_test.rb:233:in `block in <class:AttributeTest>'
      
      bin/test test/cases/attribute_test.rb:232
      
      Finished in 0.002985s, 335.0479 runs/s, 335.0479 assertions/s.
      1 runs, 1 assertions, 0 failures, 1 errors, 0 skips
      ```
      
      Probably we need more autoloading at least `Type`.
      24b59434
  9. 10 11月, 2017 6 次提交
  10. 07 11月, 2017 1 次提交
  11. 06 11月, 2017 1 次提交
  12. 26 10月, 2017 1 次提交
  13. 24 10月, 2017 1 次提交
  14. 21 10月, 2017 1 次提交
  15. 19 10月, 2017 1 次提交
    • L
      Start bringing attributes API to AM · 7e9ded51
      Lisa Ugray 提交于
      This is the first PR of a WIP to bring the attributes API to
      ActiveModel.  It is not yet ready for public API.
      
      The `attributes_dirty_test.rb` file was created based on `dirty_test.rb`,
      and the simplifications in the diff do much to motivate this change.
      
      ```
      diff activemodel/test/cases/dirty_test.rb activemodel/test/cases/attributes_dirty_test.rb
      3a4
      > require "active_model/attributes"
      5c6
      < class DirtyTest < ActiveModel::TestCase
      ---
      > class AttributesDirtyTest < ActiveModel::TestCase
      7,41c8,12
      <     include ActiveModel::Dirty
      <     define_attribute_methods :name, :color, :size
      <
      <     def initialize
      <       @name = nil
      <       @color = nil
      <       @size = nil
      <     end
      <
      <     def name
      <       @name
      <     end
      <
      <     def name=(val)
      <       name_will_change!
      <       @name = val
      <     end
      <
      <     def color
      <       @color
      <     end
      <
      <     def color=(val)
      <       color_will_change! unless val == @color
      <       @color = val
      <     end
      <
      <     def size
      <       @size
      <     end
      <
      <     def size=(val)
      <       attribute_will_change!(:size) unless val == @size
      <       @size = val
      <     end
      ---
      >     include ActiveModel::Model
      >     include ActiveModel::Attributes
      >     attribute :name, :string
      >     attribute :color, :string
      >     attribute :size, :integer
      ```
      7e9ded51
  16. 01 9月, 2017 1 次提交
    • M
      Clarify intentions around method redefinitions · 2e6658ae
      Matthew Draper 提交于
      Don't use remove_method or remove_possible_method just before a new
      definition: at best the purpose is unclear, and at worst it creates a
      race condition.
      
      Instead, prefer redefine_method when practical, and
      silence_redefinition_of_method otherwise.
      2e6658ae
  17. 27 8月, 2017 1 次提交
  18. 22 8月, 2017 1 次提交
  19. 18 8月, 2017 1 次提交
    • V
      Simplify ActiveModel::Errors#generate_message · 53c98196
      Viktar Basharymau 提交于
      Besides making the code easier to read, this commit
      also makes it faster:
      
      * We don't eval `@base.class.respond_to?(:i18n_scope)` twice
      * We only eval `@base.class.i18n_scope` once
      * We don't call `flatten!` because it's not needed anymore
      * We don't call `compact` because all elements are Symbols
      53c98196
  20. 08 8月, 2017 1 次提交
  21. 01 8月, 2017 1 次提交
  22. 17 7月, 2017 2 次提交
    • S
      Allow multiparameter assigned attributes to be used with `text_field` · 1519e976
      Sean Griffin 提交于
      Between 4.2 and 5.0 the behavior of how multiparameter attributes
      interact with `_before_type_cast` changed. In 4.2 it returns the
      post-type-cast value. After 5.0, it returns the hash that gets sent to
      the type. This behavior is correct, but will cause an issue if you then
      tried to render that value in an input like `text_field` or
      `hidden_field`.
      
      In this case, we want those fields to use the post-type-cast form,
      instead of the `_before_type_cast` (the main reason it uses
      `_before_type_cast` at all is to avoid losing data when casting a
      non-numeric string to integer).
      
      I've opted to modify `came_from_user?` rather than introduce a new
      method for this as I want to avoid complicating that contract further,
      and technically the multiparameter hash didn't come from assignment, it
      was constructed internally by AR.
      
      Close #27888.
      1519e976
    • K
      Use frozen string literal in activemodel/ · d7b1521d
      Kir Shatrov 提交于
      d7b1521d
  23. 14 7月, 2017 2 次提交
  24. 08 7月, 2017 1 次提交
    • J
      Add ActiveModel::Errors#merge! · 3650ca98
      Jahfer Husain 提交于
      ActiveModel::Errors#merge! allows ActiveModel::Errors to append errors from
      a separate ActiveModel::Errors instance onto their own.
      
      Example:
      
          person = Person.new
          person.errors.add(:name, :blank)
      
          errors = ActiveModel::Errors.new(Person.new)
          errors.add(:name, :invalid)
      
          person.errors.merge!(errors)
          puts person.errors.messages
          # => { name: ["can't be blank", "is invalid"] }
      3650ca98
  25. 06 7月, 2017 1 次提交
  26. 02 7月, 2017 1 次提交
  27. 01 7月, 2017 2 次提交
  28. 28 6月, 2017 2 次提交
  29. 21 6月, 2017 1 次提交