Class: Cachetier::Cache

Inherits:
Object
  • Object
show all
Defined in:
lib/cachetier/cache.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(tiers, &getter_block) ⇒ Cache

Returns a new instance of Cache.



10
11
12
13
14
15
16
17
18
19
20
# File 'lib/cachetier/cache.rb', line 10

def initialize(tiers, &getter_block)
  raise "Tiers cannot be nil" if !tiers
  raise "Tiers cannot be empty" if tiers.empty?

  @tiers = tiers.map do |name, options|
    tier_class = Tier.get_tier_class(name)
    tier = tier_class.new(options)
  end

  @getter_block = getter_block
end

Instance Attribute Details

#getter_blockObject (readonly)

Returns the value of attribute getter_block.



8
9
10
# File 'lib/cachetier/cache.rb', line 8

def getter_block
  @getter_block
end

#tiersObject (readonly)

Returns the value of attribute tiers.



8
9
10
# File 'lib/cachetier/cache.rb', line 8

def tiers
  @tiers
end

Instance Method Details

#[](key) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/cachetier/cache.rb', line 22

def [](key)
  prev_tiers = []

  # some tiers override the key. save original clone of it
  orig_key = begin 
    key.clone
  rescue
    key
  end

  tiers.each do |tier|       
    value = tier[key]
    key = orig_key

    if value
      update_tiers(key, value, prev_tiers)
      return nil if value == NilValue.value
      return value
    end
    prev_tiers << tier
  end

  # block might change key
  self[orig_key] = getter_block.call(key) if getter_block
end

#[]=(key, value) ⇒ Object



48
49
50
51
52
53
54
55
# File 'lib/cachetier/cache.rb', line 48

def []=(key, value)

  value = NilValue if value.nil?
  tiers.each do |tier|
    tier[key] = value if tier.writable?
  end
  return value
end