Module: Sequel::Plugins::SoftDeletes::InstanceMethods

Defined in:
lib/sequel/plugins/soft_deletes.rb

Overview

Methods to extend Model instances with.

Instance Method Summary collapse

Instance Method Details

#after_soft_deleteObject

Default (empty) ‘after’ soft-delete hook.



112
# File 'lib/sequel/plugins/soft_deletes.rb', line 112

def after_soft_delete; end

#around_soft_deleteObject

Default (empty) ‘around’ soft-delete model hook.



107
108
109
# File 'lib/sequel/plugins/soft_deletes.rb', line 107

def around_soft_delete
  yield
end

#before_soft_deleteObject

Default ‘before’ soft-delete hook checks if object is soft-deletable. Aborts soft-deletion if it returns false.



102
103
104
# File 'lib/sequel/plugins/soft_deletes.rb', line 102

def before_soft_delete
  return self.soft_deletable?
end

#remove_soft_deletion_blockersObject

Remove soft-deletion blockers. Default soft-deletion raises NotImplementedError.

Raises:

  • (NotImplementedError)


96
97
98
# File 'lib/sequel/plugins/soft_deletes.rb', line 96

def remove_soft_deletion_blockers
  raise NotImplementedError
end

#soft_deletable?Boolean

Returns true if the object is soft-deletable. By default, an object is soft-deletable if it has no soft_deletion_blockers.

Returns:

  • (Boolean)


68
69
70
# File 'lib/sequel/plugins/soft_deletes.rb', line 68

def soft_deletable?
  return self.soft_deletion_blockers.empty?
end

#soft_deleteObject

Soft-delete this instance.



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/sequel/plugins/soft_deletes.rb', line 73

def soft_delete
  column = self.class.soft_delete_column

  self.db.transaction do
    supered_from_around = false
    self.around_soft_delete do
      supered_from_around = true
      raise_hook_failure(:before_soft_delete) unless self.before_soft_delete

      self.update(column => Time.now)

      self.after_soft_delete
    end
    raise_hook_failure(:around_soft_delete) unless supered_from_around
  end
end

#soft_delete_columnObject

Return the information for the soft-deletes column.



115
116
117
118
119
# File 'lib/sequel/plugins/soft_deletes.rb', line 115

def soft_delete_column
  return self.class.schema.columns.find do |col|
    col[:name] == self.class.soft_delete_column
  end
end

#soft_deleted?Boolean Also known as: is_soft_deleted?

Returns true if this object should be considered deleted.

Returns:

  • (Boolean)


59
60
61
62
# File 'lib/sequel/plugins/soft_deletes.rb', line 59

def soft_deleted?
  column = self.class.soft_delete_column
  return self[column] ? true : false
end

#soft_deletion_blockersObject

Returns an array of conditions preventing soft-deletion. Default is an empty array.



91
92
93
# File 'lib/sequel/plugins/soft_deletes.rb', line 91

def soft_deletion_blockers
  return []
end