Module: CouchbaseOrm::EmbedsMany
- Included in:
- Base
- Defined in:
- lib/couchbase-orm/utilities/embeds_many.rb
Overview
rubocop:disable Metrics/ModuleLength
Instance Method Summary collapse
Instance Method Details
#embeds_many(name, class_name: nil, store_as: nil, validate: true, polymorphic: false, default: nil) ⇒ Object
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 44 |
# File 'lib/couchbase-orm/utilities/embeds_many.rb', line 6 def (name, class_name: nil, store_as: nil, validate: true, polymorphic: false, default: nil) storage_key = (store_as || name).to_sym attribute storage_key, :array, type: :hash, default: [] instance_var = "@__assoc_#{name}" klass_name = (class_name || name.to_s.singularize.camelize) # Handle polymorphic parameter: can be true, false, or array of allowed types is_polymorphic = polymorphic.is_a?(Array) || polymorphic == true allowed_types = polymorphic.is_a?(Array) ? polymorphic.map { |t| t.to_s.camelize } : nil (name, { type: :many, class_name: klass_name, key: storage_key, name: name, instance_var: instance_var, polymorphic: is_polymorphic, allowed_types: allowed_types, default: default, }) if validate (name) validates_with CouchbaseOrm::PolymorphicTypeValidator, attributes: [name], allowed_types: allowed_types if allowed_types.present? end if is_polymorphic (name, storage_key, instance_var, default) (name, storage_key, instance_var, default) else (name, storage_key, instance_var, klass_name, default) (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 |