Class | OpenWFE::Extras::DbExpressionStorage |
In: |
lib/openwfe/extras/expool/dbexpstorage.rb
|
Parent: | Object |
Storing OpenWFE flow expressions in a database.
Constructor.
# File lib/openwfe/extras/expool/dbexpstorage.rb, line 105 105: def initialize (service_name, application_context) 106: 107: require 'openwfe/storage/yamlcustom' 108: # making sure this file has been required at this point 109: # this yamlcustom thing prevents the whole OpenWFE ecosystem 110: # to get serialized :) 111: 112: super() # absolutely necessary as we include MonitorMixin 113: service_init service_name, application_context 114: 115: observe_expool 116: end
Retrieves a flow expression.
# File lib/openwfe/extras/expool/dbexpstorage.rb, line 146 146: def [] (fei) 147: 148: e = Expression.find_by_fei fei.to_s 149: return nil unless e 150: 151: as_owfe_expression e 152: end
Stores an expression.
# File lib/openwfe/extras/expool/dbexpstorage.rb, line 121 121: def []= (fei, flow_expression) 122: 123: ldebug { "[]= storing #{fei.to_s}" } 124: 125: synchronize do 126: 127: e = Expression.find_by_fei fei.to_s 128: 129: unless e 130: e = Expression.new 131: e.fei = fei.to_s 132: e.wfid = fei.wfid 133: #e.wfname = fei.wfname 134: end 135: 136: e.exp_class = flow_expression.class.name 137: e.svalue = flow_expression 138: 139: e.save! 140: end 141: end
Deletes a flow expression.
# File lib/openwfe/extras/expool/dbexpstorage.rb, line 165 165: def delete (fei) 166: 167: synchronize do 168: Expression.delete_all ["fei = ?", fei.to_s] 169: end 170: end
Fetches the root of a process instance.
# File lib/openwfe/extras/expool/dbexpstorage.rb, line 218 218: def fetch_root (wfid) 219: 220: params = {} 221: 222: params[:conditions] = [ 223: "wfid = ? AND exp_class = ?", wfid, DefineExpression.to_s 224: ] 225: 226: exps = Expression.find(:all, params) 227: 228: e = exps.sort { |fe1, fe2| fe1.fei.expid <=> fe2.fei.expid }[0] 229: # 230: # find the one with the smallest expid 231: 232: as_owfe_expression e 233: end
Gather expressions matching certain parameters.
# File lib/openwfe/extras/expool/dbexpstorage.rb, line 193 193: def find_expressions (options={}) 194: 195: conditions = determine_conditions options 196: # note : this call modifies the options hash... 197: 198: # 199: # maximize usage of SQL querying 200: 201: exps = Expression.find :all, :conditions => conditions 202: 203: # 204: # do the rest of the filtering 205: 206: exps = exps.collect do |exp| 207: as_owfe_expression exp 208: end 209: 210: exps.find_all do |fexp| 211: does_match? options, fexp 212: end 213: end
Returns true if there is a FlowExpression stored with the given id.
# File lib/openwfe/extras/expool/dbexpstorage.rb, line 157 157: def has_key? (fei) 158: 159: (Expression.find_by_fei(fei.to_s) != nil) 160: end
Danger ! Will remove all the expressions in the database.
# File lib/openwfe/extras/expool/dbexpstorage.rb, line 185 185: def purge 186: 187: Expression.delete_all 188: end
Returns the count of expressions currently stored.
# File lib/openwfe/extras/expool/dbexpstorage.rb, line 175 175: def size 176: 177: Expression.count 178: end
# File lib/openwfe/extras/expool/dbexpstorage.rb, line 287 287: def acc (classes, query, conditions, join) 288: 289: return if classes.size < 1 290: 291: classes = classes.collect do |kind| 292: get_expression_map.get_expression_classes kind 293: end 294: classes = classes.flatten 295: 296: quer = [] 297: cond = [] 298: classes.each do |cl| 299: 300: quer << if join == "AND" 301: "exp_class != ?" 302: else 303: "exp_class = ?" 304: end 305: 306: cond << cl.to_s 307: end 308: quer = quer.join " #{join} " 309: 310: query << "(#{quer})" 311: conditions << cond 312: end
Used by determine_conditions().
# File lib/openwfe/extras/expool/dbexpstorage.rb, line 275 275: def add_class_conditions (options, query, conditions) 276: 277: ic = options.delete :include_classes 278: ic = Array(ic) 279: 280: ec = options.delete :exclude_classes 281: ec = Array(ec) 282: 283: acc ic, query, conditions, "OR" 284: acc ec, query, conditions, "AND" 285: end
Extracts the OpenWFE FlowExpression instance from the active record and makes sure its application_context is set.
# File lib/openwfe/extras/expool/dbexpstorage.rb, line 318 318: def as_owfe_expression (record) 319: 320: return nil unless record 321: 322: fe = record.svalue 323: fe.application_context = @application_context 324: fe 325: end
Grabs the options to build a conditions array for use by find().
Note : this method, modifies the options hash (it removes the args it needs).
# File lib/openwfe/extras/expool/dbexpstorage.rb, line 244 244: def determine_conditions (options) 245: 246: wfid = options.delete :wfid 247: wfid_prefix = options.delete :wfid_prefix 248: #parent_wfid = options.delete :parent_wfid 249: 250: query = [] 251: conditions = [] 252: 253: if wfid 254: query << "wfid = ?" 255: conditions << wfid 256: elsif wfid_prefix 257: query << "wfid LIKE ?" 258: conditions << "#{wfid_prefix}%" 259: end 260: 261: add_class_conditions options, query, conditions 262: 263: conditions = conditions.flatten 264: 265: if conditions.size < 1 266: nil 267: else 268: conditions.insert 0, query.join(" AND ") 269: end 270: end