Module: Mongoid::Mirrored::ClassMethods

Includes:
HelperMethods, MirrorMethods, RootMethods
Defined in:
lib/mongoid-mirrored/mirrored_in.rb

Instance Method Summary collapse

Methods included from HelperMethods

#embedding_klass, #extract_options, #root_association

Methods included from RootMethods

#define_create_mirrors, #define_destroy_mirrors, #define_root_callbacks, #define_update_mirrors, #write_fields_with_options

Methods included from MirrorMethods

#define_after_create_callback, #define_after_create_siblings, #define_after_destroy_callback, #define_after_destroy_siblings, #define_after_update_callback, #define_after_update_siblings, #define_mirror_callbacks_for, #embeds_mirror_in

Instance Method Details

#mirrored_in(*args, &block) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/mongoid-mirrored/mirrored_in.rb', line 18

def mirrored_in(*args, &block)
  extract_options(*args)
  write_fields_with_options { yield }
  @root_klass = self
  # creates a Mirrored class for each embedding model
  embedding_models.each do |embedding_model|
    mirror_klass = Class.new do
      include Mongoid::Document
      
      # includes all fields and methods declared when calling mirrored_in
      class_eval &block
    end
    
    define_mirror_callbacks_for(embedding_model, mirror_klass)
    embeds_mirror_in(embedding_model, mirror_klass)
    _embedding_klass = embedding_klass(embedding_model)
    
    # Creates the mirrored class Embedding::Root
    _embedding_klass.const_set self.name, mirror_klass
  end
end