| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|\ \ \ \ \
| |_|/ / /
|/| | | | |
Add test cases for Migration#inverse_of
|
| | |_|/
| |/| | |
|
|\ \ \ \
| | | | |
| | | | | |
Don't assume that Hstore columns have always changed
|
| | |/ /
| |/| |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
HStore columns come back from the database separated by a comma and a
space, not just a comma. We need to mirror that behavior since we
compare the two values.
Also adds a regression test against JSON to ensure we don't have the
same bug there.
|
|/ / /
| | |
| | |
| | |
| | |
| | | |
We no longer need to "init changed attributes" from the initializer,
either, as there is no longer a case where a given value would differ
from the default, but would not already be marked as changed.
|
| |/
|/| |
|
| | |
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This refactoring revealed the need for another form of decoration, which
takes a proc to select which it applies to (There's a *lot* of cases
where this form can be used). To avoid duplication, we can re-implement
the old decoration in terms of the proc-based decoration.
The reason we're `instance_exec`ing the matcher is for cases such as
time zone aware attributes, where a decorator is defined in a parent
class, and a method called in the matcher is overridden by a child
class. The matcher will close over the parent, and evaluate in its
context, which is not the behavior we want.
|
|\ \
| | |
| | | |
Refactor application of type decorators into an object
|
| | | |
|
|/ / |
|
| | |
|
|\ \
| | |
| | | |
Skip migration check if adapter doesn't support it
|
| | | |
|
|\ \ \
| | | |
| | | | |
[ci skip] /mysql/i -> MySQL, Spell correct in continuation to #15555
|
| | | | |
|
|\ \ \ \
| | | | |
| | | | | |
[ci skip] Use `an` for SQL
|
| |/ / / |
|
| |_|/
|/| |
| | |
| | | |
to "without replacement"
|
|/ /
| |
| |
| |
| | |
We've stopped using it internally, in favor of polymorphism. So should
you!
|
| |
| |
| |
| | |
Fixes #15705.
|
|\ \
| | |
| | | |
Remove `serialized?` from the type interface
|
| | | |
|
|\ \ \
| | | |
| | | | |
Open extension point for defining options in build_through_record
|
| | | |
| | | |
| | | |
| | | | |
This fixes #15496
|
|\ \ \ \
| | | | |
| | | | | |
Remove unused `method_missing` definition
|
| | | | |
| | | | |
| | | | |
| | | | | |
We always define attribute methods in the constructor or in `init_with`.
|
|\ \ \ \ \
| |_|_|/ /
|/| | | | |
prevent bad automatic inverse_of association
|
| | | | |
| | | | |
| | | | |
| | | | | |
reflecting on wrong association
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
member = Member.new(club: Club.new)
member.save!
Before:
member.current_membership.club_id # => nil
After:
member.current_membership.club_id # => club's id
|
|\ \ \ \ \
| | | | | |
| | | | | | |
Detect in-place changes on mutable AR attributes
|
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
We have several mutable types on Active Record now. (Serialized, JSON,
HStore). We need to be able to detect if these have been modified in
place.
|
|\ \ \ \ \ \
| |_|_|/ / /
|/| | | | | |
Remove unused column types override
|
| | | | | | |
|
|\ \ \ \ \ \
| |_|_|_|/ /
|/| | | | | |
Reorder test which does not represent real world usage
|
| |/ / / /
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
We don't generally modify our classes at runtime like this. Let's create
the instance after the class is created. Original commit doesn't imply
that this was intentional behavior.
|
| | | | | |
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
variables [ci skip]
Thanks to @matthewd for the excellent feedback! :heart:
|
|/ / / /
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
skip]"
This partially reverts commit 1a203d5e07f639332880099fab610b886b1742fc.
Reason: It was committed by accident
|
|\ \ \ \
| | | | |
| | | | | |
Ensure we always define attribute methods
|
| | | | | |
|
|\ \ \ \ \
| | | | | |
| | | | | | |
Introduce an Attribute object to handle the type casting dance
|
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
There's a lot more that can be moved to these, but this felt like a good
place to introduce the object. Plans are:
- Remove all knowledge of type casting from the columns, beyond a
reference to the cast_type
- Move type_cast_for_database to these objects
- Potentially make them mutable, introduce a state machine, and have
dirty checking handled here as well
- Move `attribute`, `decorate_attribute`, and anything else that
modifies types to mess with this object, not the columns hash
- Introduce a collection object to manage these, reduce allocations, and
not require serializing the types
|
| | | | | | |
|
| |/ / / /
|/| | | | |
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
We guarantee that `model.value` does not change after
`model.save && model.reload`. This requires type casting user input for
non-string types.
|
|\ \ \ \ \
| | | | | |
| | | | | | |
Add a test to ensure we don't get a performance regression on #hash
|
| | | | | | |
|
|\ \ \ \ \ \
| | | | | | |
| | | | | | | |
Use a conditional rather than early return in `id`
|