Module: SoftDeletion::Core

Defined in:
lib/soft_deletion/core.rb

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
# File 'lib/soft_deletion/core.rb', line 3

def self.included(base)
  unless base.ancestors.include?(ActiveRecord::Base)
    raise "You can only include this if #{base} extends ActiveRecord::Base"
  end
  base.extend(ClassMethods)

  # backport after_soft_delete so we can safely upgrade to rails 3
  if ActiveRecord::VERSION::MAJOR > 2
    base.define_model_callbacks :soft_delete
  else
    base.define_callbacks :before_soft_delete
    base.define_callbacks :after_soft_delete
  end
end

Instance Method Details

#deleted?Boolean

Returns:

  • (Boolean)


66
67
68
# File 'lib/soft_deletion/core.rb', line 66

def deleted?
  deleted_at.present?
end

#mark_as_deletedObject



70
71
72
# File 'lib/soft_deletion/core.rb', line 70

def mark_as_deleted
  self.deleted_at = Time.now
end

#mark_as_undeletedObject



74
75
76
# File 'lib/soft_deletion/core.rb', line 74

def mark_as_undeleted
  self.deleted_at = nil
end

#soft_delete(*args) ⇒ Object



82
83
84
# File 'lib/soft_deletion/core.rb', line 82

def soft_delete(*args)
  _run_soft_delete{ save(*args) }
end

#soft_delete!Object



78
79
80
# File 'lib/soft_deletion/core.rb', line 78

def soft_delete!
  _run_soft_delete { save! }
end

#soft_delete_dependenciesObject



94
95
96
# File 'lib/soft_deletion/core.rb', line 94

def soft_delete_dependencies
  self.class.soft_delete_dependents.map { |dependent| SoftDeletion::Dependency.new(self, dependent) }
end

#soft_undelete!Object



86
87
88
89
90
91
92
# File 'lib/soft_deletion/core.rb', line 86

def soft_undelete!
  self.class.transaction do
    mark_as_undeleted
    soft_delete_dependencies.each(&:soft_undelete!)
    save!
  end
end