module ActsAsParanoid::Core::ClassMethods

Constants

DESTROYING_ASSOCIATION_DEPENDENCY_TYPES

Public Class Methods

extended(base) click to toggle source
# File lib/acts_as_paranoid/core.rb, line 10
def self.extended(base)
  base.define_callbacks :recover
end

Public Instance Methods

after_recover(method) click to toggle source
# File lib/acts_as_paranoid/core.rb, line 18
def after_recover(method)
  set_callback :recover, :after, method
end
before_recover(method) click to toggle source
# File lib/acts_as_paranoid/core.rb, line 14
def before_recover(method)
  set_callback :recover, :before, method
end
boolean_type_not_nullable?() click to toggle source
# File lib/acts_as_paranoid/core.rb, line 61
def boolean_type_not_nullable?
  paranoid_column_type == :boolean && !paranoid_configuration[:allow_nulls]
end
delete_all(conditions = nil) click to toggle source
# File lib/acts_as_paranoid/core.rb, line 41
def delete_all(conditions = nil)
  where(conditions)
    .update_all(["#{paranoid_configuration[:column]} = ?", delete_now_value])
end
delete_all!(conditions = nil) click to toggle source
# File lib/acts_as_paranoid/core.rb, line 37
def delete_all!(conditions = nil)
  without_paranoid_default_scope.delete_all!(conditions)
end
delete_now_value() click to toggle source
# File lib/acts_as_paranoid/core.rb, line 85
def delete_now_value
  case paranoid_configuration[:column_type]
  when "time" then Time.now
  when "boolean" then true
  when "string" then paranoid_configuration[:deleted_value]
  end
end
dependent_associations() click to toggle source
# File lib/acts_as_paranoid/core.rb, line 79
def dependent_associations
  reflect_on_all_associations.select do |a|
    DESTROYING_ASSOCIATION_DEPENDENCY_TYPES.include?(a.options[:dependent])
  end
end
only_deleted() click to toggle source
# File lib/acts_as_paranoid/core.rb, line 26
def only_deleted
  if string_type_with_deleted_value?
    without_paranoid_default_scope
      .where(paranoid_column_reference => paranoid_configuration[:deleted_value])
  elsif boolean_type_not_nullable?
    without_paranoid_default_scope.where(paranoid_column_reference => true)
  else
    without_paranoid_default_scope.where.not(paranoid_column_reference => nil)
  end
end
paranoid_column() click to toggle source
# File lib/acts_as_paranoid/core.rb, line 65
def paranoid_column
  paranoid_configuration[:column].to_sym
end
paranoid_column_reference() click to toggle source
# File lib/acts_as_paranoid/core.rb, line 73
def paranoid_column_reference
  "#{table_name}.#{paranoid_column}"
end
paranoid_column_type() click to toggle source
# File lib/acts_as_paranoid/core.rb, line 69
def paranoid_column_type
  paranoid_configuration[:column_type].to_sym
end
paranoid_default_scope() click to toggle source
# File lib/acts_as_paranoid/core.rb, line 46
def paranoid_default_scope
  if string_type_with_deleted_value?
    all.table[paranoid_column].eq(nil)
      .or(all.table[paranoid_column].not_eq(paranoid_configuration[:deleted_value]))
  elsif boolean_type_not_nullable?
    all.table[paranoid_column].eq(false)
  else
    all.table[paranoid_column].eq(nil)
  end
end
recovery_value() click to toggle source
# File lib/acts_as_paranoid/core.rb, line 93
def recovery_value
  if boolean_type_not_nullable?
    false
  else
    nil
  end
end
string_type_with_deleted_value?() click to toggle source
# File lib/acts_as_paranoid/core.rb, line 57
def string_type_with_deleted_value?
  paranoid_column_type == :string && !paranoid_configuration[:deleted_value].nil?
end
with_deleted() click to toggle source
# File lib/acts_as_paranoid/core.rb, line 22
def with_deleted
  without_paranoid_default_scope
end

Protected Instance Methods

define_deleted_time_scopes() click to toggle source
# File lib/acts_as_paranoid/core.rb, line 103
def define_deleted_time_scopes
  scope :deleted_inside_time_window, lambda { |time, window|
    deleted_after_time((time - window)).deleted_before_time((time + window))
  }

  scope :deleted_after_time, lambda { |time|
    only_deleted
      .where("#{table_name}.#{paranoid_column} > ?", time)
  }
  scope :deleted_before_time, lambda { |time|
    only_deleted
      .where("#{table_name}.#{paranoid_column} < ?", time)
  }
end
without_paranoid_default_scope() click to toggle source
# File lib/acts_as_paranoid/core.rb, line 118
def without_paranoid_default_scope
  scope = all

  unless scope.unscope_values.include?({ where: paranoid_column })
    # unscope avoids applying the default scope when using this scope for associations
    scope = scope.unscope(where: paranoid_column)
  end

  scope
end