class Temping::ModelFactory

Constants

DEFAULT_OPTIONS

Public Class Methods

new(model_name, options = {}, &block) click to toggle source
# File lib/temping.rb, line 34
def initialize(model_name, options = {}, &block)
  @model_name = model_name
  @options = options
  klass.class_eval(&block) if block_given?
  klass.reset_column_information
end

Public Instance Methods

klass() click to toggle source
# File lib/temping.rb, line 41
def klass
  @klass ||= Object.const_get(@model_name)
rescue NameError
  @klass = build
end

Private Instance Methods

add_methods() click to toggle source
# File lib/temping.rb, line 72
def add_methods
  class << klass
    def with_columns
      connection.change_table(table_name) do |table|
        yield(table)
      end
    end

    def table_exists?
      true
    end
  end
end
build() click to toggle source
# File lib/temping.rb, line 49
def build
  Class.new(@options.fetch(:parent_class, default_parent_class)).tap do |klass|
    Object.const_set(@model_name, klass)

    klass.primary_key = @options[:primary_key] || :id
    create_table(@options)
    add_methods
  end
end
connection() click to toggle source
# File lib/temping.rb, line 86
def connection
  klass.connection
end
create_table(options = {}) click to toggle source
# File lib/temping.rb, line 68
def create_table(options = {})
  connection.create_table(table_name, DEFAULT_OPTIONS.merge(options))
end
default_parent_class() click to toggle source
# File lib/temping.rb, line 59
def default_parent_class
  if ActiveRecord::VERSION::MAJOR > 4 && defined?(ApplicationRecord)
    ApplicationRecord
  else
    ActiveRecord::Base
  end
end
table_name() click to toggle source
# File lib/temping.rb, line 90
def table_name
  klass.table_name
end