def create_accessors(name, meth, options = {})
field = fields[name]
generated_field_methods.module_eval do
if field.cast_on_read?
define_method(meth) do
field.deserialize(read_attribute(name))
end
else
define_method(meth) do
read_attribute(name).tap do |value|
if value.is_a?(Array) || value.is_a?(Hash)
unless changed_attributes.include?(name)
changed_attributes[name] = value.clone
end
end
end
end
end
define_method("#{meth}=") do |value|
write_attribute(name, value)
end
define_method("#{meth}?") do
attr = read_attribute(name)
(options[:type] == Boolean) ? attr == true : attr.present?
end
end
end