Class: DynamicActiveModel::Factory

Inherits:
Object
  • Object
show all
Defined in:
lib/dynamic-active-model/factory.rb

Overview

DynamicActiveModel::Factory creates ActiveRecord class for tables

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(base_module, connection_options, base_class_name = nil) ⇒ Factory

Returns a new instance of Factory.



8
9
10
11
12
# 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

Instance Attribute Details

#base_classObject

rubocop:disable MethodLength



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/dynamic-active-model/factory.rb', line 24

def base_class
  @base_class ||=
    begin
      require 'active_record'

      kls = Class.new(ActiveRecord::Base) do
        self.abstract_class = true
      end
      @base_module.const_set(@base_class_name, kls)

      kls = @base_module.const_get(@base_class_name)
      kls.establish_connection @connection_options
      kls
    end
end

Instance Method Details

#create(table_name, class_name = nil) ⇒ Object



14
15
16
17
18
19
20
21
# File 'lib/dynamic-active-model/factory.rb', line 14

def create(table_name, class_name = nil)
  class_name ||= generate_class_name(table_name)
  kls = Class.new(base_class) do
    self.table_name = table_name
  end
  @base_module.const_set(class_name, kls)
  @base_module.const_get(class_name)
end

#generate_class_name(table_name) ⇒ Object

rubocop:enable MethodLength



41
42
43
# File 'lib/dynamic-active-model/factory.rb', line 41

def generate_class_name(table_name)
  table_name.classify
end