Class: DynamicActiveModel::Factory
- Inherits:
-
Object
- Object
- DynamicActiveModel::Factory
- Defined in:
- lib/dynamic-active-model/factory.rb
Overview
DynamicActiveModel::Factory creates ActiveRecord class for tables
Instance Attribute Summary collapse
-
#base_class ⇒ Object
rubocop:disable MethodLength.
Instance Method Summary collapse
- #create(table_name, class_name = nil) ⇒ Object
- #create!(table_name, class_name) ⇒ Object
-
#generate_class_name(table_name) ⇒ Object
rubocop:enable MethodLength.
-
#initialize(base_module, connection_options, base_class_name = nil) ⇒ Factory
constructor
A new instance of Factory.
- #require_extension(class_name) ⇒ Object
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, , base_class_name = nil) @base_module = base_module @connection_options = @base_class_name = base_class_name || :DynamicAbstractBase end |
Instance Attribute Details
#base_class ⇒ Object
rubocop:disable MethodLength
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/dynamic-active-model/factory.rb', line 31 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 |
Instance Method Details
#create(table_name, class_name = nil) ⇒ Object
14 15 16 17 18 |
# 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) ⇒ Object
20 21 22 23 24 25 26 27 28 |
# 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) require_extension(class_name) @base_module.const_get(class_name) end |
#generate_class_name(table_name) ⇒ Object
rubocop:enable MethodLength
50 51 52 53 54 55 |
# File 'lib/dynamic-active-model/factory.rb', line 50 def generate_class_name(table_name) class_name = table_name.classify return ('N' + class_name) if class_name =~ /\A\d/ class_name end |
#require_extension(class_name) ⇒ Object
57 58 59 60 61 62 |
# File 'lib/dynamic-active-model/factory.rb', line 57 def require_extension(class_name) file = File.(DynamicActiveModel.base_models_path + '/' + class_name.underscore + '.rb') return unless File.exist?(file) require file end |