47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
# File 'lib/active_hash_fields.rb', line 47
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 ||= {}
end
end
end
|