class PGTrunk::Operations::Triggers::ChangeTrigger

@private

Public Instance Methods

invert() click to toggle source
# File lib/pg_trunk/operations/triggers/change_trigger.rb, line 44
    def invert
      irreversible!("if_exists: true") if if_exists
      undefined = inversion.select { |_, v| v.nil? }.keys.join(", ").presence
      raise IrreversibleMigration.new(self, nil, <<~MSG.squish) if undefined
        Undefined values to revert #{undefined}.
      MSG

      self.class.new(**inversion, table: table, name: name)
    end
to_sql(server_version) click to toggle source
# File lib/pg_trunk/operations/triggers/change_trigger.rb, line 38
def to_sql(server_version)
  return create_trigger&.to_sql(server_version) if server_version >= "14"

  raise "The operation is supported by PostgreSQL server v14+"
end

Private Instance Methods

changes() click to toggle source
# File lib/pg_trunk/operations/triggers/change_trigger.rb, line 56
def changes
  @changes ||= {
    type: type.presence,
    events: events.presence,
    columns: columns.presence,
    constraint: constraint,
    for_each: for_each,
    function: function.presence,
    initially: initially,
    when: self.when.presence,
    comment: comment,
  }.compact
end
create_trigger() click to toggle source
# File lib/pg_trunk/operations/triggers/change_trigger.rb, line 78
def create_trigger
  return if name.blank? || table.blank?

  @create_trigger ||=
    CreateTrigger
    .find { |o| o.name == name && o.table == table }
    &.tap { |o| o.attributes = { **changes, replace_existing: true } }
end
inversion() click to toggle source
# File lib/pg_trunk/operations/triggers/change_trigger.rb, line 70
def inversion
  changes
    .each_with_object({}) { |(k, _), obj| obj[k] = send(:"from_#{k}") }
    .tap do |i|
      i[:for_each] ||= (%i[statement row] - [for_each]).first if for_each
    end
end