Class: Ruote::HashStorage
- Inherits:
-
Object
- Object
- Ruote::HashStorage
show all
- Includes:
- MonitorMixin, StorageBase
- Defined in:
- lib/ruote/storage/hash_storage.rb
Overview
Instance Attribute Summary (collapse)
Instance Method Summary
(collapse)
#clear, #context, #context=, #copy_to, #delete_schedule, #empty?, #expression_wfids, #find_root_expression, #get_configuration, #get_engine_variable, #get_msgs, #get_schedules, #get_trackers, #put_engine_variable, #put_msg, #put_schedule, #reserve
Constructor Details
- (HashStorage) initialize(options = {})
A new instance of HashStorage
42
43
44
45
46
47
48
49
50
51
52
|
# File 'lib/ruote/storage/hash_storage.rb', line 42
def initialize(options={})
super()
@options = options
purge!
put(options.merge('type' => 'configurations', '_id' => 'engine'))
end
|
Instance Attribute Details
- (Object) h
Returns the value of attribute h
40
41
42
|
# File 'lib/ruote/storage/hash_storage.rb', line 40
def h
@h
end
|
Instance Method Details
- (Object) add_type(type)
180
181
182
183
|
# File 'lib/ruote/storage/hash_storage.rb', line 180
def add_type(type)
@h[type] = {}
end
|
- (Object) delete(doc)
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
# File 'lib/ruote/storage/hash_storage.rb', line 100
def delete(doc)
drev = doc['_rev']
raise ArgumentError.new("can't delete doc without _rev") unless drev
synchronize do
prev = get(doc['type'], doc['_id'])
return true if prev.nil?
doc['_rev'] ||= 0
return prev if prev['_rev'] != drev
@h[doc['type']].delete(doc['_id'])
nil end
end
|
- (Object) dump(type)
190
191
192
193
194
195
196
197
198
199
200
201
|
# File 'lib/ruote/storage/hash_storage.rb', line 190
def dump(type)
s = "=== #{type} ===\n"
@h[type].inject(s) do |s1, (k, v)|
s1 << "\n"
s1 << "#{k} :\n"
v.keys.sort.inject(s1) do |s2, k1|
s2 << " #{k1} => #{v[k1].inspect}\n"
end
end
end
|
- (Object) get(type, key)
93
94
95
96
97
98
|
# File 'lib/ruote/storage/hash_storage.rb', line 93
def get(type, key)
synchronize do
Ruote.fulldup(@h[type][key])
end
end
|
- (Object) get_many(type, key = nil, opts = {})
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
|
# File 'lib/ruote/storage/hash_storage.rb', line 122
def get_many(type, key=nil, opts={})
synchronize do
keys = key ?
Array(key).map { |k| k.is_a?(String) ? "!#{k}" : k } : nil
docs = keys ?
@h[type].values.select { |doc|
Ruote::StorageBase.key_match?(keys, doc)
} :
@h[type].values
docs = docs.sort_by { |d| d['_id'] }
return docs.size if opts[:count]
docs = docs.reverse if opts[:descending]
skip = opts[:skip] || 0
limit = opts[:limit] || docs.size
docs[skip, limit]
end
end
|
- (Object) ids(type)
Returns a sorted list of all the ids for a given type.
152
153
154
155
|
# File 'lib/ruote/storage/hash_storage.rb', line 152
def ids(type)
@h[type].keys.sort
end
|
- (Object) purge!
Purges the storage completely.
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
|
# File 'lib/ruote/storage/hash_storage.rb', line 159
def purge!
@h = %w[
variables
msgs
expressions
errors
schedules
configurations
workitems
].inject({}) { |h, k|
h[k] = {}
h
}
@h['configurations']['engine'] = @options
end
|
- (Object) purge_type!(type)
185
186
187
188
|
# File 'lib/ruote/storage/hash_storage.rb', line 185
def purge_type!(type)
@h[type] = {}
end
|
- (Object) put(doc, opts = {})
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
# File 'lib/ruote/storage/hash_storage.rb', line 54
def put(doc, opts={})
i = @h.size
synchronize do
pre = get(doc['type'], doc['_id'])
if pre && pre['_rev'] != doc['_rev']
return pre
end
if pre.nil? && doc['_rev']
return true
end
doc = if opts[:update_rev]
doc['_rev'] = pre ? pre['_rev'] : -1
doc
else
doc.merge('_rev' => doc['_rev'] || -1)
end
doc['put_at'] = Ruote.now_to_utc_s
doc['_rev'] = doc['_rev'] + 1
@h[doc['type']][doc['_id']] = Rufus::Json.dup(doc)
nil
end
rescue => e
puts "=" * 80
File.open('doc.json', 'wb') do |f|
f.puts Rufus::Json.pretty_encode(doc)
end
raise e
end
|