From 3f97a97fc0512967ec61017cd727d1b8f3b63738 Mon Sep 17 00:00:00 2001 From: Aaron Patterson Date: Wed, 8 Feb 2012 14:42:20 -0800 Subject: always call `read_attribute` from the reader method --- .../lib/active_record/attribute_methods/read.rb | 26 ++++++++++------------ 1 file changed, 12 insertions(+), 14 deletions(-) (limited to 'activerecord/lib/active_record') diff --git a/activerecord/lib/active_record/attribute_methods/read.rb b/activerecord/lib/active_record/attribute_methods/read.rb index 0738c4c580..54a5258e4c 100644 --- a/activerecord/lib/active_record/attribute_methods/read.rb +++ b/activerecord/lib/active_record/attribute_methods/read.rb @@ -94,13 +94,7 @@ module ActiveRecord end def internal_attribute_access_code(attr_name, cast_code) - method = instance_cast_method(attr_name) - - if cache_attribute?(attr_name) - "cached_cast_attribute('#{attr_name}', :#{method})" - else - "cast_attribute('#{attr_name}', :#{method})" - end + "read_attribute('#{attr_name}') { |n| missing_attribute(n, caller) }" end def external_attribute_access_code(attr_name, cast_code) @@ -125,14 +119,18 @@ module ActiveRecord # Returns the value of the attribute identified by attr_name after it has been typecast (for example, # "2004-12-12" in a data column is cast to a date object, like Date.new(2004, 12, 12)). def read_attribute(attr_name) - if @columns_hash.key? attr_name - if self.class.cache_attribute?(attr_name) - @attributes_cache[attr_name] ||= @columns_hash[attr_name].type_cast(@attributes[attr_name]) - else - @columns_hash[attr_name].type_cast @attributes[attr_name] - end + column = @columns_hash.fetch(attr_name) { + return self.class.type_cast_attribute(attr_name, @attributes, @attributes_cache) + } + + value = @attributes.fetch(attr_name) { + return block_given? ? yield(attr_name) : nil + } + + if self.class.cache_attribute?(attr_name) + @attributes_cache[attr_name] ||= column.type_cast(value) else - self.class.type_cast_attribute(attr_name, @attributes, @attributes_cache) + column.type_cast value end end -- cgit v1.2.3