Class: Breathing::Trigger
- Inherits:
-
Object
- Object
- Breathing::Trigger
- Defined in:
- lib/breathing/trigger.rb
Instance Attribute Summary collapse
-
#log_table_name ⇒ Object
readonly
Returns the value of attribute log_table_name.
-
#model ⇒ Object
readonly
Returns the value of attribute model.
Instance Method Summary collapse
- #create ⇒ Object
- #drop ⇒ Object
-
#initialize(model, log_table_name) ⇒ Trigger
constructor
A new instance of Trigger.
Constructor Details
#initialize(model, log_table_name) ⇒ Trigger
Returns a new instance of Trigger.
8 9 10 11 |
# File 'lib/breathing/trigger.rb', line 8 def initialize(model, log_table_name) @model = model @log_table_name = log_table_name end |
Instance Attribute Details
#log_table_name ⇒ Object (readonly)
Returns the value of attribute log_table_name.
6 7 8 |
# File 'lib/breathing/trigger.rb', line 6 def log_table_name @log_table_name end |
#model ⇒ Object (readonly)
Returns the value of attribute model.
6 7 8 |
# File 'lib/breathing/trigger.rb', line 6 def model @model end |
Instance Method Details
#create ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/breathing/trigger.rb', line 13 def create exists_trigger_names = ActiveRecord::Base.connection.triggers.keys trigger_name = "#{log_table_name}_insert_#{model.table_name}" create_insert_trigger(trigger_name, model) if exists_trigger_names.exclude?(trigger_name) trigger_name = "#{log_table_name}_update_#{model.table_name}" create_update_trigger(trigger_name, model) if exists_trigger_names.exclude?(trigger_name) trigger_name = "#{log_table_name}_delete_#{model.table_name}" create_delete_trigger(trigger_name, model) if exists_trigger_names.exclude?(trigger_name) end |
#drop ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/breathing/trigger.rb', line 26 def drop trigger_names = %w[insert update delete].map { |action| "#{log_table_name}_#{action}_#{model.table_name}" } trigger_names.each do |trigger_name| begin sql = "DROP TRIGGER IF EXISTS #{trigger_name}" if postgresql? sql << " ON #{model.table_name} CASCADE;" sql << " DROP FUNCTION IF EXISTS #{trigger_name} CASCADE;" end puts sql ActiveRecord::Base.connection.execute(sql) rescue StandardError => e puts "#{e.} trigger_name:#{trigger_name}" end end end |