Class: PgSqlTriggers::Drift::Detector

Inherits:
Object
  • Object
show all
Defined in:
lib/pg_sql_triggers/drift/detector.rb

Class Method Summary collapse

Class Method Details

.detect(trigger_name) ⇒ Object

Detect drift for a single trigger



11
12
13
14
15
# File 'lib/pg_sql_triggers/drift/detector.rb', line 11

def detect(trigger_name)
  registry_entry = TriggerRegistry.find_by(trigger_name: trigger_name)
  db_trigger = DbQueries.find_trigger(trigger_name)
  detect_with_preloaded(registry_entry, db_trigger)
end

.detect_allObject

Detect drift for all triggers



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/pg_sql_triggers/drift/detector.rb', line 18

def detect_all
  registry_entries = TriggerRegistry.all.to_a
  db_triggers = DbQueries.all_triggers

  db_trigger_map = db_triggers.index_by { |t| t["trigger_name"] }

  results = registry_entries.map do |entry|
    detect_with_preloaded(entry, db_trigger_map[entry.trigger_name])
  end

  # Find unknown (external) triggers not in registry
  registry_trigger_names = registry_entries.to_set(&:trigger_name)
  db_triggers.each do |db_trigger|
    next if registry_trigger_names.include?(db_trigger["trigger_name"])

    results << unknown_state(db_trigger)
  end

  results
end

.detect_for_table(table_name) ⇒ Object

Detect drift for a specific table



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/pg_sql_triggers/drift/detector.rb', line 40

def detect_for_table(table_name)
  registry_entries = TriggerRegistry.for_table(table_name).to_a
  db_triggers = DbQueries.find_triggers_for_table(table_name)

  db_trigger_map = db_triggers.index_by { |t| t["trigger_name"] }

  results = registry_entries.map do |entry|
    detect_with_preloaded(entry, db_trigger_map[entry.trigger_name])
  end

  # Find unknown triggers on this table
  registry_trigger_names = registry_entries.to_set(&:trigger_name)
  db_triggers.each do |db_trigger|
    next if registry_trigger_names.include?(db_trigger["trigger_name"])

    results << unknown_state(db_trigger)
  end

  results
end