Class: Newman::Store
- Inherits:
-
Object
- Object
- Newman::Store
- Defined in:
- lib/newman/store.rb
Instance Method Summary collapse
-
#[](column_key) ⇒ Object
Newman::Store#[]is syntactic sugar for initializing aNewman::Recorderobject, and is meant to be used for accessing and manipulating column data bycolumn_key, i.e. -
#initialize(filename) ⇒ Store
constructor
To initialize a
Newman::Storeobject, afilenamestring must be provided, i.e. -
#read ⇒ Object
Newman::Store#readinitiates a read only transaction and then yields the underlyingPStoreobject stored in thedatafield. -
#write ⇒ Object
Newman::Store#readinitiates a read/write transaction and then yields the underlyingPStoreobject stored in thedatafield.
Constructor Details
#initialize(filename) ⇒ Store
To initialize a Newman::Store object, a filename string must
be provided, i.e.
store = Newman::Store.new("simple.store")
This filename will be used to initialize a PStore object after first
running FileUtils.mkdir_p to create any directories within the path to
the filename if they do not already exist. Once that PStore object is
created, two root keys will be mapped to empty Hash objects if they
are not set already: :indentifers and :columns.
While it's okay to treat the PStore object as an implementation detail,
we will treat our interactions with it as part of Newman's external
interface, so that we are more conservative about making backwards
incompatible changes to the databases created by Newman::Store.
32 33 34 35 36 37 38 39 40 41 |
# File 'lib/newman/store.rb', line 32 def initialize(filename) FileUtils.mkdir_p(File.dirname(filename)) self.data = PStore.new(filename) write do data[:identifiers] ||= {} data[:columns] ||= {} end end |
Instance Method Details
#[](column_key) ⇒ Object
Newman::Store#[] is syntactic sugar for initializing a
Newman::Recorder object, and is meant to be used for
accessing and manipulating column data by column_key, i.e.
store[:subscriptions].create("[email protected]")
This method is functionally equivalent to the following code:
recorder = Newman::Recorder.new(:subscriptions, store)
recorder.create("[email protected]")
For aesthetic reasons and for forward compatibility, it is
preferable to use Newman::Store#[] rather than instantiating
a Newman::Recorder object directly.
60 61 62 |
# File 'lib/newman/store.rb', line 60 def [](column_key) Recorder.new(column_key, self) end |
#read ⇒ Object
Newman::Store#read initiates a read only transaction and then yields
the underlying PStore object stored in the data field.
69 70 71 |
# File 'lib/newman/store.rb', line 69 def read data.transaction(:read_only) { yield(data) } end |
#write ⇒ Object
Newman::Store#read initiates a read/write transaction and then yields
the underlying PStore object stored in the data field.
78 79 80 |
# File 'lib/newman/store.rb', line 78 def write data.transaction { yield(data) } end |