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