Module: ActiveRecord::Undo::ModelExtension::InstanceMethods

Defined in:
lib/active_record/undo/model_extension.rb

Instance Method Summary collapse

Instance Method Details

#expired?Boolean

Returns:

  • (Boolean)


56
57
58
59
60
61
62
63
64
# File 'lib/active_record/undo/model_extension.rb', line 56

def expired?
  return false unless soft_deleted?

  period = ActiveRecord::Undo.config.retention_period
  return false unless period

  timestamp = public_send(self.class.undoable_column)
  timestamp && timestamp < Time.current - period
end

#restore!Object

rubocop:disable Naming/PredicateMethod



92
93
94
95
96
97
98
99
# File 'lib/active_record/undo/model_extension.rb', line 92

def restore!
  ensure_undoable_column_exists!
  return false unless soft_deleted?

  restore_internally!(find_latest_undo_log_item)
  reload
  true
end

#soft_delete!Object



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/active_record/undo/model_extension.rb', line 75

def soft_delete!
  ensure_undoable_column_exists!
  return false if soft_deleted?

  undo_log = nil
  timestamp = Time.current

  transaction do
    undo_log = ActiveRecord::Undo::UndoLog.create!
    soft_delete_cascade_internal!(timestamp, undo_log)
    undo_log.save!
  end

  undo_log
end

#soft_deleted?Boolean

Returns:

  • (Boolean)


52
53
54
# File 'lib/active_record/undo/model_extension.rb', line 52

def soft_deleted?
  public_send(self.class.undoable_column).present?
end

#undoable?Boolean

Returns:

  • (Boolean)


66
67
68
69
70
71
72
73
# File 'lib/active_record/undo/model_extension.rb', line 66

def undoable?
  return false unless soft_deleted?

  ActiveRecord::Undo::UndoLogItem.joins(:undo_log).exists?(
    item_type: self.class.name,
    item_id: id
  )
end