Class OpenWFE::YamlFileStorage
In: lib/openwfe/storage/yamlfilestorage.rb
Parent: Object

Stores OpenWFEru related objects into yaml encoded files. This storage is meant to look and feel like a Hash.

Methods

Included Modules

MonitorMixin ServiceMixin

Attributes

basepath  [RW] 

Public Class methods

[Source]

    # File lib/openwfe/storage/yamlfilestorage.rb, line 69
69:         def initialize (service_name, application_context, path)
70: 
71:             super()
72: 
73:             service_init(service_name, application_context)
74: 
75:             @basepath = get_work_directory + path
76:             @basepath += "/" unless @basepath[-1, 1] == "/"
77: 
78:             FileUtils.makedirs @basepath 
79:         end

Public Instance methods

Actually loads and returns the object for the given FlowExpressionId instance.

[Source]

     # File lib/openwfe/storage/yamlfilestorage.rb, line 140
140:         def [] (fei)
141: 
142:             fei_path = compute_file_path(fei)
143:             
144:             if not File.exist?(fei_path)
145: 
146:                 ldebug { "[] didn't find file at #{fei_path}" }
147:                 #puts  "[] didn't find file at #{fei_path}"
148: 
149:                 return nil 
150:             end
151: 
152:             load_object(fei_path)
153:         end

Stores an object with its FlowExpressionId instance as its key.

[Source]

     # File lib/openwfe/storage/yamlfilestorage.rb, line 84
 84:         def []= (fei, object)
 85:             synchronize do
 86: 
 87:                 #linfo { "[]= #{fei}" }
 88: 
 89:                 fei_path = compute_file_path(fei)
 90: 
 91:                 fei_parent_path = File.dirname(fei_path)
 92:                 
 93:                 FileUtils.makedirs(fei_parent_path) \
 94:                     unless File.exist?(fei_parent_path)
 95: 
 96:                 File.open(fei_path, "w") do |file|
 97:                     YAML.dump(object, file)
 98:                 end
 99:             end
100:         end

Removes the object (file) stored for the given FlowExpressionId instance.

[Source]

     # File lib/openwfe/storage/yamlfilestorage.rb, line 123
123:         def delete (fei)
124:             synchronize do
125:             
126:                 fei_path = compute_file_path(fei)
127: 
128:                 ldebug do 
129:                     "delete()\n   for #{fei.to_debug_s}\n   at #{fei_path}"
130:                 end
131:                 
132:                 File.delete(fei_path)
133:             end
134:         end

Checks whether there is an object (expression, workitem) stored for the given FlowExpressionId instance.

[Source]

     # File lib/openwfe/storage/yamlfilestorage.rb, line 115
115:         def has_key? (fei)
116:             File.exist?(compute_file_path(fei))
117:         end

Returns the count of objects currently stored in this instance.

[Source]

     # File lib/openwfe/storage/yamlfilestorage.rb, line 158
158:         def length
159: 
160:             count_objects()
161:         end

Deletes the whole storage directory… beware…

[Source]

     # File lib/openwfe/storage/yamlfilestorage.rb, line 105
105:         def purge
106:             synchronize do
107:                 FileUtils.remove_dir @basepath
108:             end
109:         end
size()

Alias for length

Protected Instance methods

Each object is meant to have a unique file path, this method wraps the determination of that path. It has to be provided by extending classes.

[Source]

     # File lib/openwfe/storage/yamlfilestorage.rb, line 238
238:                 def compute_file_path (object)
239:                     raise NotImplementedError.new
240:                 end

Returns the number of ‘objects’ currently in this storage.

[Source]

     # File lib/openwfe/storage/yamlfilestorage.rb, line 180
180:             def count_objects
181: 
182:                 count = 0
183: 
184:                 Find.find(@basepath) do |path|
185: 
186:                     next unless File.exist? path
187:                     next if File.stat(path).directory?
188: 
189:                     count += 1 if OpenWFE::ends_with(path, ".yaml")
190:                 end
191: 
192:                 count
193:             end

Passes each object to the given block

[Source]

     # File lib/openwfe/storage/yamlfilestorage.rb, line 218
218:             def each_object (&block)
219: 
220:                 each_object_path do |path|
221:                     block.call load_object(path)
222:                 end
223:             end

Passes each object path to the given block

[Source]

     # File lib/openwfe/storage/yamlfilestorage.rb, line 198
198:             def each_object_path (path=@basepath, &block)
199: 
200:                 #return unless block
201: 
202:                 synchronize do
203:                     Find.find(path) do |p|
204: 
205:                         next unless File.exist?(p)
206:                         next if File.stat(p).directory?
207:                         next unless OpenWFE::ends_with(p, ".yaml")
208: 
209:                         ldebug { "each_object_path() considering #{p}" }
210:                         block.call p
211:                     end
212:                 end
213:             end
each_value(&block)

Alias for each_object

[Source]

     # File lib/openwfe/storage/yamlfilestorage.rb, line 167
167:             def load_object (path)
168: 
169:                 object = YAML.load_file(path)
170:               
171:                 object.application_context = @application_context \
172:                     if object.respond_to? :application_context=
173:                 
174:                 object
175:             end

[Validate]