class DynamicModel::TablesAnalyser
Attributes
base_class[R]
domain[R]
klasses_analysed[R]
Public Class Methods
new(domain, base_class = ActiveRecord::Base)
click to toggle source
# File lib/database_introspection/dynamic_model/tables_analyser.rb, line 7 def initialize(domain, base_class = ActiveRecord::Base) @domain = domain @base_class = base_class define_domain_module @klasses_analysed = [] end
Public Instance Methods
scan_database()
click to toggle source
# File lib/database_introspection/dynamic_model/tables_analyser.rb, line 14 def scan_database # Introspect database tables and creates ActiveRecord descendants in the name space module @domain_module.table_names.map do |table_name| inject_class table_name end @domain_module.model_classes end
Private Instance Methods
define_domain_module()
click to toggle source
# File lib/database_introspection/dynamic_model/tables_analyser.rb, line 46 def define_domain_module domain_name = @domain.singularize.camelize @domain_module = nil if DynamicModel::ManagedDomains.constants.include? domain_name.to_sym @domain_module = DynamicModel::ManagedDomains.const_get domain_name else @domain_module = DynamicModel::ManagedDomains.const_set(domain_name, Module.new) @domain_module.extend DynamicModel::DomainExtension end end
inject_class(table_name)
click to toggle source
# File lib/database_introspection/dynamic_model/tables_analyser.rb, line 25 def inject_class(table_name) short_model_name = table_name.gsub(/#{@domain_module.prefix}_/, '').singularize.camelize klass = nil if @domain_module.constants.include? short_model_name.to_sym klass = @domain_module.const_get short_model_name puts "Found #{klass.name} that already handles #{table_name}" klass.reset_column_information else klass = @domain_module.const_set short_model_name, Class.new(@base_class) puts "Created #{klass.name} to handle #{table_name}" # Adds some class methods klass.send :include, DynamicModel::ActiveRecordExtension end # Disables STI klass.inheritance_column = nil # Maps the class to the correct table klass.table_name = table_name # Adds attributes accessible for mass assign klass.attr_accessible *(klass.attribute_names - [klass.primary_key]) end