5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
# File 'lib/couchbase-orm/utilities/embeds_one.rb', line 5
def embeds_one(name, class_name: nil, store_as: nil, validate: true, polymorphic: false, default: nil)
storage_key = (store_as || name).to_sym
attribute storage_key, :hash, default: nil
instance_var = "@__assoc_#{name}"
klass_name = (class_name || name.to_s.camelize)
is_polymorphic = polymorphic.is_a?(Array) || polymorphic == true
allowed_types = polymorphic.is_a?(Array) ? polymorphic.map { |t| t.to_s.camelize } : nil
set_embedded(name, {
type: :one,
class_name: klass_name,
key: storage_key,
name: name,
instance_var: instance_var,
polymorphic: is_polymorphic,
allowed_types: allowed_types,
default: default,
})
if validate
validates_embedded(name)
validates_with CouchbaseOrm::PolymorphicTypeValidator, attributes: [name], allowed_types: allowed_types if allowed_types.present?
end
if is_polymorphic
define_polymorphic_embeds_one_reader(name, storage_key, instance_var, default)
define_polymorphic_embeds_one_writer(name, storage_key, instance_var, default)
else
define_standard_embeds_one_reader(name, storage_key, instance_var, klass_name, default)
define_standard_embeds_one_writer(name, storage_key, instance_var, klass_name, default)
end
define_method(:"#{name}_reset") do
remove_instance_variable(instance_var) if instance_variable_defined?(instance_var)
end
end
|