| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
| |
If someone calls allocate on the object, they'd better also call an
initialization routine too (you can't expect allocate to do any
initialization work). Before this commit, AR objects that are
instantiated from the database would call `define_attribute_methods`
twice.
|
|
|
|
| |
Before it was coercing an invalid string into "2000-01-01 00:00:00".
|
|
|
|
| |
Follow up of #32605.
|
|
|
|
|
| |
This autocorrects the violations after adding a custom cop in
3305c78dcd.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
test_read_attributes_before_type_cast_on_a_boolean
https://github.com/jruby/activerecord-jdbc-adapter ActiveRecord JDBC Adapter is actively developed
and it supports Rails 5.1 now. This pull request addresses one of the failure when running
ActiveRecord unit tests with ActiveRecord JDBC Adapter.
As of right now, ActiveRecord JDBC Adapter supports Rails 5.1, not master branch
then this test only can run on `5-1-stable` branch. But I have opened this pull request to `master` branch
since this type cast should be going to work in the future versions of ActiveRecord JDBC Adapter .
```ruby
$ ARCONN=jdbcmysql bin/test test/cases/attribute_methods_test.rb:203
Using jdbcmysql
Run options: --seed 8874
F
Finished in 0.709120s, 1.4102 runs/s, 1.4102 assertions/s.
1) Failure:
AttributeMethodsTest#test_read_attributes_before_type_cast_on_a_boolean [/home/yahonda/git/rails/activerecord/test/cases/attribute_methods_test.rb:203]:
Expected: "0"
Actual: 0
1 runs, 1 assertions, 1 failures, 0 errors, 0 skips
$
```
|
| |
|
|
|
|
|
|
| |
`AttributeMethodsTest`
These are no longer used since 66736c8e.
|
| |
|
|
|
|
| |
Because `generated_attribute_methods` is an internal API.
|
|
|
|
|
| |
This reverts commit 3420a14590c0e6915d8b6c242887f74adb4120f9, reversing
changes made to afb66a5a598ce4ac74ad84b125a5abf046dcf5aa.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This issue is only appear when you try to call `define_attribute_method`
and passing a symbol in Active Record. It does not appear in isolation
in Active Model itself.
Before this patch, when you run `User.define_attribute_method :foo`, you
will get:
NoMethodError: undefined method `unpack' for :foo:Symbol
from activerecord/lib/active_record/attribute_methods/read.rb:28:in `define_method_attribute'
from activerecord/lib/active_record/attribute_methods/primary_key.rb:61:in `define_method_attribute'
from activemodel/lib/active_model/attribute_methods.rb:292:in `block in define_attribute_method'
from activemodel/lib/active_model/attribute_methods.rb:285:in `each'
from activemodel/lib/active_model/attribute_methods.rb:285:in `define_attribute_method'
This patch contains both a fix in Active Model and a test in Active
Record for this error.
|
| |
|
|
|
|
| |
- If aliased, then use the aliased attribute name.
|
|
|
|
|
| |
- If aliased, then use the aliased attribute name.
- Fixes #26417.
|
| |
|
|
|
|
|
|
| |
assert [1, 3].includes?(2) fails with unhelpful "Asserting failed" message
assert_includes [1, 3], 2 fails with "Expected [1, 3] to include 2" which makes it easier to debug and more obvious what went wrong
|
|
|
|
|
|
| |
All indentation was normalized by rubocop auto-correct at 80e66cc4d90bf8c15d1a5f6e3152e90147f00772.
But heredocs was still kept absolute position. This commit aligns
heredocs indentation for consistency.
|
| |
|
| |
|
|
|
|
|
| |
The current code base is not uniform. After some discussion,
we have chosen to go with double quotes by default.
|
| |
|
|
|
|
|
|
|
|
|
| |
It all started noticing some foo.method({ ... }) method calls
in passing. This is a whole pass modernizing this file.
While some string literals are edited where I touched code,
this pass does not uniformizes quotes. A ton are left untouched
on purposes. We have no defined style.
|
|
|
|
|
| |
Where appropriatei, prefer the more concise Regexp#match?,
String#include?, String#start_with?, or String#end_with?
|
|
|
|
| |
preventing infinite looping in some cases.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
We had previously updated this to attempt to map over whatever was
passed in, so that additional types like range and array could benefit
from this behavior without the time zone converter having to deal with
every known type.
However, the default behavior of a type is to just yield the given value
to `map`, which means that if we don't actually know how to handle a
value, we'll just recurse infinitely. Since both uses of `map` in this
case occur in cases where we know receiving the same object will
recurse, we can just break on reference equality.
Fixes #23241.
|
| |
|
|
|
|
|
| |
I misread this test in
https://github.com/rails/rails/commit/1a693c79c32cba070256fdb7bd1990c3d07d554f
|
|
|
|
|
| |
There were a few places where I missed a `create` vs `new`
before_type_cast check, and the semantics of `reload` became wrong.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
We can skip the allocation of a full `AttributeSet` by changing the
semantics of how we structure things. Instead of comparing two separate
`AttributeSet` objects, and `Attribute` is now a singly linked list of
every change that has happened to it. Since the attribute objects are
immutable, to apply the changes we simply need to copy the head of the
list.
It's worth noting that this causes one subtle change in the behavior of
AR. When a record is saved successfully, the `before_type_cast` version
of everything will be what was sent to the database. I honestly think
these semantics make more sense, as we could have just as easily had the
DB do `RETURNING *` and updated the record with those if we had things
like timestamps implemented at the DB layer.
This brings our performance closer to 4.2, but we're still not quite
there.
|
|
|
|
|
| |
Some test cases are testing only mysql adapter. We should test mysql2
adapter also.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
The name `ActiveModel::AttributeAssignment::UnknownAttributeError` is
too implementation specific so let's move the constant directly under
the ActiveModel namespace.
Also since this constant used to be under the ActiveRecord namespace, to
make the upgrade path easier, let's avoid raising the former constant
when we deal with this error on the Active Record side.
|
|
|
|
|
|
| |
`ActiveModel::AttributesAssignment`
Allows to use it for any object as an includable module.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This method can be used to see all of the fields on a model which have
been read. This can be useful during development mode to quickly find
out which fields need to be selected. For performance critical pages, if
you are not using all of the fields of a database, an easy performance
win is only selecting the fields which you need. By calling this method
at the end of a controller action, it's easy to determine which fields
need to be selected.
While writing this, I also noticed a place for an easy performance win
internally which I had been wanting to introduce. You cannot mutate a
field which you have not read. Therefore, we can skip the calculation of
in place changes if we have never read from the field. This can
significantly speed up methods like `#changed?` if any of the fields
have an expensive mutable type (like `serialize`)
```
Calculating -------------------------------------
#changed? with serialized column (before)
391.000 i/100ms
#changed? with serialized column (after)
1.514k i/100ms
-------------------------------------------------
#changed? with serialized column (before)
4.243k (± 3.7%) i/s - 21.505k
#changed? with serialized column (after)
16.789k (± 3.2%) i/s - 84.784k
```
|
|
|
|
|
|
| |
The types that are affected by `time_zone_aware_attributes` (which is on
by default) have been made configurable, in case this is a breaking
change for existing applications.
|
|
|
|
|
|
| |
While we don't want to change the form input when validations fail,
blindly using `_before_type_cast` will cause the input to display the
wrong data for any type which does additional work on database values.
|
| |
|
| |
|
|
|
|
|
| |
`Computer` class needs to be require
See #17217 for more details
|
|\
| |
| |
| | |
Message on AR::UnknownAttributeError should include the class name of a record
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This would be helpful if 2 models have an attribute that has a similar
name to the other. e.g:
before:
User.new(name: "Yuki Nishijima", projects_attributes: [name: "kaminari"])
# => ActiveRecord::UnknownAttributeError: unknown attribute: name
after:
User.new(name: "Yuki Nishijima", projects_attributes: [name: "kaminari"])
# => ActiveRecord::UnknownAttributeError: unknown attribute on User: name
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This would be helpful if 2 models have an attribute that has a similar
name to the other. e.g:
before:
User.new(name: "Yuki Nishijima", projects_attributes: [name: "kaminari"])
# => ActiveRecord::UnknownAttributeError: unknown attribute: name
after:
User.new(name: "Yuki Nishijima", projects_attributes: [name: "kaminari"])
# => ActiveRecord::UnknownAttributeError: unknown attribute on User: name
|
|
|
|
|
| |
This test has always been green because it uses "assert" and the first
argument is an truthy class/object.
|
| |
|
| |
|