1. 28 11月, 2017 1 次提交
  2. 14 11月, 2017 1 次提交
  3. 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
  4. 10 11月, 2017 6 次提交
  5. 07 11月, 2017 1 次提交
  6. 06 11月, 2017 1 次提交
  7. 26 10月, 2017 1 次提交
  8. 24 10月, 2017 1 次提交
  9. 21 10月, 2017 1 次提交
  10. 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
  11. 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
  12. 27 8月, 2017 1 次提交
  13. 22 8月, 2017 1 次提交
  14. 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
  15. 08 8月, 2017 1 次提交
  16. 01 8月, 2017 1 次提交
  17. 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
  18. 14 7月, 2017 2 次提交
  19. 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
  20. 06 7月, 2017 1 次提交
  21. 02 7月, 2017 1 次提交
  22. 01 7月, 2017 2 次提交
  23. 28 6月, 2017 2 次提交
  24. 21 6月, 2017 1 次提交
  25. 20 6月, 2017 1 次提交
  26. 15 6月, 2017 1 次提交
  27. 14 6月, 2017 3 次提交
  28. 31 5月, 2017 1 次提交
  29. 30 5月, 2017 1 次提交