Class: Tango::Resource::Cache
- Inherits:
-
Object
- Object
- Tango::Resource::Cache
- Defined in:
- lib/tango/resource/cache.rb
Overview
Key - value caching system for resources
Instance Attribute Summary (collapse)
-
- (Object) buffer
readonly
Returns the value of attribute buffer.
Instance Method Summary (collapse)
-
- (Object) get(type, resource)
Getter for the cache storage.
-
- (Tango::Resources::Cache) initialize(buffer = nil)
constructor
Constructor of the Cache.
-
- (Object) load(type, resource)
Get a cached resource or use given block to obtain resource and return it.
-
- (Tango::Resource::Cache) register(type, &release_callback)
Register new type of resource to be cached.
-
- (Object) set(type, resource)
Setter for the cache storage.
Constructor Details
- (Tango::Resources::Cache) initialize(buffer = nil)
Constructor of the Cache
15 16 17 18 19 20 |
# File 'lib/tango/resource/cache.rb', line 15 def initialize( buffer = nil ) # Set dependencies @buffer = buffer || Buffer.new # Container for resources cache @storage = {} end |
Instance Attribute Details
- (Object) buffer (readonly)
Returns the value of attribute buffer
9 10 11 |
# File 'lib/tango/resource/cache.rb', line 9 def buffer @buffer end |
Instance Method Details
- (Object) get(type, resource)
Getter for the cache storage
79 80 81 82 |
# File 'lib/tango/resource/cache.rb', line 79 def get( type, resource ) raise ArgumentError, "Trying to get resource with unregistered type" unless @storage.keys.include?( type ) @storage[type][resource.cache_key] end |
- (Object) load(type, resource)
Get a cached resource or use given block to obtain resource and return it
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/tango/resource/cache.rb', line 43 def load( type, resource ) # Get resource from cache cached_resource = get( type, resource ) unless cached_resource raise ArgumentError, "No resource callback given" unless block_given? # If not found, execute yield to receive transformed resource cached_resource = yield( resource ) # Cache new resource set( type, cached_resource ) # Fill buffer with newly cached resource @buffer.fill( type, cached_resource ) end cached_resource end |
- (Tango::Resource::Cache) register(type, &release_callback)
Register new type of resource to be cached
27 28 29 30 31 32 33 34 35 36 |
# File 'lib/tango/resource/cache.rb', line 27 def register( type, &release_callback ) # Create container for cache of new resource @storage[type] = {} # Also register new type with buffer @buffer.register( type, &release_callback ) self end |
- (Object) set(type, resource)
Setter for the cache storage
69 70 71 72 |
# File 'lib/tango/resource/cache.rb', line 69 def set( type, resource ) raise ArgumentError, "Trying to set resource with unregistered type" unless @storage.keys.include?( type ) @storage[type][resource.cache_key] = resource end |