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