Class: Cachetier::Cache
- Inherits:
-
Object
- Object
- Cachetier::Cache
- Defined in:
- lib/cachetier/cache.rb
Instance Attribute Summary collapse
-
#getter_block ⇒ Object
readonly
Returns the value of attribute getter_block.
-
#tiers ⇒ Object
readonly
Returns the value of attribute tiers.
Instance Method Summary collapse
- #[](key) ⇒ Object
- #[]=(key, value) ⇒ Object
-
#initialize(tiers, &getter_block) ⇒ Cache
constructor
A new instance of Cache.
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, | tier_class = Tier.get_tier_class(name) tier = tier_class.new() end @getter_block = getter_block end |
Instance Attribute Details
#getter_block ⇒ Object (readonly)
Returns the value of attribute getter_block.
8 9 10 |
# File 'lib/cachetier/cache.rb', line 8 def getter_block @getter_block end |
#tiers ⇒ Object (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 |