class ActiveRecord::Migration
Public Instance Methods
create_trigger(table_name, trigger_name, after: nil, before: nil, declare: nil)
click to toggle source
# File lib/pgtrigger/active_record/migration.rb, line 3 def create_trigger(table_name, trigger_name, after: nil, before: nil, declare: nil) raise "Not defined after or before for create_trigger" unless after || before raise "Define only on after or before" if after && before trigger_name = Pgtrigger::Utils.build_trigger_name(table_name, trigger_name) if declare declare = "DECLARE \n\t\t#{declare.map{|var| var.to_a.join(" ")}.join(";\n\t\t")};" end execute(<<-TRIGGERSQL CREATE OR REPLACE FUNCTION #{trigger_name}_func() RETURNS trigger LANGUAGE plpgsql AS $function$ #{declare} BEGIN #{yield} END; $function$ TRIGGERSQL ) after = after.join(" OR ") if ["Array"].include?(after.class.to_s) after = "AFTER #{after}" if after before = before.join(" OR ") if ["Array"].include?(before.class.to_s) before = "BEFORE #{before}" if before execute(<<-TRIGGERSQL CREATE TRIGGER #{trigger_name}_trigger #{after} #{before} ON #{table_name} FOR EACH ROW EXECUTE PROCEDURE #{trigger_name}_func() TRIGGERSQL ) end
remove_trigger(table_name, trigger_name = nil)
click to toggle source
# File lib/pgtrigger/active_record/migration.rb, line 40 def remove_trigger(table_name, trigger_name = nil) trigger_name = Pgtrigger::Utils.build_trigger_name(table_name, trigger_name) execute("DROP TRIGGER IF EXISTS #{trigger_name}_trigger ON #{table_name};") execute("DROP FUNCTION IF EXISTS #{trigger_name}_func();") end