openwferu 0.9.1 → 0.9.2
Sign up to get free protection for your applications and to get access to all the features.
- data/{README → README.txt} +16 -13
- data/bin/validate-workflow.rb +46 -22
- data/examples/README.txt +8 -0
- data/examples/homeworkreview.rb +66 -0
- data/examples/quotereporter.rb +154 -0
- data/lib/{openwferu.rb → openwfe.rb} +6 -8
- data/lib/{ru → openwfe}/contextual.rb +11 -3
- data/lib/{ru → openwfe/engine}/engine.rb +50 -36
- data/lib/{ru/participant.rb → openwfe/engine/file_persisted_engine.rb} +21 -22
- data/lib/openwfe/expool/expressionpool.rb +534 -0
- data/lib/openwfe/expool/expstorage.rb +184 -0
- data/lib/openwfe/expool/journalexpstorage.rb +312 -0
- data/lib/openwfe/expool/yamlexpstorage.rb +127 -0
- data/lib/{ru → openwfe/expressions}/environment.rb +19 -14
- data/lib/{ru → openwfe/expressions}/expressionmap.rb +48 -21
- data/lib/{ru → openwfe/expressions}/fe_concurrence.rb +111 -35
- data/lib/openwfe/expressions/fe_cursor.rb +236 -0
- data/lib/{ru → openwfe/expressions}/fe_define.rb +5 -5
- data/lib/openwfe/expressions/fe_fqv.rb +99 -0
- data/lib/openwfe/expressions/fe_iterator.rb +182 -0
- data/lib/{ru/fe_misc.rb → openwfe/expressions/fe_losfor.rb} +14 -56
- data/lib/openwfe/expressions/fe_misc.rb +102 -0
- data/lib/{ru → openwfe/expressions}/fe_participant.rb +25 -14
- data/lib/{ru → openwfe/expressions}/fe_raw.rb +39 -75
- data/lib/{ru/fe_base.rb → openwfe/expressions/fe_sequence.rb} +40 -35
- data/lib/{ru → openwfe/expressions}/fe_subprocess.rb +30 -14
- data/lib/{ru → openwfe/expressions}/fe_time.rb +59 -31
- data/lib/{ru → openwfe/expressions}/fe_utils.rb +42 -26
- data/lib/{ru → openwfe/expressions}/fe_value.rb +20 -14
- data/lib/openwfe/expressions/flowexpression.rb +434 -0
- data/lib/openwfe/expressions/raw_prog.rb +391 -0
- data/lib/openwfe/expressions/raw_xml.rb +128 -0
- data/lib/openwfe/flowexpressionid.rb +148 -0
- data/lib/{ru → openwfe}/logging.rb +10 -6
- data/lib/{osocket.rb → openwfe/osocket.rb} +36 -35
- data/lib/{otime.rb → openwfe/otime.rb} +71 -21
- data/lib/openwfe/participants/atomparticipants.rb +144 -0
- data/lib/openwfe/participants/enoparticipant.rb +73 -0
- data/lib/openwfe/participants/participant.rb +85 -0
- data/lib/{ru → openwfe/participants}/participantmap.rb +40 -12
- data/lib/{ru → openwfe/participants}/participants.rb +41 -12
- data/lib/openwfe/participants/soapparticipants.rb +96 -0
- data/lib/{controlclient.rb → openwfe/rest/controlclient.rb} +12 -13
- data/lib/{definitions.rb → openwfe/rest/definitions.rb} +3 -3
- data/lib/{exception.rb → openwfe/rest/exception.rb} +3 -3
- data/lib/{restclient.rb → openwfe/rest/restclient.rb} +13 -22
- data/lib/{worklistclient.rb → openwfe/rest/worklistclient.rb} +33 -46
- data/lib/openwfe/rest/xmlcodec.rb +575 -0
- data/lib/{ru → openwfe}/rudefinitions.rb +32 -4
- data/lib/{ru → openwfe}/service.rb +20 -8
- data/lib/openwfe/storage/yamlfilestorage.rb +159 -0
- data/lib/{ru → openwfe/util}/dollar.rb +10 -8
- data/lib/openwfe/util/lru_cache.rb +149 -0
- data/lib/{ru → openwfe/util}/scheduler.rb +18 -10
- data/lib/{ru → openwfe/util}/schedulers.rb +7 -7
- data/lib/{utils.rb → openwfe/utils.rb} +93 -9
- data/lib/openwfe/workitem.rb +366 -0
- data/lib/openwfe/worklist/worklists.rb +175 -0
- data/test/README.txt +27 -0
- data/test/atomtest.rb +99 -0
- data/test/crontest.rb +58 -0
- data/test/dollartest.rb +3 -3
- data/test/feitest.rb +42 -14
- data/test/file_persistence_test.rb +93 -0
- data/test/flowtestbase.rb +72 -26
- data/test/ft_0.rb +1 -97
- data/test/ft_0b_sequence.rb +33 -0
- data/test/ft_0c_testname.rb +29 -0
- data/test/ft_10_loop.rb +48 -0
- data/test/ft_11_ppd.rb +292 -0
- data/test/ft_12_blockparticipant.rb +45 -0
- data/test/ft_13_eno.rb +51 -0
- data/test/ft_14_subprocess.rb +90 -0
- data/test/ft_14b_subprocess.rb +40 -0
- data/test/ft_15_iterator.rb +70 -0
- data/test/ft_16_fqv.rb +57 -0
- data/test/ft_1_unset.rb +25 -1
- data/test/ft_2_concurrence.rb +10 -5
- data/test/ft_3_equals.rb +35 -1
- data/test/ft_4_misc.rb +16 -1
- data/test/ft_5_time.rb +26 -1
- data/test/ft_6_lambda.rb +2 -1
- data/test/{ft_7_losfor.rb → ft_7_lose.rb} +41 -35
- data/test/ft_8_forget.rb +46 -0
- data/test/ft_9_cursor.rb +94 -0
- data/test/journal_persistence_test.rb +147 -0
- data/test/misctest.rb +13 -9
- data/test/rake_ptest.rb +18 -0
- data/test/rake_qtest.rb +43 -0
- data/test/{fulltest.rb → rake_test.rb} +2 -2
- data/test/raw_prog_test.rb +236 -0
- data/test/rest_test.rb +189 -0
- data/test/rutest_utils.rb +1 -1
- data/test/timetest.rb +42 -34
- metadata +125 -82
- data/lib/codec.rb +0 -573
- data/lib/flowexpressionid.rb +0 -139
- data/lib/ru/expressionpool.rb +0 -382
- data/lib/ru/expressionstorage.rb +0 -99
- data/lib/ru/flowexpression.rb +0 -272
- data/lib/ru/ruutils.rb +0 -70
- data/lib/test.rb +0 -222
- data/lib/workitem.rb +0 -249
- data/test/quicktest.rb +0 -21
data/{README → README.txt}
RENAMED
@@ -17,12 +17,12 @@ OpenWFEru is a Ruby port of the OpenWFE workflow engine
|
|
17
17
|
(http://www.openwfe.org). It is a complete rewrite in Ruby
|
18
18
|
so does not need to use the Java-based engine from OpenWFE.
|
19
19
|
|
20
|
-
OpenWFEru was initially implemented in San Joaquin de Flores, Costa Rica.
|
20
|
+
OpenWFEru was initially implemented in San Joaquin de Flores, Costa Rica. And then in Yokohama, Japan.
|
21
21
|
|
22
22
|
One project goal for OpenWFEru is compatibility with its
|
23
23
|
Java based cousin so workflows defined for the Java engine
|
24
24
|
should work with the Ruby implementation. There are
|
25
|
-
some incompatibilities between each
|
25
|
+
some incompatibilities between each implementation.
|
26
26
|
|
27
27
|
TODO: Document implementation differences
|
28
28
|
|
@@ -37,29 +37,28 @@ Creating an workflow engine instance
|
|
37
37
|
|
38
38
|
# Create an engine to launch the flow
|
39
39
|
engine = OpenWFEru::Engine.new
|
40
|
-
engine.register_participant('test-.*',
|
41
|
-
|
40
|
+
engine.register_participant('test-.*', OpenWFEru::PrintParticipant.new())
|
41
|
+
|
42
42
|
# Create a flow definition and assign to a new instance
|
43
43
|
flow = '''<process-definition name="equals_0" revision="0">
|
44
|
-
<
|
44
|
+
<if>
|
45
45
|
<equals value="a" other-value="a" />
|
46
46
|
<print>${field:__result__}</print>
|
47
|
-
</
|
47
|
+
</if>
|
48
48
|
</process-definition>'''
|
49
|
-
li = OpenWFE::LaunchItem.new
|
50
|
-
|
51
|
-
li.attributes['__definition'] = flow
|
49
|
+
li = OpenWFE::LaunchItem.new(flow)
|
50
|
+
|
52
51
|
# Launch the instance
|
53
52
|
engine.launch(li)
|
53
|
+
|
54
54
|
# Examine it
|
55
|
-
|
56
|
-
pp exp_storage
|
55
|
+
pp engine.get_expression_storage
|
57
56
|
|
58
57
|
== How to help
|
59
58
|
|
60
59
|
If you want to help hacking on openwferu you'll probably want the following
|
61
60
|
libraries:
|
62
|
-
[
|
61
|
+
[rake] Handle builds, generating documentation, and running unit tests
|
63
62
|
[rubygems] Handles creation of the gems
|
64
63
|
[rote] A framework being used to help with managing the offline written docs
|
65
64
|
[redcloth] Openwferu uses textile-markup for its docs. Redcloth provides an engine for it.
|
@@ -70,6 +69,7 @@ It's best if you use gems to install these as the process can get rather
|
|
70
69
|
tedious by hand.
|
71
70
|
|
72
71
|
=== Prerequisites
|
72
|
+
|
73
73
|
You'll need libxml2-dev in order to compile the native libraries
|
74
74
|
for libxml. Please check your your packaging system for the appropriate
|
75
75
|
name.
|
@@ -78,6 +78,7 @@ On Ubuntu you can install libxml2 with:
|
|
78
78
|
sudo apt-get install libxml2-dev
|
79
79
|
|
80
80
|
=== Ruby Libraries Install
|
81
|
+
|
81
82
|
1. gem install -r rake
|
82
83
|
2. gem install -r rote redcloth
|
83
84
|
3. gem install -r tidy
|
@@ -87,9 +88,11 @@ On Ubuntu you can install libxml2 with:
|
|
87
88
|
|
88
89
|
The main project site lives at rubyforge at:
|
89
90
|
http://rubyforge.org/projects/openwferu
|
91
|
+
or
|
92
|
+
http://ru.openwfe.org
|
90
93
|
|
91
94
|
In the meantime the old site hosted at openwfe.org is at:
|
92
95
|
http://www.openwfe.org/openwfe-ruby.html
|
93
96
|
|
94
|
-
If you're interested in helping :
|
97
|
+
If you're interested in helping : http://groups.google.com/group/openwferu-dev/topics
|
95
98
|
|
data/bin/validate-workflow.rb
CHANGED
@@ -4,11 +4,11 @@
|
|
4
4
|
# Purpose: A helper script that validates a workflow document against
|
5
5
|
# a XML Schema
|
6
6
|
# Author: Alain Hoang
|
7
|
-
# Version: 0.1
|
8
7
|
# Notes: Uses Ruby's libxml library to handle the parsing
|
9
8
|
|
10
9
|
# Stdlib
|
11
10
|
require 'net/http'
|
11
|
+
require 'optparse'
|
12
12
|
require 'uri'
|
13
13
|
# From the gems archive
|
14
14
|
require 'rubygems'
|
@@ -16,42 +16,66 @@ require 'xml/libxml'
|
|
16
16
|
|
17
17
|
|
18
18
|
module OpenWFEru
|
19
|
+
FLOWDEF_URL = 'http://www.openwfe.org/flowdef.xsd'
|
19
20
|
# Validates a workflow definition against the Workflow XML Schema
|
20
21
|
# defined at http://www.openwfe.org/flowdef.xsd
|
21
22
|
class WorkflowValidator
|
22
|
-
|
23
|
+
|
24
|
+
attr_accessor :schema_url
|
25
|
+
attr_accessor :args
|
23
26
|
|
24
|
-
#
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
27
|
+
# Create a validator object using a WorkflowValidatorArgs object
|
28
|
+
def initialize(args)
|
29
|
+
@args = args
|
30
|
+
@args[:schema_url] ||= FLOWDEF_URL
|
31
|
+
|
32
|
+
xsd_str = Net::HTTP.get URI.parse(@args[:schema_url])
|
33
|
+
@schema = XML::Schema.from_string(xsd_str)
|
34
|
+
end
|
35
|
+
|
36
|
+
# validates a xml file against the OpenWFE XML Schema
|
37
|
+
def validate(file)
|
33
38
|
xmldoc = XML::Document.file(file)
|
34
|
-
xmldoc.validate_schema(
|
39
|
+
xmldoc.validate_schema(@schema)
|
35
40
|
end
|
36
41
|
end
|
37
|
-
end
|
38
42
|
|
39
|
-
|
40
|
-
|
41
|
-
|
43
|
+
class WorkflowValidatorArgs < Hash
|
44
|
+
# Create an arguments object to send to a WorkflowValidator object
|
45
|
+
def initialize(args)
|
46
|
+
super()
|
47
|
+
opts = OptionParser.new do |opts|
|
48
|
+
opts.banner = "Usage: #$0 [-u url] <workflow def> [workflow def] ..."
|
49
|
+
|
50
|
+
opts.on('-u', '--url URL', 'Use XML Schema at URL') do |url|
|
51
|
+
self[:schema_url] = url
|
52
|
+
end
|
53
|
+
|
54
|
+
opts.on_tail('-h', '--help', 'display this help and exit') do
|
55
|
+
puts opts
|
56
|
+
exit
|
57
|
+
end
|
58
|
+
end
|
59
|
+
opts.parse!(args)
|
60
|
+
# Check for no args and exit if so
|
61
|
+
if args.empty?
|
62
|
+
puts opts
|
63
|
+
exit 1
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
42
67
|
end
|
43
68
|
|
69
|
+
|
44
70
|
def main
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
exit 1
|
49
|
-
end
|
71
|
+
# Create the arguments object and the validator object
|
72
|
+
args = OpenWFEru::WorkflowValidatorArgs.new(ARGV)
|
73
|
+
validator = OpenWFEru::WorkflowValidator.new(args)
|
50
74
|
|
51
75
|
# Loop through all arguments and validate the file
|
52
76
|
ARGV.each do |f|
|
53
77
|
print "Trying to validate #{f}... "
|
54
|
-
if
|
78
|
+
if FileTest.exists?(f) && validator.validate(f)
|
55
79
|
print "PASSED\n"
|
56
80
|
else
|
57
81
|
print "FAILED\n"
|
data/examples/README.txt
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
|
2
|
+
### EXAMPLE IN PREPARATION ###
|
3
|
+
|
4
|
+
#
|
5
|
+
# an OpenWFEru example
|
6
|
+
#
|
7
|
+
|
8
|
+
require 'openwfe/engine/engine'
|
9
|
+
require 'openwfe/expressions/raw_prog'
|
10
|
+
#require 'openwfe/participants/soapparticipants'
|
11
|
+
#require 'openwfe/participants/atomparticipants'
|
12
|
+
|
13
|
+
|
14
|
+
#
|
15
|
+
# the process definition
|
16
|
+
#
|
17
|
+
# instead of using the classical OpenWFE XML process definitions, we
|
18
|
+
# define the flow as a Ruby class
|
19
|
+
|
20
|
+
class ReviewFlow < OpenWFE::ProcessDefinition
|
21
|
+
def make
|
22
|
+
process_definition :name => "homework_review", :revision => "0.1" do
|
23
|
+
sequence do
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
#
|
30
|
+
# the engine
|
31
|
+
#
|
32
|
+
# a simple in memory engine, no persistence whatsoever for now.
|
33
|
+
|
34
|
+
engine = OpenWFE::Engine.new
|
35
|
+
|
36
|
+
#
|
37
|
+
# The Participants
|
38
|
+
#
|
39
|
+
# Ideally participants are shared by more than one process definition
|
40
|
+
# (a person is usually part of more than one business process in
|
41
|
+
# his organization)
|
42
|
+
|
43
|
+
# a small debug participant, as you can see, a participant can
|
44
|
+
# directly be a ruby block (which receives the workitem)
|
45
|
+
# (it's commented out at the end of the flow)
|
46
|
+
#
|
47
|
+
engine.register_participant("puts_workitem") do |workitem|
|
48
|
+
puts
|
49
|
+
puts workitem.to_s
|
50
|
+
puts
|
51
|
+
end
|
52
|
+
|
53
|
+
#
|
54
|
+
# launching
|
55
|
+
|
56
|
+
launchitem = LaunchItem.new(QuoteLookupFlow)
|
57
|
+
#
|
58
|
+
# Passing the process definition class as the unique
|
59
|
+
# LaunchItem parameter
|
60
|
+
|
61
|
+
launchitem.symbols = "aapl, sunw, msft, lnux"
|
62
|
+
#
|
63
|
+
# directly setting the value for the field "symbols"
|
64
|
+
|
65
|
+
engine.launch(launchitem)
|
66
|
+
|
@@ -0,0 +1,154 @@
|
|
1
|
+
|
2
|
+
#
|
3
|
+
# an OpenWFEru example
|
4
|
+
#
|
5
|
+
|
6
|
+
require 'openwfe/engine/engine'
|
7
|
+
require 'openwfe/expressions/raw_prog'
|
8
|
+
require 'openwfe/participants/soapparticipants'
|
9
|
+
require 'openwfe/participants/atomparticipants'
|
10
|
+
|
11
|
+
|
12
|
+
#
|
13
|
+
# the process definition
|
14
|
+
#
|
15
|
+
# instead of using the classical OpenWFE XML process definitions, we
|
16
|
+
# define the flow as a Ruby class
|
17
|
+
|
18
|
+
class QuoteLookupFlow < OpenWFE::ProcessDefinition
|
19
|
+
def make
|
20
|
+
process_definition :name => "quote_lookup", :revision => "0.1" do
|
21
|
+
sequence do
|
22
|
+
|
23
|
+
#
|
24
|
+
# lookup quotes
|
25
|
+
|
26
|
+
iterator :on_field_value => "symbols", :to_field => "symbol" do
|
27
|
+
sequence do
|
28
|
+
|
29
|
+
set \
|
30
|
+
:field => "quote_${f:__ip__}_name",
|
31
|
+
:field_value => "symbol"
|
32
|
+
|
33
|
+
participant :quote_service
|
34
|
+
|
35
|
+
set \
|
36
|
+
:field => "quote_${f:__ip__}_value",
|
37
|
+
:field_value => "__result__"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
#
|
42
|
+
# update feed
|
43
|
+
|
44
|
+
set :field => "atom_entry_title" do
|
45
|
+
"quote feed at ${r:Time.now}"
|
46
|
+
end
|
47
|
+
#
|
48
|
+
# wrapping some ruby code for eval at runtime
|
49
|
+
# with ${r: ruby code ... }
|
50
|
+
|
51
|
+
participant :feed
|
52
|
+
|
53
|
+
#participant :ref => "puts_workitem"
|
54
|
+
#participant :ref => :puts_workitem
|
55
|
+
#participant "puts_workitem"
|
56
|
+
participant :puts_workitem
|
57
|
+
#
|
58
|
+
# the four notations are equivalent
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
#
|
65
|
+
# the engine
|
66
|
+
#
|
67
|
+
# a simple in memory engine, no persistence whatsoever for now.
|
68
|
+
|
69
|
+
engine = OpenWFE::Engine.new
|
70
|
+
|
71
|
+
#
|
72
|
+
# The Participants
|
73
|
+
#
|
74
|
+
# Ideally participants are shared by more than one process definition
|
75
|
+
# (a person is usually part of more than one business process in
|
76
|
+
# his organization)
|
77
|
+
|
78
|
+
# the participant that looks up the quote values
|
79
|
+
#
|
80
|
+
quote_service = OpenWFE::SoapParticipant.new(
|
81
|
+
"http://services.xmethods.net/soap", # service URI
|
82
|
+
"urn:xmethods-delayed-quotes", # namespace
|
83
|
+
"getQuote", # operation name
|
84
|
+
[ "symbol" ]) # param arrays (workitem fields)
|
85
|
+
|
86
|
+
engine.register_participant("quote_service", quote_service)
|
87
|
+
|
88
|
+
# the feed : at most 10 feed entries are kept.
|
89
|
+
#
|
90
|
+
# The entry template is specified as a block returning the template
|
91
|
+
# (a string containing xhtml).
|
92
|
+
#
|
93
|
+
# The feed is outputted in the current working directory ./atom_feed.xml
|
94
|
+
#
|
95
|
+
feed = OpenWFE::AtomParticipant.new(10) do
|
96
|
+
| flow_expression, participant, workitem |
|
97
|
+
|
98
|
+
#
|
99
|
+
# the template (xhtml by default) is generated via a block
|
100
|
+
|
101
|
+
s = "<h3>quotes</h3>"
|
102
|
+
|
103
|
+
s << "<ul>"
|
104
|
+
|
105
|
+
workitem.__ic__.times do |i|
|
106
|
+
#
|
107
|
+
# within an iteration, the count of iterations is stored in the
|
108
|
+
# workitem field "__ic__"
|
109
|
+
#
|
110
|
+
s << "<li>"
|
111
|
+
s << workitem.attributes["quote_#{i}_name"].to_s
|
112
|
+
s << " : "
|
113
|
+
s << workitem.attributes["quote_#{i}_value"].to_s
|
114
|
+
s << "</li>\n"
|
115
|
+
end
|
116
|
+
|
117
|
+
s << "</ul>"
|
118
|
+
end
|
119
|
+
engine.register_participant("feed", feed)
|
120
|
+
|
121
|
+
# a small debug participant, as you can see, a participant can
|
122
|
+
# directly be a ruby block (which receives the workitem)
|
123
|
+
# (it's commented out at the end of the flow)
|
124
|
+
#
|
125
|
+
engine.register_participant("puts_workitem") do |workitem|
|
126
|
+
puts
|
127
|
+
puts workitem.to_s
|
128
|
+
puts
|
129
|
+
end
|
130
|
+
|
131
|
+
#
|
132
|
+
# launching (not lunching)
|
133
|
+
|
134
|
+
launchitem = LaunchItem.new(QuoteLookupFlow)
|
135
|
+
#
|
136
|
+
# Passing the process definition class as the unique
|
137
|
+
# LaunchItem parameter
|
138
|
+
|
139
|
+
launchitem.symbols = "aapl, sunw, msft, lnux"
|
140
|
+
#
|
141
|
+
# directly setting the value for the field "symbols"
|
142
|
+
|
143
|
+
engine.launch(launchitem)
|
144
|
+
|
145
|
+
# in this example, the engine is used once with only one process definition,
|
146
|
+
# but an OpenWFE engine is made to run multiple different process instances.
|
147
|
+
|
148
|
+
# as an extension example, to produce a feed for the next ten hours you would :
|
149
|
+
#
|
150
|
+
# 10.times do
|
151
|
+
# engine.launch(launchitem)
|
152
|
+
# sleep (3600) # one hour
|
153
|
+
# end
|
154
|
+
|
@@ -1,6 +1,6 @@
|
|
1
1
|
#
|
2
|
-
|
3
|
-
# Copyright (c) 2005-
|
2
|
+
#--
|
3
|
+
# Copyright (c) 2005-2007, John Mettraux and Alain Hoang, OpenWFE.org
|
4
4
|
# All rights reserved.
|
5
5
|
#
|
6
6
|
# Redistribution and use in source and binary forms, with or without
|
@@ -28,8 +28,6 @@
|
|
28
28
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
29
29
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
30
30
|
# POSSIBILITY OF SUCH DAMAGE.
|
31
|
-
#</tt>
|
32
|
-
#
|
33
31
|
#++
|
34
32
|
#
|
35
33
|
# = openwferu -- Open Workflow Engine in Ruby
|
@@ -38,8 +36,8 @@
|
|
38
36
|
# referenced as a library via a require statement.
|
39
37
|
#
|
40
38
|
|
41
|
-
require 'workitem'
|
42
|
-
require '
|
43
|
-
require '
|
44
|
-
require '
|
39
|
+
require 'openwfe/workitem'
|
40
|
+
require 'openwfe/engine'
|
41
|
+
require 'openwfe/rudefinitions'
|
42
|
+
require 'openwfe/participants'
|
45
43
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
#
|
2
2
|
#--
|
3
|
-
# Copyright (c) 2006, John Mettraux, OpenWFE.org
|
3
|
+
# Copyright (c) 2006-2007, John Mettraux, Nicolas Modrzyk OpenWFE.org
|
4
4
|
# All rights reserved.
|
5
5
|
#
|
6
6
|
# Redistribution and use in source and binary forms, with or without
|
@@ -37,9 +37,9 @@
|
|
37
37
|
# "made in Japan"
|
38
38
|
#
|
39
39
|
# John Mettraux at openwfe.org
|
40
|
-
#
|
40
|
+
# Nicolas Modrzyk at openwfe.org
|
41
41
|
|
42
|
-
module
|
42
|
+
module OpenWFE
|
43
43
|
|
44
44
|
module Contextual
|
45
45
|
|
@@ -59,6 +59,14 @@ module OpenWFEru
|
|
59
59
|
end
|
60
60
|
return @application_context[key]
|
61
61
|
end
|
62
|
+
|
63
|
+
#
|
64
|
+
# use reflection to instanciate the new service,and
|
65
|
+
# add it to the application context
|
66
|
+
def init_service (service_name, service_class)
|
67
|
+
@application_context[service_name] = \
|
68
|
+
service_class.new(service_name,@application_context)
|
69
|
+
end
|
62
70
|
|
63
71
|
end
|
64
72
|
|