module ActiveHashFields::ClassMethods
Public Instance Methods
hash_field_as_object(field_name, defaults={})
click to toggle source
# File lib/active_hash_fields.rb, line 56 def hash_field_as_object(field_name, defaults={}) self.class_eval do serialize field_name after_initialize "initialize_empty_hash_for_#{field_name}", field_name before_validation "write_hash_to_#{field_name}" define_method field_name do @hash_as_object_attrs[field_name] ||= HashAsObject.new(read_attribute(field_name), defaults) end define_method "#{field_name}=" do |hash| send("initialize_empty_hash_for_#{field_name}") @hash_as_object_attrs[field_name] = HashAsObject.new(hash, defaults) @hash_as_object_attrs end define_method "write_hash_to_#{field_name}" do write_attribute field_name, @hash_as_object_attrs[field_name].hash end define_method "initialize_empty_hash_for_#{field_name}" do @hash_as_object_attrs ||= {} #write_attribute(field_name, defaults) if read_attribute(field_name).nil? end end end