| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
| |
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`
|
| |/ / / / / |
|
|/ / / / / |
|
|\ \ \ \ \
| |_|/ / /
|/| | | | |
Fix performance regression on preloading HABTM associations
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
We'd spend a lot of time calling `hash` and `eql?` on the join model,
which has no primary key. Calling `id` with no primary key is a really
slow way to get back `nil`, so we can improve the performance there.
However, even with the escape clause, we *still* weren't getting high
enough performance, as we were checking the primary key too much. `hash`
will always return `nil.hash` for records with no id, and `==` will
always return `false`. We can optimize those cases in the HABTM join
model.
|