Class: KeyValueTree::TransactionStore
- Inherits:
-
Store
- Object
- Store
- KeyValueTree::TransactionStore
show all
- Defined in:
- lib/keyvaluetree/transaction_store.rb
Instance Method Summary
collapse
Methods inherited from Store
#delete_all, #keys_starting_with
Constructor Details
#initialize(store = MemoryStore.new()) ⇒ TransactionStore
Returns a new instance of TransactionStore.
5
6
7
8
9
|
# File 'lib/keyvaluetree/transaction_store.rb', line 5
def initialize(store = MemoryStore.new())
@store = store
@access_mutex = Mutex.new()
reset()
end
|
Instance Method Details
#commit ⇒ Object
55
56
57
58
59
60
61
62
63
64
65
|
# File 'lib/keyvaluetree/transaction_store.rb', line 55
def commit
@access_mutex.synchronize do
@changed_properties.each do |key, value|
@store.store(key, value)
end
@deleted_property_keys.each do |key|
@store.delete(key)
end
reset()
end
end
|
#delete(key) ⇒ Object
27
28
29
30
31
32
|
# File 'lib/keyvaluetree/transaction_store.rb', line 27
def delete(key)
@access_mutex.synchronize do
@changed_properties.delete(key)
@deleted_property_keys << key
end
end
|
#key(key) ⇒ Object
11
12
13
14
15
16
17
|
# File 'lib/keyvaluetree/transaction_store.rb', line 11
def key(key)
@access_mutex.synchronize do
result = @changed_properties[key]
return result unless result.nil?
@store.key(key)
end
end
|
#keys ⇒ Object
34
35
36
37
38
39
40
41
42
|
# File 'lib/keyvaluetree/transaction_store.rb', line 34
def keys
@access_mutex.synchronize do
result = @store.keys + @changed_properties.keys
@deleted_property_keys.each do |key|
result.delete(key)
end
result
end
end
|
#pending_changes? ⇒ Boolean
73
74
75
|
# File 'lib/keyvaluetree/transaction_store.rb', line 73
def pending_changes?
!(@changed_properties.empty? && @deleted_property_keys.empty?)
end
|
#rollback ⇒ Object
67
68
69
70
71
|
# File 'lib/keyvaluetree/transaction_store.rb', line 67
def rollback
@access_mutex.synchronize do
reset()
end
end
|
#store(key, value) ⇒ Object
19
20
21
22
23
24
25
|
# File 'lib/keyvaluetree/transaction_store.rb', line 19
def store(key, value)
@access_mutex.synchronize do
@changed_properties[key] = value
@deleted_property_keys.delete(key)
value
end
end
|
#to_hash ⇒ Object
44
45
46
47
48
49
50
51
52
53
|
# File 'lib/keyvaluetree/transaction_store.rb', line 44
def to_hash
result = @store.to_hash
@changed_properties.each do |key, value|
result[key] = value
end
@deleted_property_keys.each do |key|
result.delete(key)
end
result
end
|