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 a `Newman::Recorder` object, and is meant to be used for accessing and manipulating column data by `column_key`, i.e.
-
#initialize(filename) ⇒ Store
constructor
To initialize a ‘Newman::Store` object, a `filename` string must be provided, i.e.
-
#read ⇒ Object
‘Newman::Store#read` initiates a read only transaction and then yields the underlying `PStore` object stored in the `data` field.
-
#write ⇒ Object
‘Newman::Store#read` initiates a read/write transaction and then yields the underlying `PStore` object stored in the `data` field.
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 |