Skip to content

Instantly share code, notes, and snippets.

@rnaud
Created September 11, 2011 13:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rnaud/1209590 to your computer and use it in GitHub Desktop.
Save rnaud/1209590 to your computer and use it in GitHub Desktop.
Attribute Serializer, serializeable, with fix for default values.
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