Module: FeideeUtils::Record::Namespaced::ClassMethods

Included in:
FeideeUtils::Record
Defined in:
lib/feidee_utils/record/namespaced.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#child_classesObject (readonly)

Returns the value of attribute child_classes.



7
8
9
# File 'lib/feidee_utils/record/namespaced.rb', line 7

def child_classes
  @child_classes
end

Instance Method Details

#collect_subclass(child_class) ⇒ Object

Must be invoked by Record.inherited



10
11
12
13
# File 'lib/feidee_utils/record/namespaced.rb', line 10

def collect_subclass(child_class)
  @child_classes ||= Set.new
  @child_classes.add(child_class)
end

#generate_namespaced_record_classes(db) ⇒ Object

To use Record with different databases, generate a set of classes for each db



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/feidee_utils/record/namespaced.rb', line 16

def generate_namespaced_record_classes(db)
  @child_classes ||= Set.new
  this = self
  Module.new do |mod|
    const_set(:Database, Module.new {
      define_method("database") { db }
      define_method("environment") { mod }
    })

    this.child_classes.each do |child_class|
      if child_class.name.start_with? FeideeUtils.name
        class_name = child_class.name.sub(/#{FeideeUtils.name}::/, '')
        # Generate a const for the child class
        const_set(class_name, Class.new(child_class) {
          extend mod::Database
        })
      end
    end
  end
end