1. 15 2月, 2017 1 次提交
  2. 06 2月, 2017 1 次提交
  3. 23 10月, 2016 1 次提交
  4. 03 10月, 2016 1 次提交
  5. 07 8月, 2016 1 次提交
  6. 12 5月, 2016 1 次提交
    • S
      Fix false positive mutation detection when JSON is used with serialize · 6007e584
      Sean Griffin 提交于
      When looking for mutation, we compare the serialized version of the
      value to the before_type_cast form. `Type::Serialized` was breaking this
      contract by passing the already serialized attribute to the subtype's
      mutation detection. This never manifested previously, as all mutable
      subtypes either didn't do anything in their `serialize` method, or had a
      way to detect double serialization (e.g. `is_a?(String)`). However, now
      that JSON types can handle string primitives, we need to avoid double
      serialization.
      
      Fixes #24993.
      6007e584
  7. 25 9月, 2015 1 次提交
    • S
      Clean up the implementation of AR::Dirty · 8e633e50
      Sean Griffin 提交于
      This moves a bit more of the logic required for dirty checking into the
      attribute objects. I had hoped to remove the `with_value_from_database`
      stuff, but unfortunately just calling `dup` on the attribute objects
      isn't enough, since the values might contain deeply nested data
      structures. I think this can be cleaned up further.
      
      This makes most dirty checking become lazy, and reduces the number of
      object allocations and amount of CPU time when assigning a value. This
      opens the door (but doesn't quite finish) to improving the performance
      of writes to a place comparable to 4.1
      8e633e50
  8. 22 9月, 2015 1 次提交
  9. 23 3月, 2015 2 次提交
  10. 18 2月, 2015 2 次提交
  11. 08 2月, 2015 2 次提交
  12. 24 12月, 2014 1 次提交
  13. 14 11月, 2014 1 次提交
  14. 18 9月, 2014 1 次提交
  15. 27 8月, 2014 1 次提交
  16. 01 8月, 2014 1 次提交
  17. 14 6月, 2014 2 次提交
  18. 10 6月, 2014 3 次提交
    • S
      Keep the types of virtual columns after yaml serialization · 47f1c10c
      Sean Griffin 提交于
      On MySQL and PostgreSQL, the adapter does not type cast virtual columns
      for us.
      47f1c10c
    • S
      Rename `type_cast` to `type_cast_from_database` · d24e6407
      Sean Griffin 提交于
      In some cases there is a difference between the two, we should always
      be doing one or the other. For convenience, `type_cast` is still a
      private method on type, so new types that do not need different behavior
      don't need to implement two methods, but it has been moved to private so
      it cannot be used accidentally.
      d24e6407
    • S
      Make `_before_type_cast` actually be before type cast · c93dbfef
      Sean Griffin 提交于
      - The following is now true for all types, all the time
        - `model.attribute_before_type_cast == given_value`
        - `model.attribute == model.save_and_reload.attribute`
        - `model.attribute == model.dup.attribute`
        - `model.attribute == YAML.load(YAML.dump(model)).attribute`
      - Removes the remaining types implementing `type_cast_for_write`
      - Simplifies the implementation of time zone aware attributes
      - Brings tz aware attributes closer to being implemented as an attribute
        decorator
      - Adds additional point of control for custom types
      c93dbfef
  19. 08 6月, 2014 1 次提交
    • S
      Do not type cast twice on attribute assignment · 368cca51
      Sean Griffin 提交于
      The definition of `write_attribute` in dirty checking ultimately leads
      to the columns calling `type_cast` on the value to perform the
      comparison. However, this is a potentially expensive computation that we
      cache when it occurs in `read_attribute`. The only case that we need the
      non-type-cast form is for numeric, so we pass that through as well
      (something I'm looking to remove in the future).
      
      This also reduces the number of places that manually access various
      stages in an attribute's type casting lifecycle, which will aid in one
      of the larger refactorings that I'm working on.
      368cca51
  20. 06 6月, 2014 1 次提交
  21. 03 6月, 2014 1 次提交
  22. 02 6月, 2014 1 次提交
    • S
      Remove most code related to serialized properties · 90c8be76
      Sean Griffin 提交于
      Nearly completely implemented in terms of custom properties.
      `_before_type_cast` now stores the raw serialized string consistently,
      which removes the need to keep track of "state". The following is now
      consistently true:
      
      - `model.serialized == model.reload.serialized`
      - A model can be dumped and loaded infinitely without changing
      - A model can be saved and reloaded infinitely without changing
      90c8be76
  23. 30 5月, 2014 2 次提交