class Arql::Definition

Public Class Methods

models() click to toggle source
# File lib/arql/definition.rb, line 82
def models
  @@models ||= []
end
new(options) click to toggle source
# File lib/arql/definition.rb, line 152
def initialize(options)
  @@options = options
  @@models = []
  ActiveRecord::Base.connection.tap do |conn|
    Object.const_set('ArqlModel', Class.new(ActiveRecord::Base) do
                       include ::Arql::Concerns::TableDataDefinition
                       self.abstract_class = true

                       define_singleton_method(:indexes) do
                         conn.indexes(table_name).map do |idx|
                           {
                             Table: idx.table,
                             Name: idx.name,
                             Columns: idx.columns.join(', '),
                             Unique: idx.unique,
                             Comment: idx.comment
                           }
                         end.t
                       end
                     end)
    conn.tables.each do |table_name|
      table_comment = conn.table_comment(table_name)
      conn.primary_key(table_name).tap do |pkey|
        table_name.camelize.tap do |const_name|
          const_name = 'Modul' if const_name == 'Module'
          const_name = 'Clazz' if const_name == 'Class'
          Class.new(::ArqlModel) do
            include Arql::Extension
            if pkey.is_a?(Array)
              self.primary_keys = pkey
            else
              self.primary_key = pkey
            end
            self.table_name = table_name
            self.inheritance_column = nil
            self.default_timezone = :local
            if options[:created_at].present?
              define_singleton_method :timestamp_attributes_for_create do
                options[:created_at]
              end
            end

            if options[:updated_at].present?
              define_singleton_method :timestamp_attributes_for_update do
                options[:updated_at]
              end
            end
          end.tap do |clazz|
            Object.const_set(const_name, clazz).tap do |const|
              const_name.gsub(/[a-z]*/, '').tap do |bare_abbr|
                abbr_const = nil
                9.times do |idx|
                  abbr = idx.zero? ? bare_abbr : "#{bare_abbr}#{idx+1}"
                  unless Object.const_defined?(abbr)
                    Object.const_set abbr, const
                    abbr_const = abbr
                    break
                  end
                end

                @@models << {
                  model: const,
                  abbr: abbr_const,
                  table: table_name,
                  comment: table_comment
                }
              end
            end
          end
        end
      end
    end
  end
end
redefine() click to toggle source
# File lib/arql/definition.rb, line 86
def redefine
  options = @@options
  @@models.each do |model|
    Object.send :remove_const, model[:model].name.to_sym if model[:model]
    Object.send :remove_const, model[:abbr].to_sym if model[:abbr]
  end
  @@models = []
  ActiveRecord::Base.connection.tap do |conn|
    conn.tables.each do |table_name|
      table_comment = conn.table_comment(table_name)
      conn.primary_key(table_name).tap do |pkey|
        table_name.camelize.tap do |const_name|
          const_name = 'Modul' if const_name == 'Module'
          const_name = 'Clazz' if const_name == 'Class'
          Class.new(::ArqlModel) do
            include Arql::Extension
            if pkey.is_a?(Array)
              self.primary_keys = pkey
            else
              self.primary_key = pkey
            end
            self.table_name = table_name
            self.inheritance_column = nil
            self.default_timezone = :local
            if options[:created_at].present?
              define_singleton_method :timestamp_attributes_for_create do
                options[:created_at]
              end
            end

            if options[:updated_at].present?
              define_singleton_method :timestamp_attributes_for_update do
                options[:updated_at]
              end
            end
          end.tap do |clazz|
            Object.const_set(const_name, clazz).tap do |const|
              const_name.gsub(/[a-z]*/, '').tap do |bare_abbr|
                abbr_const = nil
                9.times do |idx|
                  abbr = idx.zero? ? bare_abbr : "#{bare_abbr}#{idx+1}"
                  unless Object.const_defined?(abbr)
                    Object.const_set abbr, const
                    abbr_const = abbr
                    break
                  end
                end

                @@models << {
                  model: const,
                  abbr: abbr_const,
                  table: table_name,
                  comment: table_comment
                }
              end
            end
          end
        end
      end
    end
  end

  App.instance&.load_initializer!
end

Public Instance Methods

a() click to toggle source
# File lib/arql/definition.rb, line 236
def a
  to_a
end
dump(filename, batch_size=500) click to toggle source
# File lib/arql/definition.rb, line 248
def dump(filename, batch_size=500)
  records.dump(filename, batch_size)
end
t(*attrs, **options) click to toggle source
# File lib/arql/definition.rb, line 228
def t(*attrs, **options)
  records.t(*attrs, **options)
end
v() click to toggle source
# File lib/arql/definition.rb, line 232
def v
  records.v
end
write_csv(filename, *fields, **options) click to toggle source
# File lib/arql/definition.rb, line 240
def write_csv(filename, *fields, **options)
  records.write_csv(filename, *fields, **options)
end
write_excel(filename, *fields, **options) click to toggle source
# File lib/arql/definition.rb, line 244
def write_excel(filename, *fields, **options)
  records.write_excel(filename, *fields, **options)
end