class AuditTables::Base

Attributes

audit_table_name[RW]
column[RW]
klass[RW]
table_name[RW]

Public Class Methods

new(table_name) click to toggle source
# File lib/audit_tables/base.rb, line 6
def initialize(table_name)
  @table_name = table_name
  @audit_table_name = "audit_#{table_name}"
  @klass = table_name.classify.safe_constantize
end

Private Instance Methods

add_new_column() click to toggle source
# File lib/audit_tables/base.rb, line 14
def add_new_column
  if properties.empty?
    add_column audit_table_name, column.name, column_type
  else
    add_column audit_table_name, column.name, column_type, properties
  end
end
audit_columns() click to toggle source
# File lib/audit_tables/base.rb, line 22
def audit_columns
  columns(table_name).each do |column|
    @column = column

    add_new_column unless column_exists?(audit_table_name, column.name)
  end
end
column_exists?(table_name, column_name) click to toggle source
# File lib/audit_tables/base.rb, line 35
def column_exists?(table_name, column_name)
  ActiveRecord::Base.connection.column_exists?(table_name, column_name)
end
column_name() click to toggle source
# File lib/audit_tables/base.rb, line 39
def column_name
  column.name
end
column_type() click to toggle source
# File lib/audit_tables/base.rb, line 43
def column_type
  column.type
end
columns(table_name) click to toggle source
# File lib/audit_tables/base.rb, line 47
def columns(table_name)
  ActiveRecord::Base.connection.columns(table_name)
end
create_audit_table() click to toggle source
# File lib/audit_tables/base.rb, line 51
def create_audit_table
  create_table audit_table_name, id: false do |t|
    t.integer :audit_id, null: false
    t.string :audit_operation, null: false
    t.datetime :audit_timestamp, null: false
  end

  add_column audit_table_name, :id, klass.columns_hash['id'].type
end
default() click to toggle source
# File lib/audit_tables/base.rb, line 61
def default
  column.default
end
limit() click to toggle source
# File lib/audit_tables/base.rb, line 65
def limit
  column.limit
end
null() click to toggle source
# File lib/audit_tables/base.rb, line 69
def null
  column.null
end
precision() click to toggle source
# File lib/audit_tables/base.rb, line 73
def precision
  column.precision
end
properties() click to toggle source
# File lib/audit_tables/base.rb, line 77
def properties
  elements = {}

  elements[:limit] = limit unless limit.nil?
  elements[:precision] = precision unless precision.nil?
  elements[:scale] = scale unless scale.nil?
  elements[:default] = default unless default.nil?
  elements[:null] = null

  elements
end
scale() click to toggle source
# File lib/audit_tables/base.rb, line 89
def scale
  column.scale
end
sync_audit_tables() click to toggle source
# File lib/audit_tables/base.rb, line 30
def sync_audit_tables
  create_audit_table unless table_exists?
  audit_columns
end
table_exists?() click to toggle source
# File lib/audit_tables/base.rb, line 93
def table_exists?
  ActiveRecord::Base.connection.data_source_exists? audit_table_name
end