class DynamicActiveModel::Factory
DynamicActiveModel::Factory
creates ActiveRecord class for tables
Attributes
base_class[W]
Public Class Methods
new(base_module, connection_options, base_class_name = nil)
click to toggle source
# File lib/dynamic-active-model/factory.rb, line 8 def initialize(base_module, connection_options, base_class_name = nil) @base_module = base_module @connection_options = connection_options @base_class_name = base_class_name || :DynamicAbstractBase end
Public Instance Methods
base_class()
click to toggle source
rubocop:disable MethodLength
# File lib/dynamic-active-model/factory.rb, line 30 def base_class @base_class ||= begin require 'active_record' unless @base_module.const_defined?(@base_class_name) new_base_class = Class.new(ActiveRecord::Base) do self.abstract_class = true end @base_module.const_set(@base_class_name, new_base_class) end @base_module.const_get(@base_class_name).tap do |kls| kls.establish_connection @connection_options end end end
create(table_name, class_name = nil)
click to toggle source
# File lib/dynamic-active-model/factory.rb, line 14 def create(table_name, class_name = nil) class_name ||= generate_class_name(table_name) create!(table_name, class_name) unless @base_module.const_defined?(class_name) @base_module.const_get(class_name) end
create!(table_name, class_name)
click to toggle source
# File lib/dynamic-active-model/factory.rb, line 20 def create!(table_name, class_name) kls = Class.new(base_class) do self.table_name = table_name include DynamicActiveModel::DangerousAttributesPatch end @base_module.const_set(class_name, kls) @base_module.const_get(class_name) end
generate_class_name(table_name)
click to toggle source
rubocop:enable MethodLength
# File lib/dynamic-active-model/factory.rb, line 49 def generate_class_name(table_name) table_name.classify end