Class: Thingfish::Datastore::Memory
- Inherits:
-
Thingfish::Datastore
- Object
- Thingfish::Datastore
- Thingfish::Datastore::Memory
- Extended by:
- Loggability
- Defined in:
- lib/thingfish/datastore/memory.rb
Overview
An in-memory datastore for testing and tryout purposes.
Instance Method Summary collapse
-
#each(&block) ⇒ Object
Iterator – yield a pair: UUID => datablob of each object in the datastore to the block, or return an Enumerator for each UUID if called without a block.
-
#each_oid(&block) ⇒ Object
Iterator – yield the UUID of each object in the datastore to the block, or return an Enumerator for each UUID if called without a block.
-
#fetch(oid) ⇒ Object
Fetch the data corresponding to the given
oidas an IOish object. -
#include?(oid) ⇒ Boolean
Return
trueif the datastore has data associated with the specifiedoid. -
#initialize(storage = {}) ⇒ Memory
constructor
Create a new MemoryDatastore, using the given
storageobject to store data in. -
#remove(oid) ⇒ Object
Remove the data associated with
oidfrom the Datastore. -
#replace(oid, io) ⇒ Object
Replace the existing object associated with
oidwith the data read from the givenio. -
#save(io) ⇒ Object
Save the
dataread from the specifiedioand return an ID that can be used to fetch it later.
Methods inherited from Thingfish::Datastore
Methods included from Normalization
make_object_id, normalize_key, normalize_keys, normalize_oid
Constructor Details
#initialize(storage = {}) ⇒ Memory
Create a new MemoryDatastore, using the given storage object to store data in. The storage should quack like a Hash.
19 20 21 |
# File 'lib/thingfish/datastore/memory.rb', line 19 def initialize( storage={} ) @storage = storage end |
Instance Method Details
#each(&block) ⇒ Object
Iterator – yield a pair:
UUID => datablob
of each object in the datastore to the block, or return an Enumerator for each UUID if called without a block.
88 89 90 |
# File 'lib/thingfish/datastore/memory.rb', line 88 def each( &block ) return @storage.each( &block ) end |
#each_oid(&block) ⇒ Object
Iterator – yield the UUID of each object in the datastore to the block, or return an Enumerator for each UUID if called without a block.
79 80 81 |
# File 'lib/thingfish/datastore/memory.rb', line 79 def each_oid( &block ) return @storage.each_key( &block ) end |
#fetch(oid) ⇒ Object
Fetch the data corresponding to the given oid as an IOish object.
55 56 57 58 59 60 |
# File 'lib/thingfish/datastore/memory.rb', line 55 def fetch( oid ) oid = normalize_oid( oid ) self.log.debug "Fetching data for OID %s" % [ oid ] data = @storage[ oid ] or return nil return StringIO.new( data ) end |
#include?(oid) ⇒ Boolean
Return true if the datastore has data associated with the specified oid.
71 72 73 74 |
# File 'lib/thingfish/datastore/memory.rb', line 71 def include?( oid ) oid = normalize_oid( oid ) return @storage.include?( oid ) end |
#remove(oid) ⇒ Object
Remove the data associated with oid from the Datastore.
64 65 66 67 |
# File 'lib/thingfish/datastore/memory.rb', line 64 def remove( oid ) oid = normalize_oid( oid ) @storage.delete( oid ) end |
#replace(oid, io) ⇒ Object
Replace the existing object associated with oid with the data read from the given io.
41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/thingfish/datastore/memory.rb', line 41 def replace( oid, io ) offset = io.pos data = io.read.dup oid = normalize_oid( oid ) self.log.debug "Replacing data under OID %s with %d bytes" % [ oid, data.bytesize ] @storage[ oid ] = data io.pos = offset return true end |
#save(io) ⇒ Object
Save the data read from the specified io and return an ID that can be used to fetch it later.
26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/thingfish/datastore/memory.rb', line 26 def save( io ) oid = make_object_id() offset = io.pos data = io.read.dup self.log.debug "Saving %d bytes of data under OID %s" % [ data.bytesize, oid ] @storage[ oid ] = data io.pos = offset return oid end |