module Immortal::SingularAssociation

Mixin to provide the singular association readers for _only_deleted and _with_deleted.

Attributes

only_deleted_loaded[R]
only_deleted_loaded?[R]
only_deleted_target[R]
with_deleted_loaded[R]
with_deleted_loaded?[R]
with_deleted_target[R]

Public Instance Methods

only_deleted_reader(force_reload = false) click to toggle source
# File lib/immortal/singular_association.rb, line 11
def only_deleted_reader(force_reload = false)
  reader_only_deleted(force_reload)
end
with_deleted_reader(force_reload = false) click to toggle source
# File lib/immortal/singular_association.rb, line 7
def with_deleted_reader(force_reload = false)
  reader_with_deleted(force_reload)
end

Private Instance Methods

find_only_deleted_target() click to toggle source
# File lib/immortal/singular_association.rb, line 124
def find_only_deleted_target
  return nil unless klass
  klass.unscoped do
    scope.where(deleted: true).first.tap do |record|
      set_inverse_instance(record)
    end
  end
end
find_only_deleted_target?() click to toggle source
# File lib/immortal/singular_association.rb, line 69
def find_only_deleted_target?
  !only_deleted_loaded? &&
    (!owner.new_record? || foreign_key_present?) &&
    klass
end
find_with_deleted_target() click to toggle source
# File lib/immortal/singular_association.rb, line 117
def find_with_deleted_target
  return nil unless klass
  klass.unscoped do
    scope.first.tap { |record| set_inverse_instance(record) }
  end
end
find_with_deleted_target?() click to toggle source
# File lib/immortal/singular_association.rb, line 63
def find_with_deleted_target?
  !with_deleted_loaded? &&
    (!owner.new_record? || foreign_key_present?) &&
    klass
end
load_only_deleted_target() click to toggle source
# File lib/immortal/singular_association.rb, line 86
def load_only_deleted_target
  if find_only_deleted_target?
    @only_deleted_target ||= find_only_deleted_target
  end

  only_deleted_loaded! unless only_deleted_loaded?
  only_deleted_target
rescue ActiveRecord::RecordNotFound
  only_deleted_reset
end
load_with_deleted_target() click to toggle source
# File lib/immortal/singular_association.rb, line 75
def load_with_deleted_target
  if find_with_deleted_target?
    @with_deleted_target ||= find_with_deleted_target
  end

  with_deleted_loaded! unless with_deleted_loaded?
  with_deleted_target
rescue ActiveRecord::RecordNotFound
  with_deleted_reset
end
only_deleted_loaded!() click to toggle source
# File lib/immortal/singular_association.rb, line 36
def only_deleted_loaded!
  @only_deleted_loaded      = true
  @only_deleted_stale_state = stale_state
end
reader_only_deleted(force_reload = false) click to toggle source
# File lib/immortal/singular_association.rb, line 107
def reader_only_deleted(force_reload = false)
  if force_reload
    klass.uncached { reload_only_deleted } if klass
  elsif !only_deleted_loaded? || stale_only_deleted_target?
    reload_only_deleted
  end

  only_deleted_target
end
reader_with_deleted(force_reload = false) click to toggle source
# File lib/immortal/singular_association.rb, line 97
def reader_with_deleted(force_reload = false)
  if force_reload
    klass.uncached { reload_with_deleted } if klass
  elsif !with_deleted_loaded? || stale_with_deleted_target?
    reload_with_deleted
  end

  with_deleted_target
end
reload_only_deleted() click to toggle source
# File lib/immortal/singular_association.rb, line 49
def reload_only_deleted
  reset_only_deleted
  reset_scope
  load_only_deleted_target
  self if only_deleted_target
end
reload_with_deleted() click to toggle source
# File lib/immortal/singular_association.rb, line 56
def reload_with_deleted
  reset_with_deleted
  reset_scope
  load_with_deleted_target
  self if with_deleted_target
end
reset_only_deleted() click to toggle source
# File lib/immortal/singular_association.rb, line 26
def reset_only_deleted
  @only_deleted_loaded = false
  @only_deleted_target = nil
end
reset_with_deleted() click to toggle source
# File lib/immortal/singular_association.rb, line 21
def reset_with_deleted
  @with_deleted_loaded = false
  @with_deleted_target = nil
end
stale_only_deleted_target?() click to toggle source
# File lib/immortal/singular_association.rb, line 45
def stale_only_deleted_target?
  only_deleted_loaded? && @only_deleted_stale_state != stale_state
end
stale_with_deleted_target?() click to toggle source
# File lib/immortal/singular_association.rb, line 41
def stale_with_deleted_target?
  with_deleted_loaded? && @with_deleted_stale_state != stale_state
end
with_deleted_loaded!() click to toggle source
# File lib/immortal/singular_association.rb, line 31
def with_deleted_loaded!
  @with_deleted_loaded      = true
  @with_deleted_stale_state = stale_state
end