Class: Qinium::HostManager::Cache
- Inherits:
-
Object
- Object
- Qinium::HostManager::Cache
- Defined in:
- lib/qinium/host_manager.rb
Instance Method Summary collapse
- #cache_key(access_key, bucket) ⇒ Object
- #delete(access_key, bucket) ⇒ Object
-
#initialize ⇒ Cache
constructor
A new instance of Cache.
- #read(access_key, bucket, &block) ⇒ Object
- #write(access_key, bucket, hosts) ⇒ Object
Constructor Details
#initialize ⇒ Cache
Returns a new instance of Cache.
4 5 6 7 |
# File 'lib/qinium/host_manager.rb', line 4 def initialize @mutex = Mutex.new @hosts = {} end |
Instance Method Details
#cache_key(access_key, bucket) ⇒ Object
38 39 40 |
# File 'lib/qinium/host_manager.rb', line 38 def cache_key(access_key, bucket) Digest::SHA1.base64digest "#{access_key}-#{bucket}" end |
#delete(access_key, bucket) ⇒ Object
32 33 34 35 36 |
# File 'lib/qinium/host_manager.rb', line 32 def delete(access_key, bucket) @mutex.synchronize do @hosts.delete(cache_key(access_key, bucket)) end end |
#read(access_key, bucket, &block) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/qinium/host_manager.rb', line 9 def read(access_key, bucket, &block) @mutex.synchronize do key = cache_key(access_key, bucket) data = @hosts[key] if data && Time.now.to_i > data["expires_at"] @hosts.delete key data = nil end if data.nil? data = block.call data["expires_at"] = Time.now.to_i + data["ttl"] @hosts[key] = data.freeze end data end end |
#write(access_key, bucket, hosts) ⇒ Object
26 27 28 29 30 |
# File 'lib/qinium/host_manager.rb', line 26 def write(access_key, bucket, hosts) @mutex.synchronize do @hosts[cache_key(access_key, bucket)] = hosts end end |