aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/cases/attribute_methods_test.rb
Commit message (Collapse)AuthorAgeFilesLines
* Merge pull request #15718 from chancancode/regression_from_15694Godfrey Chan2014-07-161-1/+5
|\ | | | | Fixed a regression introduced in 84cf156
| * Fixed a regression introduced in 84cf156Godfrey Chan2014-06-141-1/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 84cf156 (PR #15694) introduced a subtle regression. There are actually three distinct entry points to creating an AR object – via .new (i.e. #initialize), via #init_with (e.g. from YAML or database queries) and via .allocate. With the patch in 84cf156, attribute methods and respond_to? will not work correctly when objects are allocated directly, without going through either The reason this test case didn't catch the regression was that the `Topic` class is shared between test cases, so by the time this test case is ran the attribute methods are very likely to be defined. Switching to use a fresh anonymous class in the test to ensure we surface this problem in the future.
* | Move writing unknown column exception to null attributeSean Griffin2014-06-261-0/+9
| | | | | | | | | | | | Making this change revealed several subtle bugs related to models with no primary key, and anonymous classes. These have been fixed as well, with regression tests added.
* | Add missing test cases for `attribute_names` instance methodSean Griffin2014-06-221-0/+20
| | | | | | | | | | There is a class method with the same name that is tested, but not the instance method.
* | Add missing test cases for `attribute_method?`Sean Griffin2014-06-211-0/+11
|/
* Reorder test which does not represent real world usageSean Griffin2014-06-131-2/+2
| | | | | | 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.
* rm cached attributesSean Griffin2014-06-111-35/+9
| | | | | | | | | | The original patch that added this concept can be found [here](https://web.archive.org/web/20090601022739/http://dev.rubyonrails.org/ticket/9767). The current default behavior is to cache everything except serialized columns, unless the user specified otherwise. If anyone were to specify otherwise, many types would actually be completely broken. Still, the method is left in place with a deprecation warning in case anyone is actually still calling this method.
* Remove most code related to serialized propertiesSean Griffin2014-06-011-1/+1
| | | | | | | | | | | 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
* Add missing test case for writing unknown attributesSean Griffin2014-05-301-0/+2
|
* Rename attribute related instance variables to better express intentSean Griffin2014-05-301-1/+1
| | | | | | | | | `@attributes` was actually used for `_before_type_cast` and friends, while `@attributes_cache` is the type cast version (and caching is the wrong word there, but I'm working on removing the conditionals around that). I opted for `@raw_attributes`, because `_before_type_cast` is also semantically misleading. The values in said hash are in the state given by the form builder or database, so raw seemed to be a good word.
* Don't recurse infinitely when calling non-existent method on superKris Kemper2014-05-221-0/+12
|
* Remove :timestamp column typeSean Griffin2014-05-191-1/+1
| | | | | | | | | | | | The `:timestamp` type for columns is unused. All database adapters treat them as the same database type. All code in `ActiveRecord` which changes its behavior based on the column's type acts the same in both cases. However, when the type is passed to code that checks for the `:datetime` type, but not `:timestamp` (such as XML serialization), the result is unexpected behavior. Existing schema definitions will continue to work, and the `timestamp` type is transparently aliased to `datetime`.
* Just call read_attribute, no need to use `send`.Lauro Caetano2014-04-141-4/+4
| | | | Follow up to af549a1ad6692d7e2c756750651f0e1b293f5185
* Use teardown helper method.Guo Xiang Tan2014-03-141-1/+1
| | | | | | | | Follow-Up to https://github.com/rails/rails/pull/14348 Ensure that SQLCounter.clear_log is called after each test. This is a step to prevent side effects when running tests. This will allow us to run them in random order.
* Fixes STI when 2+ levels deep.Arthur Neves2014-03-101-0/+13
| | | | | | PR #14052 Added a regression where it was only looking for methods in one level up, So when the method was defined in a 2+ levels up the inheritance chain, the method was not found as defined.
* Merge remote-tracking branch ↵Jon Leighton2014-02-251-11/+19
|\ | | | | | | | | | | | | 'chancancode/fix_instance_method_already_implemented' Conflicts: activerecord/CHANGELOG.md
| * Fixed STI classes not defining an attribute method if there is aGodfrey Chan2014-02-231-11/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | conflicting private method defined on its ancestors. The problem is that `method_defined_within?(name, klass, superklass)` only works correclty when `klass` and `superklass` are both `Class`es. If both `klass` and `superklass` are both `Class`es, they share the same inheritance chain, so if a method is defined on `klass` but not `superklass`, this method must be introduced at some point between `klass` and `superklass`. This does not work when `superklass` is a `Module`. A `Module`'s inheritance chain contains just itself. So if a method is defined on `klass` but not on `superklass`, the method could still be defined somewhere upstream, e.g. in `Object`. This fix works by avoiding calling `method_defined_within?` with a module while still fufilling the requirement (checking that the method is defined withing `superclass` but not is not a generated attribute method). 4d8ee288 is likely an attempted partial fix for this problem. This unrolls that fix and properly check the `superclass` as intended. Fixes #11569.
* | Coerce strings when reading attributes.Yves Senn2014-02-231-0/+18
|/
* Fix AR#method_missing re-dispatching into overwritten attribute methods.thedarkone2013-09-291-2/+33
| | | | | | | | | | | | | | This was happening when a `super` call in an overwritten attribute method was triggering a method_missing fallback, because attribute methods haven't been generated yet. class Topic < ActiveRecord::Base def title # `super` would re-invoke this method if define_attribute_methods # hasn't been called yet resulting in double '!' appending super + '!' end end
* Merge pull request #9860 from wangjohn/update_attributes_throws_error_with_nilRafael Mendonça França2013-09-241-1/+1
|\ | | | | | | | | | | | | Raising an error when nil is passed to update_attributes. Conflicts: activerecord/CHANGELOG.md
| * Raising an error when nil or non-hash is passed to update_attributes.wangjohn2013-06-251-1/+1
| |
* | Remove deprecation warning from attribute_missing Arun Agrawal2013-07-151-15/+0
| | | | | | for attributes that are columns.
* | Fix: attribute_for_inspect truncate upto (51 => 50) characters.namusyaka2013-07-091-1/+1
|/
* Extract AR::AttributeMethods#attribute_for_inspect's test code out from ↵Takehiro Adachi2013-05-221-0/+8
| | | | | | | base_test.rb The method itself got extracted out from ActiveRecored::Base in commit ceb33f84933639d3b61aac62e5e71fd087ab65ed, but the test code never did.
* test refactorAaron Patterson2013-05-161-5/+2
|
* Add more data to AR::UnknownAttributeErrorBogdan Gusiev2013-05-161-0/+12
| | | | | | | | | begin Topic.new("hello" => "world") rescue ActiveRecord::UnknownAttributeError => e e.record # => #<Topic ... > e.attribute # => "hello" end
* read_attribute_before_type_cast should accept symbolNeeraj Singh2013-05-111-0/+1
|
* fixes a test, and explains why AR::AttributeMethods checks ↵Xavier Noria2013-04-281-5/+2
| | | | defined?(@attributes) in some places
* Removed space and unused classAnupam Choudhury2013-04-061-1/+1
|
* fix typos in AR. lots of them.Vipul A M2013-03-191-2/+2
|
* Remove not used require and some useless test commentsCarlos Antonio da Silva2012-11-171-12/+3
|
* Fix typo in module name and make #in_time_zone privateCarlos Antonio da Silva2012-11-171-1/+1
|
* Extract #in_time_zone helper method duplication to a moduleCarlos Antonio da Silva2012-11-171-12/+2
|
* Simplify helper method in attribute methods testCarlos Antonio da Silva2012-11-171-3/+1
|
* AR::AttributeMethods#[] raises AM::AttributeMissingError for missing attributes.Francesco Rodriguez2012-10-281-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | This fixes the following behaviour: class Person < ActiveRecord::Base belongs_to :company end # Before: person = Person.select('id').first person[:name] # => nil person.name # => ActiveModel::MissingAttributeError: missing_attribute: name person[:company_id] # => nil person.company # => nil # After: person = Person.select('id').first person[:name] # => ActiveModel::MissingAttributeError: missing_attribute: name person.name # => ActiveModel::MissingAttributeError: missing_attribute: name person[:company_id] # => ActiveModel::MissingAttributeError: missing_attribute: company_id person.company # => ActiveModel::MissingAttributeError: missing_attribute: company_id Fixes #5433.
* Revert "Key the attributes hash with symbols"Jon Leighton2012-10-121-2/+2
| | | | | | | | | | | | This reverts commit 86c3dfbd47cb96af02daaa655963292b1a1b110e. Conflicts: activerecord/lib/active_record/attribute_methods/read.rb Reason: whilst this increased performance, it also presents a DoS risk via memory exhaustion if users were allowing user input to dictate the arguments of read/write_attribute. I will investigate alternative ways to cut down on string allocations here.
* test cleanup, remove ruby_type because it's no longer neededYves Senn2012-09-031-1/+1
| | | | | All tests with a custom inheritance_column use the `Vegtable` model. The field ruby_type on the Company models is no longer needed
* Key the attributes hash with symbolsJon Leighton2012-08-311-2/+2
| | | | | | | | This is a performance/GC optimisation. In theory, this could be optimised by the implementation (last time I checked, this would have no effect on JRuby). But in practise, this make attribute access faster.
* Move the serialized attribute tests to their own fileRafael Mendonça França2012-08-261-11/+0
|
* Move test to the correct fileRafael Mendonça França2012-08-261-0/+6
|
* Refactor missing parameter validation based on positionCarlos Antonio da Silva2012-08-181-1/+0
|
* load active_support/core_ext/object/inclusion in active_support/railsXavier Noria2012-08-021-1/+0
|
* Deprecate ActiveRecord::Base.scoped.Jon Leighton2012-07-271-4/+4
| | | | | | | It doesn't serve much purpose now that ActiveRecord::Base.all returns a Relation. The code is moved to active_record_deprecated_finders.
* Fix class_eval without __FILE__ and __LINE__.kennyj2012-07-181-1/+1
|
* Move newly added multiparameter tests to base_test fileCarlos Antonio da Silva2012-06-281-35/+1
| | | | | All other multiparameter assignment tests are in the same file, so it makes sense to have all of them here.
* Skip test_setting_time_attribute because Oracle databaseYasuo Honda2012-06-281-0/+2
| | | | does not have TIME data type.
* Fixes #6825, adds tests covering cases and error possibilities, also changes ↵Mauricio Linhares2012-06-271-0/+33
| | | | SQLite3 driver to correctly generate a time column instead of datetime
* Remove unused assignments from activerecord testsMark Rushakoff2012-04-291-2/+2
|
* %s/find(:\(first\|last\|all\), \([^()]*\))/scoped(\2).\1/gcI amongst other ↵Jon Leighton2012-04-271-4/+4
| | | | things
* remove calls to find(:first), find(:last) and find(:all)Jon Leighton2012-04-261-1/+1
|