module Archivist::Migration::ClassMethods

Public Instance Methods

method_missing_with_archive(method, *arguments, &block) click to toggle source
# File lib/archivist/migration.rb, line 16
def method_missing_with_archive(method, *arguments, &block)
  allowed = [:add_column,:add_timestamps,:change_column,
             :change_column_default,:change_table,:drop_table,
             :remove_column, :remove_columns, :remove_timestamps,
             :rename_column,:rename_table]
  return if arguments.include?(:deleted_at) || arguments.include?('deleted_at')
  
  if !arguments.empty? && allowed.include?(method)
    args = Marshal.load(Marshal.dump(arguments))
    args[0] = "archived_#{ActiveRecord::Migrator.proper_table_name(args[0])}"
    args[1] = "archived_#{args[1].to_s}" if method == :rename_table
    
    if ActiveRecord::Base.connection.table_exists?(args[0])
      ActiveRecord::Base.connection.send(method, *args, &block)
    end
  end
  method_missing_without_archive(method, *arguments, &block)
end