class InfoparkComponentCache::Guards::ValidUntil

@author Tomasz Przedmojski <tomasz.przedmojski@infopark.de>

This guard ensures that any object, whose valid until date has been passed will cause inconsistency.

Public Instance Methods

cache_key() click to toggle source

@return [String] the cache key for storing {#current_min_valid_until}

# File lib/infopark_component_cache/guards/valid_until.rb, line 33
def cache_key
  component.cache_key("min_valid_until")
end
consistent?() click to toggle source
# File lib/infopark_component_cache/guards/valid_until.rb, line 10
def consistent?
  if min_valid_until_known?
    no_changes_since?
  else
    current_min_valid_until.nil?
  end
end
current_min_valid_until() click to toggle source

@return [Time] the timestamp of the the object that will be deactivated in nearest future

# File lib/infopark_component_cache/guards/valid_until.rb, line 38
def current_min_valid_until
  str_value = scoped_relation.where("valid_until > ?", Time.now.to_iso).minimum(:valid_until)
  return str_value if str_value.kind_of? Time

  RailsConnector::DateAttribute.parse(str_value) if str_value.present?
end
guard!() click to toggle source
# File lib/infopark_component_cache/guards/valid_until.rb, line 18
def guard!
  cache.write(cache_key, current_min_valid_until)
end
min_valid_until_known?() click to toggle source

@return true if a timestamp can be read from cache with {#cache_key}

# File lib/infopark_component_cache/guards/valid_until.rb, line 23
def min_valid_until_known?
  cache.exist?(cache_key) && cache.read(cache_key).kind_of?(Time)
end
no_changes_since?() click to toggle source

@return true if no obj has been changed since last {#guard!}

# File lib/infopark_component_cache/guards/valid_until.rb, line 28
def no_changes_since?
  current_min_valid_until == cache.read(cache_key) && current_min_valid_until > Time.now
end