Class OpenWFE::YamlFileExpressionStorage
In: lib/openwfe/expool/yamlexpstorage.rb
Parent: YamlFileStorage

YAML expression storage. Expressions (atomic pieces of process instances) are stored in a hierarchy of YAML files.

Methods

Included Modules

OwfeServiceLocator ExpressionStorageBase

Public Class methods

[Source]

    # File lib/openwfe/expool/yamlexpstorage.rb, line 66
66:         def initialize (service_name, application_context)
67: 
68:             super service_name, application_context, '/expool'
69: 
70:             observe_expool
71:         end

Returns nil (if the path doesn‘t match an stored expression path) or an array [ workflow_instance_id, expression_id, expression_name ].

This is a class method (not an instance one).

[Source]

     # File lib/openwfe/expool/yamlexpstorage.rb, line 160
160:         def self.split_file_path (path)
161: 
162:             md = path.match %r{.*/(.*)__([\d.]*)_(.*).yaml}
163:             return nil unless md
164:             [ md[1], md[2], md[3] ]
165:         end

Public Instance methods

[Source]

     # File lib/openwfe/expool/yamlexpstorage.rb, line 109
109:         def fetch_root (wfid)
110: 
111:             fei = FlowExpressionId.new
112:             fei.wfid = wfid
113:             fei.expid = "0"
114:             fei.expression_name = "process-definition"
115: 
116:             root = self[fei]
117: 
118:             return root if root
119: 
120:             #
121:             # direct hit missed, scanning...
122: 
123:             each_object_path(compute_dir_path(wfid)) do |p|
124: 
125:                 a = self.class.split_file_path p
126:                 next unless a
127: 
128:                 next unless a[0] == wfid
129: 
130:                 fexp = load_object p
131: 
132:                 return fexp if fexp.is_a?(DefineExpression)
133:             end
134: 
135:             nil
136:         end

Find expressions matching various criteria. (See Engine#list_process_status for an explanation)

[Source]

     # File lib/openwfe/expool/yamlexpstorage.rb, line 77
 77:         def find_expressions (options)
 78: 
 79:             wfid_prefix = options[:wfid_prefix]
 80:             wfid_regex = nil
 81:             wfid_regex = Regexp.new("^"+wfid_prefix) if wfid_prefix
 82: 
 83:             options.delete :wfid_prefix
 84:                 # no need to check this in further does_match? calls
 85: 
 86:             result = []
 87: 
 88:             each_object_path do |path|
 89: 
 90:                 unless path.match /\/engine_environment.yaml$/
 91:                     a = self.class.split_file_path path
 92:                     next unless a
 93:                         # not an expression file
 94: 
 95:                     wfid = a[0]
 96:                     next if wfid_regex and (not wfid_regex.match(wfid))
 97:                 end
 98: 
 99:                 fexp = load_object path
100: 
101:                 next unless does_match?(options, fexp)
102: 
103:                 result << fexp
104:             end
105: 
106:             result
107:         end

Returns a human-readable list of the current YAML file paths. (one expression per path).

[Source]

     # File lib/openwfe/expool/yamlexpstorage.rb, line 142
142:         def to_s
143: 
144:             s = "\n\n==== #{self.class} ===="
145:             s << "\n"
146:             each_object_path do |path|
147:                 s << path
148:                 s << "\n"
149:             end
150:             s << "==== . ====\n"
151:             s
152:         end

Protected Instance methods

[Source]

     # File lib/openwfe/expool/yamlexpstorage.rb, line 169
169:             def compute_dir_path (wfid)
170: 
171:                 wfid = FlowExpressionId.to_parent_wfid wfid
172: 
173:                 a_wfid = get_wfid_generator.split_wfid wfid
174: 
175:                 @basepath + a_wfid[-2] + "/" + a_wfid[-1] + "/"
176:             end

[Source]

     # File lib/openwfe/expool/yamlexpstorage.rb, line 178
178:             def compute_file_path (fei)
179:                 
180:                 return @basepath + "/engine_environment.yaml" \
181:                     if fei.workflow_instance_id == "0"
182:                     
183:                 wfid = fei.parent_workflow_instance_id
184: 
185:                 compute_dir_path(wfid) +
186:                 fei.workflow_instance_id + "__" +
187:                 fei.expression_id + "_" + 
188:                 fei.expression_name + ".yaml"
189:             end

[Validate]