Module: SoftDeletion::Core::ClassMethods
- Defined in:
- lib/soft_deletion/core.rb
Instance Method Summary collapse
- #mark_as_soft_deleted_sql ⇒ Object
- #soft_delete_all!(ids_or_models) ⇒ Object
- #soft_delete_dependents ⇒ Object
- #with_deleted ⇒ Object
Instance Method Details
#mark_as_soft_deleted_sql ⇒ Object
32 33 34 |
# File 'lib/soft_deletion/core.rb', line 32 def mark_as_soft_deleted_sql ["deleted_at = ?", Time.now] end |
#soft_delete_all!(ids_or_models) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/soft_deletion/core.rb', line 36 def soft_delete_all!(ids_or_models) ids_or_models = Array.wrap(ids_or_models) if ids_or_models.first.is_a?(ActiveRecord::Base) ids = ids_or_models.map(&:id) models = ids_or_models else ids = ids_or_models models = if ActiveRecord::VERSION::MAJOR >= 4 where(:id => ids) else all(:conditions => { :id => ids }) end end transaction do if ActiveRecord::VERSION::MAJOR >= 4 where(:id => ids).update_all(mark_as_soft_deleted_sql) else update_all(mark_as_soft_deleted_sql, :id => ids) end models.each do |model| model.soft_delete_dependencies.each(&:soft_delete!) model.run_callbacks ActiveRecord::VERSION::MAJOR > 2 ? :soft_delete : :after_soft_delete end end end |
#soft_delete_dependents ⇒ Object
19 20 21 22 23 |
# File 'lib/soft_deletion/core.rb', line 19 def soft_delete_dependents self.reflect_on_all_associations. select { |a| [:destroy, :delete_all, :nullify].include?(a.[:dependent]) }. map(&:name) end |
#with_deleted ⇒ Object
25 26 27 28 29 30 |
# File 'lib/soft_deletion/core.rb', line 25 def with_deleted method = (ActiveRecord::VERSION::MAJOR >= 4 ? :unscoped : :with_exclusive_scope) send(method) do yield self end end |