class AuditTables::BuildAuditTrigger
Attributes
table_name[R]
Public Class Methods
new(table_name)
click to toggle source
# File lib/audit_tables/build_audit_trigger.rb, line 6 def initialize(table_name) @table_name = table_name end
Public Instance Methods
build()
click to toggle source
rubocop:disable Metrics/MethodLength:
# File lib/audit_tables/build_audit_trigger.rb, line 11 def build sequence_name = "seq_audit_#{table_name}" execute %{ DROP TRIGGER IF EXISTS trigger_audit_#{table_name} ON #{table_name}; CREATE SEQUENCE IF NOT EXISTS #{sequence_name} START 1; CREATE OR REPLACE FUNCTION trigger_audit_#{table_name}_func() RETURNS TRIGGER AS $body$ BEGIN IF (TG_OP = 'INSERT') THEN INSERT INTO audit_#{table_name} SELECT nextval('#{sequence_name}'), 'INSERT', NOW(), * FROM #{table_name} WHERE id = NEW.id; ELSIF (TG_OP = 'UPDATE') THEN INSERT INTO audit_#{table_name} SELECT nextval('#{sequence_name}'), 'UPDATE', NOW(), * FROM #{table_name} WHERE id = OLD.id; ELSIF (TG_OP = 'DELETE') THEN INSERT INTO audit_#{table_name} SELECT nextval('#{sequence_name}'), 'DELETE', NOW(), OLD.*; END IF; RETURN NULL; END; $body$ LANGUAGE plpgsql SECURITY DEFINER; CREATE TRIGGER trigger_audit_#{table_name} AFTER INSERT OR UPDATE OR DELETE ON #{table_name} FOR EACH ROW EXECUTE PROCEDURE trigger_audit_#{table_name}_func(); } end