| Class | OpenWFE::Environment |
| In: |
lib/openwfe/expressions/environment.rb
|
| Parent: | FlowExpression |
An environment is a store for variables. It‘s an expression thus it‘s storable in the expression pool.
| V_PAUSED | = | VAR_PAUSED[1..-1] |
| variables | [RW] | the variables stored in this environment. |
def initialize (
fei, parent, environment_id, application_context, attributes)
super(fei, parent, environment_id, application_context, attributes)
@variables = {}
end
# File lib/openwfe/expressions/environment.rb, line 69
69: def initialize
70:
71: super
72:
73: @variables = {}
74: end
# File lib/openwfe/expressions/environment.rb, line 76
76: def self.new_env (
77: fei, parent_id, environment_id, app_context, attributes)
78:
79: env = self.new
80:
81: env.fei = fei
82: env.parent_id = parent_id
83: env.environment_id = environment_id
84: env.application_context = app_context
85: env.attributes = attributes
86:
87: env
88: end
Looks up for the value of a variable in this environment.
# File lib/openwfe/expressions/environment.rb, line 93
93: def [] (key)
94:
95: value = @variables[key]
96:
97: return value \
98: if @variables.has_key?(key) or is_engine_environment?
99:
100: return get_parent[key] if @parent_id
101:
102: get_expression_pool.fetch_engine_environment[key]
103: end
Binds a variable in this environment.
# File lib/openwfe/expressions/environment.rb, line 108
108: def []= (key, value)
109:
110: #ldebug do
111: # "#{fei.to_debug_s} []= "+
112: # "'#{key}' => '#{value}' (#{value.class.name})"
113: #end
114:
115: synchronize do
116:
117: @variables[key] = value
118: store_itself
119: end
120: end
Removes a variable from this environment.
# File lib/openwfe/expressions/environment.rb, line 125
125: def delete (key)
126: synchronize do
127:
128: ldebug { "#{fei.to_debug_s} delete() '#{key}'" }
129:
130: @variables.delete key
131: store_itself
132: end
133: end
Returns a deep copy of this environment.
# File lib/openwfe/expressions/environment.rb, line 230
230: def dup
231:
232: env = Environment.new_env(
233: @fei.dup,
234: @parent_id,
235: @environment_id,
236: @application_context,
237: OpenWFE::fulldup(@attributes))
238:
239: env.variables = OpenWFE::fulldup self.variables
240:
241: env
242: end
Returns the top environment for the process instance (the environment just before the engine environment).
# File lib/openwfe/expressions/environment.rb, line 210
210: def get_root_environment
211:
212: #ldebug { "get_root_environment\n#{self}" }
213:
214: return self unless @parent_id
215:
216: get_parent.get_root_environment
217: end
Returns true if this environment is the engine environment
# File lib/openwfe/expressions/environment.rb, line 162
162: def is_engine_environment?
163:
164: (@fei == get_expression_pool.engine_environment_id)
165: end
Will reschedule any ‘Schedulable’ variable found in this environment this method especially targets cron expressions that are stored as variables and need to be rescheduled upon engine restart.
# File lib/openwfe/expressions/environment.rb, line 181
181: def reschedule (scheduler)
182:
183: @fei.owfe_version = OPENWFERU_VERSION \
184: if @fei.wfurl == 'ee' and @fei.wfname =='ee'
185: #
186: # so that older versions of engine envs get accepted
187:
188: @variables.each do |key, value|
189:
190: #ldebug { "reschedule() - item of class #{value.class}" }
191:
192: get_expression_pool.paused_instances[@fei.wfid] = true \
193: if key == V_PAUSED
194:
195: next unless value.kind_of?(Rufus::Schedulable)
196:
197: linfo { "reschedule() for instance of #{value.class.name}" }
198:
199: value.application_context = @application_context
200: value.reschedule(scheduler)
201: end
202:
203: store_itself
204: end
Should never get used, only the reschedule() method is relevant for the Schedulable aspect of an environment expression.
# File lib/openwfe/expressions/environment.rb, line 171
171: def trigger (params)
172:
173: raise "an environment should never get directly triggered"
174: end
This method is usually called before the environment gets wiped out of the expression pool. It takes care of removing subprocess templates pointed at by variables in this environment.
# File lib/openwfe/expressions/environment.rb, line 141
141: def unbind
142:
143: #ldebug { "unbind() for #{fei.to_s}" }
144:
145: @variables.each do |key, value|
146:
147: #ldebug { "unbind() '#{key}' => #{value.class}" }
148:
149: if value.kind_of?(FlowExpressionId)
150:
151: get_expression_pool.remove(value)
152:
153: #elsif value.kind_of?(FlowExpression)
154: # value.cancel
155: end
156: end
157: end