提交 9c07e389 编写于 作者: A Aaron Patterson

moved attribute translation to an object

上级 ee161d1b
require 'active_record/attributes/translator'
module ActiveRecord
module AttributeMethods
module Read
......@@ -126,28 +128,20 @@ def read_attribute(attr_name)
self.class.type_cast_attribute(attr_name, @attributes, @attributes_cache)
end
private
def cached_cast_attribute(attr_name, method)
@attributes_cache[attr_name] ||= cast_attribute(attr_name, method)
end
def cast_attribute(attr_name, method)
v = @attributes.fetch(attr_name) { missing_attribute(attr_name, caller) }
v && send(method, attr_name, v)
end
def cast_serialized(attr_name, value)
value.unserialized_value
def attribute_translator
Attributes::Translator.new(@attributes, @columns_hash)
end
def cast_tz_conversion(attr_name, value)
value = cast_column(attr_name, value)
value.acts_like?(:time) ? value.in_time_zone : value
def cached_cast_attribute(attr_name, method)
@attributes_cache[attr_name] ||= cast_attribute(attr_name, method)
end
def cast_column(attr_name, value)
@columns_hash[attr_name].type_cast value
def cast_attribute(attr_name, method)
attribute_translator.cast_attribute(attr_name, method) do
missing_attribute(attr_name, caller)
end
end
def attribute(attribute_name)
......
module ActiveRecord
module Attributes
class Translator # :nodoc:
def initialize(attributes, column_types)
@attributes = attributes
@column_types = column_types
end
def cast_attribute(attr_name, method)
v = @attributes.fetch(attr_name) { yield }
v && send(method, attr_name, v)
end
def cast_serialized(attr_name, value)
value.unserialized_value
end
def cast_tz_conversion(attr_name, value)
value = cast_column(attr_name, value)
value.acts_like?(:time) ? value.in_time_zone : value
end
def cast_column(attr_name, value)
@column_types[attr_name].type_cast value
end
end
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册