namespace :pg_audit_log do

desc "Install audit_log triggers on all tables"
task :install => :environment do
  unless PgAuditLog::Entry.installed?
    puts "Creating #{PgAuditLog::Entry.table_name} table..."
    PgAuditLog::Entry.install
  end

  puts "Installing audit_changes() function..."
  PgAuditLog::Function.install

  puts "Installing all audit log triggers... "
  PgAuditLog::Triggers.install

  export_development_structure
end

desc "Uninstall audit log triggers on all tables"
task :uninstall => :environment do
  puts "Dropping all audit_log triggers... "
  PgAuditLog::Triggers.uninstall

  puts "Uninstalling audit_changes() function..."
  PgAuditLog::Function.uninstall

  export_development_structure
end

desc "Check all tables that are missing triggers (fails if any are)"
task :check => :environment do
  tables = PgAuditLog::Triggers.tables_without_triggers
  raise(PgAuditLog::Triggers::MissingTriggers, tables) if tables.any?
end

private

def export_development_structure
  puts "Exporting development_structure.sql..."
  Rake::Task["db:structure:dump"].reenable
  Rake::Task["db:structure:dump"].invoke
end

end