Created
September 11, 2011 13:36
-
-
Save rnaud/1209590 to your computer and use it in GitHub Desktop.
Attribute Serializer, serializeable, with fix for default values.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module AttributeSerializer | |
module ActiveRecordExtensions | |
module ClassMethods | |
def serializeable(serialized, serialized_accessors={}) | |
serialize serialized, serialized_accessors.class | |
serialized_attr_accessor serialized, serialized_accessors | |
default_serialized_attr serialized, serialized_accessors | |
end | |
# Creates the accessors | |
def serialized_attr_accessor(serialized, accessors) | |
accessors.each_pair do |k,v| | |
define_method("#{k}") do | |
if self[serialized] && !self[serialized][k].nil? | |
self[serialized][k] | |
else | |
v | |
end | |
end | |
define_method("#{k}=") do |value| | |
self[serialized][k] = value | |
end | |
end | |
end | |
# Sets the default value of the serialized field | |
def default_serialized_attr(serialized, accessors) | |
method_name = "set_default_#{serialized}" | |
after_initialize method_name | |
define_method(method_name) do | |
self[serialized] = accessors if self[serialized].nil? | |
end | |
end | |
end | |
end | |
end | |
class ActiveRecord::Base | |
extend AttributeSerializer::ActiveRecordExtensions::ClassMethods | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment