class Tango::Resource::Buffer
Resource
buffer
@author Mckomo
Public Class Methods
new( size = 500 )
click to toggle source
Constructor of the Buffer
@param size [Integer] @return [Tango::Resource::Buffer]
# File lib/tango/resource/buffer.rb, line 13 def initialize( size = 500 ) # Set max size of the buffer @size = size # Buffer storage for resources @resources = {} # Container of callbacks for each registered resource type @callbacks = {} end
Public Instance Methods
fill( type, resource )
click to toggle source
Fill buffer with a resource
@param type [Symbol] @param resource [Object]
# File lib/tango/resource/buffer.rb, line 42 def fill( type, resource ) raise ArgumentError, "Trying to fill object with unregistered type" unless @resources.keys.include?( type ) # Append resource to the buffer @resources[type] << resource # Release the buffer if buffer size exceeded release( type ) if @resources[type].count >= @size end
register( type, &release_callback )
click to toggle source
Register new type of resource to be buffered
@param type [Symbol] @param release_callback [Proc]
# File lib/tango/resource/buffer.rb, line 29 def register( type, &release_callback ) raise ArgumentError, "No release callback given" unless block_given? @resources[type] = [] @callbacks[type] = release_callback end
release_all()
click to toggle source
Release all registered buffers
# File lib/tango/resource/buffer.rb, line 53 def release_all @resources.keys.each { |type| release( type ) } end
Private Instance Methods
release( type )
click to toggle source
Release buffer with given type
@param type [Symbol]
# File lib/tango/resource/buffer.rb, line 62 def release( type ) # Trigger callback on released resources @callbacks[type].tap do |c| c.call( @resources[type] ) end @resources[type].clear # Clear resources from the buffer end