Module: FeideeUtils::Record::Namespaced::ClassMethods
- Included in:
- FeideeUtils::Record
- Defined in:
- lib/feidee_utils/record/namespaced.rb
Instance Attribute Summary collapse
-
#child_classes ⇒ Object
readonly
Returns the value of attribute child_classes.
Instance Method Summary collapse
-
#collect_subclass(child_class) ⇒ Object
Must be invoked by Record.inherited.
-
#generate_namespaced_record_classes(db) ⇒ Object
To use Record with different databases, generate a set of classes for each db.
Instance Attribute Details
#child_classes ⇒ Object (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 |