Module: PersistentRecord

Defined in:
lib/persistent_record.rb,
lib/persistent_record/version.rb

Defined Under Namespace

Modules: Callbacks, Query

Constant Summary collapse

VERSION =
'0.2.2.1'

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(source) ⇒ Object


6
7
8
9
# File 'lib/persistent_record.rb', line 6

def self.included(source)
  source.extend Query
  source.extend Callbacks
end

Instance Method Details

#deleteObject


67
68
69
70
# File 'lib/persistent_record.rb', line 67

def delete
  return if new_record?
  touch_record_deleted_at_column(false)
end

#destroyObject Also known as: discard


56
57
58
59
# File 'lib/persistent_record.rb', line 56

def destroy
  callbacks_result = run_callbacks(:destroy) { touch_record_deleted_at_column(true) }
  callbacks_result ? self : false
end

#destroy!Object


62
63
64
# File 'lib/persistent_record.rb', line 62

def destroy!
  discarded? ? super : destroy || raise(ActiveRecord::RecordNotDestroyed)
end

#discarded?Boolean

Returns:

  • (Boolean)

83
84
85
# File 'lib/persistent_record.rb', line 83

def discarded?
  !!send(record_deleted_at_column)
end

#force_destroy!Object


87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/persistent_record.rb', line 87

def force_destroy!
  transaction do
    run_callbacks(:force_destroy) do
      dependent_reflections = self.class.reflections.select do |name, reflection|
        reflection.options[:dependent] == :destroy
      end
      if dependent_reflections.any?
        dependent_reflections.each do |name|
          associated_records = self.send(name)
          associated_records = associated_records.with_discarded if associated_records.respond_to?(:with_discarded)
          associated_records.each(&:force_destroy!)
        end
      end
      default_destroy
    end
  end
end

#restore!(options = {}) ⇒ Object


74
75
76
77
78
79
80
81
# File 'lib/persistent_record.rb', line 74

def restore!(options = {})
  ActiveRecord::Base.transaction do
    run_callbacks(:restore) do
      update_column record_deleted_at_column, nil
      restore_associated_records if options[:recursive]
    end
  end
end