Sha256: 2da588c9ca9a80782eaac86777aabc855c8a24fa850341baf6f78f1ee09f7fea
Contents?: true
Size: 1.29 KB
Versions: 2
Compression:
Stored size: 1.29 KB
Contents
module Warden module GitHub # A hash subclass that acts as a cache for organization and team # membership states. Only membership states that are true are cached. These # are invalidated after a certain time. class MembershipCache CACHE_TIMEOUT = 60 * 5 def initialize(data) @data = data end # Fetches a membership status by type and id (e.g. 'org', 'my_company') # from cache. If no cached value is present or if the cached value # expired, the block will be invoked and the return value, if true, # cached for e certain time. def fetch_membership(type, id) type = type.to_s id = id.to_s if cached_membership_valid?(type, id) true elsif block_given? && yield cache_membership(type, id) true else false end end private def cached_membership_valid?(type, id) timestamp = @data.fetch(type).fetch(id) if Time.now.to_i > timestamp + CACHE_TIMEOUT @data.fetch(type).delete(id) false else true end rescue IndexError false end def cache_membership(type, id) hash = @data[type] ||= {} hash[id] = Time.now.to_i end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
warden-github-1.3.2 | lib/warden/github/membership_cache.rb |
warden-github-1.3.1 | lib/warden/github/membership_cache.rb |