ruote-kit 2.1.10 → 2.1.11
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/CHANGELOG.txt +10 -0
- data/Gemfile +21 -5
- data/LICENSE.txt +20 -0
- data/README.rdoc +132 -80
- data/Rakefile +4 -15
- data/TODO.txt +12 -0
- data/config.ru +22 -14
- data/lib/ruote-kit/application.rb +46 -22
- data/lib/ruote-kit/helpers/json_helpers.rb +280 -0
- data/lib/ruote-kit/helpers/link_helpers.rb +117 -0
- data/lib/ruote-kit/helpers/misc_helpers.rb +35 -0
- data/lib/ruote-kit/helpers/pagination_helpers.rb +30 -0
- data/lib/ruote-kit/helpers/render_helpers.rb +39 -92
- data/lib/ruote-kit/public/_ruote/images/favicon.ico +0 -0
- data/lib/ruote-kit/public/_ruote/images/ruote.png +0 -0
- data/lib/ruote-kit/public/_ruote/images/ruote_buttons.png +0 -0
- data/lib/ruote-kit/public/_ruote/javascripts/jquery-1.4.2.min.js +154 -0
- data/lib/ruote-kit/public/_ruote/javascripts/rk.js +40 -0
- data/lib/ruote-kit/public/_ruote/javascripts/ruote-fluo-editor.js +548 -0
- data/lib/ruote-kit/public/_ruote/javascripts/ruote-fluo.js +32 -1
- data/lib/ruote-kit/public/_ruote/stylesheets/reset.css +53 -0
- data/lib/ruote-kit/public/_ruote/stylesheets/rk.css +355 -16
- data/lib/ruote-kit/public/_ruote/stylesheets/ruote-fluo-editor.css +108 -0
- data/lib/ruote-kit/resources/errors.rb +46 -43
- data/lib/ruote-kit/resources/expressions.rb +92 -35
- data/lib/ruote-kit/resources/participants.rb +53 -0
- data/lib/ruote-kit/resources/processes.rb +68 -36
- data/lib/ruote-kit/resources/schedules.rb +27 -0
- data/lib/ruote-kit/resources/workitems.rb +93 -31
- data/lib/ruote-kit/spec/ruote_helpers.rb +25 -16
- data/lib/ruote-kit/version.rb +3 -1
- data/lib/ruote-kit/views/_pagination.html.haml +38 -0
- data/lib/ruote-kit/views/_tree_editor.html.haml +52 -0
- data/lib/ruote-kit/views/error.html.haml +69 -0
- data/lib/ruote-kit/views/errors.html.haml +28 -12
- data/lib/ruote-kit/views/expression.html.haml +161 -30
- data/lib/ruote-kit/views/expressions.html.haml +26 -21
- data/lib/ruote-kit/views/http_error.html.haml +11 -0
- data/lib/ruote-kit/views/index.html.haml +4 -0
- data/lib/ruote-kit/views/layout.html.haml +52 -32
- data/lib/ruote-kit/views/participants.html.haml +79 -0
- data/lib/ruote-kit/views/process.html.haml +109 -42
- data/lib/ruote-kit/views/process_launched.html.haml +6 -2
- data/lib/ruote-kit/views/processes.html.haml +55 -24
- data/lib/ruote-kit/views/processes_new.html.haml +36 -0
- data/lib/ruote-kit/views/schedules.html.haml +42 -0
- data/lib/ruote-kit/views/workitem.html.haml +83 -29
- data/lib/ruote-kit/views/workitems.html.haml +42 -19
- data/lib/ruote-kit.rb +17 -88
- data/ruote-kit.gemspec +68 -80
- data/spec/it_has_an_engine.rb +69 -0
- data/spec/resources/errors_spec.rb +198 -270
- data/spec/resources/expressions_spec.rb +308 -52
- data/spec/resources/index_spec.rb +28 -16
- data/spec/resources/participants_spec.rb +102 -0
- data/spec/resources/processes_spec.rb +218 -104
- data/spec/resources/schedules_spec.rb +97 -0
- data/spec/resources/workitems_spec.rb +195 -100
- data/spec/ruote-kit_configure_spec.rb +32 -75
- data/spec/spec.opts +0 -1
- data/spec/spec_helper.rb +31 -92
- data/spec/webapp_helpers_spec.rb +309 -0
- metadata +87 -152
- data/lib/ruote-kit/configuration.rb +0 -83
- data/lib/ruote-kit/helpers/engine_helpers.rb +0 -24
- data/lib/ruote-kit/helpers/form_helpers.rb +0 -11
- data/lib/ruote-kit/helpers/launch_item_parser.rb +0 -59
- data/lib/ruote-kit/helpers/navigation_helpers.rb +0 -54
- data/lib/ruote-kit/helpers.rb +0 -9
- data/lib/ruote-kit/public/_ruote/images/bg.gif +0 -0
- data/lib/ruote-kit/public/_ruote/images/bg_button_left.gif +0 -0
- data/lib/ruote-kit/public/_ruote/images/bg_button_left_cancel.gif +0 -0
- data/lib/ruote-kit/public/_ruote/images/bg_button_left_submit.gif +0 -0
- data/lib/ruote-kit/public/_ruote/images/bg_button_right.gif +0 -0
- data/lib/ruote-kit/public/_ruote/javascripts/SimplyButtons.js +0 -191
- data/lib/ruote-kit/public/_ruote/javascripts/fluo-dial.js +0 -149
- data/lib/ruote-kit/public/_ruote/stylesheets/SimplyButtons.css +0 -226
- data/lib/ruote-kit/public/_ruote/stylesheets/base.css +0 -336
- data/lib/ruote-kit/public/_ruote/stylesheets/style.css +0 -393
- data/lib/ruote-kit/views/launch_process.html.haml +0 -19
- data/lib/ruote-kit/views/process_failed_to_launch.html.haml +0 -7
- data/lib/ruote-kit/views/resource_not_found.html.haml +0 -7
- data/spec/helpers/render_helpers_spec.rb +0 -214
- data/spec/ruote-kit_spec.rb +0 -4
- data/spec/views/expressions.html.haml_spec.rb +0 -31
- data/spec/views/launch_process.html.haml_spec.rb +0 -22
- data/spec/views/process.html.haml_spec.rb +0 -17
- data/spec/views/process_launched.html.haml_spec.rb +0 -16
- data/spec/views/processes.html.haml_spec.rb +0 -31
- data/spec/views/workitems.html.haml_spec.rb +0 -69
@@ -1,55 +1,122 @@
|
|
1
|
+
|
2
|
+
- # under the MIT license, see LICENSE.txt
|
3
|
+
|
1
4
|
- @_uses_fluo = true
|
2
5
|
|
3
|
-
%
|
6
|
+
%h1
|
7
|
+
process
|
4
8
|
= @process.wfid
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
9
|
+
|
10
|
+
%canvas#fluo
|
11
|
+
|
12
|
+
%table.details
|
13
|
+
%tr
|
14
|
+
%td
|
15
|
+
name
|
16
|
+
%td
|
17
|
+
&= @process.definition_name
|
18
|
+
&= @process.definition_revision
|
19
|
+
%tr
|
20
|
+
%td
|
21
|
+
position
|
22
|
+
%td
|
23
|
+
- @process.position.each do |pos|
|
24
|
+
- text = "#{pos[1]} #{pos[2]['task']}"
|
25
|
+
- expid = pos.first.split('!').first
|
26
|
+
%span{ :onmouseover => "Fluo.highlight('fluo', '#{expid}');", :onmouseout => "Fluo.highlight('fluo');" }
|
27
|
+
- if @process.stored_workitems.find { |wi| wi.fei.sid == pos.first }
|
28
|
+
= alink(:workitems, pos.first, :text => text)
|
29
|
+
- else
|
30
|
+
= text
|
31
|
+
%tr
|
32
|
+
%td
|
33
|
+
expressions
|
34
|
+
%td
|
35
|
+
= alink(:expressions, @process.wfid, :text => @process.expressions.size)
|
36
|
+
%tr
|
37
|
+
%td
|
38
|
+
workitems
|
39
|
+
%td
|
40
|
+
#{@process.workitems.size} out,
|
41
|
+
- text = "#{@process.stored_workitems.size} in storage participant"
|
42
|
+
- if @process.stored_workitems.size > 0
|
43
|
+
= alink(:workitems, @process.wfid, :text => text)
|
44
|
+
- else
|
45
|
+
= text
|
46
|
+
%tr
|
47
|
+
%td
|
48
|
+
errors
|
49
|
+
%td
|
50
|
+
- if @process.errors.size > 0
|
51
|
+
= alink(:errors, @process.wfid, :text => @process.errors.size)
|
52
|
+
- else
|
53
|
+
0
|
54
|
+
%tr
|
55
|
+
%td
|
56
|
+
launch time
|
57
|
+
%td
|
58
|
+
= Time.parse(@process.launched_time).localtime.strftime('%Y/%m/%d %H:%M:%S')
|
59
|
+
%tr
|
60
|
+
%td
|
61
|
+
last active
|
62
|
+
%td
|
63
|
+
= Time.parse(@process.last_active).localtime.strftime('%Y/%m/%d %H:%M:%S')
|
64
|
+
%tr
|
65
|
+
%td
|
66
|
+
tags
|
67
|
+
%td
|
68
|
+
&= @process.tags.collect { |ta| ta.first }.join(', ')
|
69
|
+
|
70
|
+
%tr
|
71
|
+
%td.no_border{ :colspan => 2 }
|
72
|
+
|
73
|
+
|
74
|
+
%tr
|
75
|
+
%td
|
76
|
+
cancel expression
|
77
|
+
%td
|
16
78
|
%form{ :method => 'post' }
|
17
79
|
%input{ :type => 'hidden', :name => '_method', :value => 'delete' }
|
18
|
-
|
80
|
+
%input{ :type => 'submit', :value => 'cancel', :onclick => 'return confirm("really ?");' }
|
19
81
|
%span.description DELETE /_ruote/processes/#{@process.wfid}
|
20
|
-
|
82
|
+
%tr
|
83
|
+
%td
|
84
|
+
kill expression
|
85
|
+
%td
|
21
86
|
%form{ :method => 'post' }
|
22
87
|
%input{ :type => 'hidden', :name => '_method', :value => 'delete' }
|
23
88
|
%input{ :type => 'hidden', :name => '_kill', :value => '1' }
|
24
|
-
|
89
|
+
%input{ :type => 'submit', :value => 'kill', :onclick => 'return confirm("really ?");' }
|
25
90
|
%span.description DELETE /_ruote/processes/#{@process.wfid}?_kill=1
|
26
|
-
|
27
|
-
%
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
%
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
%
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
%
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
%canvas#fluo
|
91
|
+
%tr
|
92
|
+
%td
|
93
|
+
expressions
|
94
|
+
%td
|
95
|
+
GET
|
96
|
+
= alink(:expressions, @process.wfid)
|
97
|
+
%tr
|
98
|
+
%td
|
99
|
+
workitems
|
100
|
+
%td
|
101
|
+
GET
|
102
|
+
= alink(:workitems, @process.wfid)
|
103
|
+
%tr
|
104
|
+
%td
|
105
|
+
errors
|
106
|
+
%td
|
107
|
+
GET
|
108
|
+
= alink(:errors, @process.wfid)
|
109
|
+
%tr
|
110
|
+
%td
|
111
|
+
schedules
|
112
|
+
%td
|
113
|
+
GET
|
114
|
+
= alink(:schedules, @process.wfid)
|
51
115
|
|
52
116
|
:javascript
|
53
|
-
|
54
|
-
|
117
|
+
|
118
|
+
var proc_rep = #{process_tree(@process)};
|
119
|
+
Fluo.renderFlow('fluo', proc_rep);
|
55
120
|
Fluo.crop('fluo');
|
121
|
+
Fluo.resizeForMaxWidth('fluo', $('body').width() / 2.1);
|
122
|
+
|
@@ -1,6 +1,10 @@
|
|
1
|
-
|
1
|
+
|
2
|
+
- # under the MIT license, see LICENSE.txt
|
3
|
+
|
4
|
+
%h1 process launched
|
2
5
|
|
3
6
|
.flash
|
4
7
|
.message
|
5
8
|
.notice
|
6
|
-
%p
|
9
|
+
%p process #{alink(:processes, @wfid)} has been launched.
|
10
|
+
|
@@ -1,27 +1,58 @@
|
|
1
|
-
%h2 Processes
|
2
1
|
|
3
|
-
.
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
2
|
+
- # under the MIT license, see LICENSE.txt
|
3
|
+
|
4
|
+
%h1 processes
|
5
|
+
|
6
|
+
= haml :_pagination, :layout => false
|
7
|
+
|
8
|
+
%table.list
|
9
|
+
%thead
|
10
|
+
%td
|
11
|
+
wfid
|
12
|
+
%td
|
13
|
+
name
|
14
|
+
%td
|
15
|
+
position
|
16
|
+
%td
|
17
|
+
tags
|
18
|
+
%td
|
19
|
+
launched
|
20
|
+
%td
|
21
|
+
last active
|
22
|
+
%td
|
23
|
+
exps
|
24
|
+
%td
|
25
|
+
errs
|
26
|
+
%td
|
27
|
+
wis
|
11
28
|
|
12
|
-
%ul.nested_list
|
13
29
|
- @processes.each do |process|
|
14
|
-
%
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
30
|
+
%tr
|
31
|
+
%td
|
32
|
+
= alink(:processes, process.wfid, :text => process.wfid)
|
33
|
+
%td
|
34
|
+
&= process.definition_name
|
35
|
+
&= process.definition_revision
|
36
|
+
%td
|
37
|
+
- process.position.each do |pos|
|
38
|
+
- stored_wi = process.stored_workitems.find { |wi| wi.fei.sid == pos[0] }
|
39
|
+
- text = "#{pos[1]} #{pos[2]['task']}"
|
40
|
+
- if stored_wi
|
41
|
+
= alink(:workitems, stored_wi.fei.sid, :text => text)
|
42
|
+
- else
|
43
|
+
&= text
|
44
|
+
%td
|
45
|
+
&= process.tags.collect { |ta| ta.first }.join(', ')
|
46
|
+
%td
|
47
|
+
= Time.parse(process.launched_time).localtime.strftime('%Y/%m/%d %H:%M:%S')
|
48
|
+
%td
|
49
|
+
= Time.parse(process.last_active).localtime.strftime('%Y/%m/%d %H:%M:%S')
|
50
|
+
%td.right{ :title => 'expressions' }
|
51
|
+
= alink(:expressions, process.wfid, :text => process.expressions.size)
|
52
|
+
%td.right{ :title => 'errors' }
|
53
|
+
- if process.errors.size > 0
|
54
|
+
= alink(:errors, process.wfid, :text => process.errors.size)
|
55
|
+
%td.right{ :title => 'workitems' }
|
56
|
+
- if process.stored_workitems.size > 0
|
57
|
+
= alink(:workitems, process.wfid, :text => process.stored_workitems.size)
|
58
|
+
|
@@ -0,0 +1,36 @@
|
|
1
|
+
|
2
|
+
- # under the MIT license, see LICENSE.txt
|
3
|
+
|
4
|
+
- @_uses_fluo = true
|
5
|
+
|
6
|
+
|
7
|
+
%h1 launch process
|
8
|
+
|
9
|
+
%form{ :method => 'POST', :action => '/_ruote/processes', :enctype => 'multipart/form-data', :accept_charset => 'UTF-8' }
|
10
|
+
|
11
|
+
%input{ :type => 'hidden', :name => '_snowman', :value => '☃' }
|
12
|
+
|
13
|
+
%div
|
14
|
+
%label
|
15
|
+
process definition
|
16
|
+
%a.ruote_button.ruote_go_button{ :title => 'open process definition editor', :href => '', :onclick => 'showEditor(); return false;' }
|
17
|
+
|
18
|
+
%textarea#tree{ :name => 'definition', :cols => 80, :rows => 10 } #{sample_process}
|
19
|
+
|
20
|
+
%div
|
21
|
+
%label
|
22
|
+
workitem fields
|
23
|
+
%textarea{ :name => 'fields', :cols => 80, :rows => 3 }
|
24
|
+
|
25
|
+
%div
|
26
|
+
%label.togglable{ :onclick => 'Rk.toggle(this, $("textarea.variables")[0], "(process variables)", "process variables");' }
|
27
|
+
(process variables)
|
28
|
+
%textarea.variables{ :name => 'variables', :cols => 80, :rows => 3 }
|
29
|
+
|
30
|
+
%div
|
31
|
+
%input{ :type => 'submit', 'value' => 'launch' }
|
32
|
+
or
|
33
|
+
%a{ :href => '/_ruote/processes' } cancel
|
34
|
+
|
35
|
+
= haml :_tree_editor, :layout => false
|
36
|
+
|
@@ -0,0 +1,42 @@
|
|
1
|
+
|
2
|
+
- # under the MIT license, see LICENSE.txt
|
3
|
+
|
4
|
+
%h1 schedules
|
5
|
+
|
6
|
+
= haml :_pagination, :layout => false
|
7
|
+
|
8
|
+
%table.list
|
9
|
+
|
10
|
+
%thead
|
11
|
+
%td
|
12
|
+
owner / [ target ]
|
13
|
+
%td
|
14
|
+
process schedules
|
15
|
+
%td
|
16
|
+
type
|
17
|
+
%td
|
18
|
+
put at
|
19
|
+
%td
|
20
|
+
original
|
21
|
+
%td
|
22
|
+
at
|
23
|
+
|
24
|
+
- @schedules.each do |schedule|
|
25
|
+
%tr
|
26
|
+
%td
|
27
|
+
%div
|
28
|
+
= alink(:expressions, schedule['owner'].sid)
|
29
|
+
- if schedule['owner'] != schedule['target']
|
30
|
+
%div
|
31
|
+
= alink(:expressions, schedule['target'].sid)
|
32
|
+
%td
|
33
|
+
= alink(:schedules, schedule['owner'].wfid)
|
34
|
+
%td
|
35
|
+
&= schedule['type']
|
36
|
+
%td
|
37
|
+
= Time.parse(schedule['put_at']).localtime.strftime('%Y/%m/%d %H:%M:%S')
|
38
|
+
%td
|
39
|
+
&= schedule['original']
|
40
|
+
%td
|
41
|
+
= Time.parse(schedule['at']).localtime.strftime('%Y/%m/%d %H:%M:%S')
|
42
|
+
|
@@ -1,39 +1,93 @@
|
|
1
|
+
|
2
|
+
- # under the MIT license, see LICENSE.txt
|
3
|
+
|
1
4
|
- @_uses_fluo = true
|
2
5
|
|
3
|
-
%
|
6
|
+
%h1
|
7
|
+
workitem
|
8
|
+
= @workitem.fei.sid
|
4
9
|
|
5
|
-
%
|
6
|
-
%li fei: #{@workitem.fei.to_s}
|
7
|
-
%li participant: #{@workitem.participant_name}
|
8
|
-
%li dispatched: #{@workitem.dispatch_at}
|
9
|
-
%li last modified: #{@workitem.h.put_at}
|
10
|
-
%li process: #{link_to engine.process( @workitem.fei.wfid) }
|
11
|
-
%li expressions:
|
12
|
-
%li workitems of this process: #{link_to "GET /_ruote/workitems/#{@workitem.fei.wfid}", "/_ruote/workitems/#{@workitem.fei.wfid}" }
|
10
|
+
%canvas#fluo
|
13
11
|
|
14
|
-
%
|
12
|
+
%form{ :method => 'POST', :enctype => 'multipart/form-data', :accept_charset => 'UTF-8' }
|
15
13
|
|
16
|
-
%form.form{ :method => 'post' }
|
17
14
|
%input{ :type => 'hidden', :name => '_method', :value => 'put' }
|
18
|
-
%input{ :type => 'hidden', :name => '
|
19
|
-
.group
|
20
|
-
%label.label{ :for => "fields" } Fields
|
21
|
-
%textarea.text_area{ :name => "fields", :cols => 80, :rows => 10 }
|
22
|
-
= Rufus::Json.encode(@workitem.fields)
|
23
|
-
%span.description The current workitem fields in JSON format
|
24
|
-
.group
|
25
|
-
%input{ :type => 'checkbox', :name => '_proceed', :value => '1' }
|
26
|
-
%label{ :for => '_proceed' } Proceed the workflow (_proceed=1)
|
27
|
-
%br
|
28
|
-
%span.description Check to let the workflow proceed, leave unchecked to just update workitem fields
|
29
|
-
.group.navform
|
30
|
-
%input.submit{ :type => 'submit', :value => "PUT /_ruote/workitems/#{@workitem.fei.wfid}/#{@workitem.fei.expid}" }
|
31
|
-
|
32
|
-
%p
|
15
|
+
%input{ :type => 'hidden', :name => '_snowman', :value => '☃' }
|
33
16
|
|
34
|
-
%
|
17
|
+
%table.details
|
18
|
+
%tr
|
19
|
+
%td
|
20
|
+
participant
|
21
|
+
%td
|
22
|
+
&= @workitem.participant_name
|
23
|
+
%tr
|
24
|
+
%td
|
25
|
+
dispatched at
|
26
|
+
%td
|
27
|
+
- if @workitem.dispatched_at
|
28
|
+
= Time.parse(@workitem.dispatched_at).localtime.strftime('%Y/%m/%d %H:%M:%S')
|
29
|
+
%tr
|
30
|
+
%td
|
31
|
+
last modified
|
32
|
+
%td
|
33
|
+
= Time.parse(@workitem.h.put_at).localtime.strftime('%Y/%m/%d %H:%M:%S')
|
34
|
+
|
35
|
+
%tr
|
36
|
+
%td.no_border{ :colspan => 2 }
|
37
|
+
|
38
|
+
|
39
|
+
%tr
|
40
|
+
%td
|
41
|
+
process
|
42
|
+
%td
|
43
|
+
GET
|
44
|
+
= alink(:processes, @workitem.fei.wfid)
|
45
|
+
%tr
|
46
|
+
%td
|
47
|
+
expression
|
48
|
+
%td
|
49
|
+
GET
|
50
|
+
= alink(:expressions, @workitem.fei.sid)
|
51
|
+
%tr
|
52
|
+
%td
|
53
|
+
other workitems
|
54
|
+
%td
|
55
|
+
GET
|
56
|
+
= alink(:workitems, @workitem.fei.wfid)
|
57
|
+
|
58
|
+
%tr
|
59
|
+
%td.no_border{ :colspan => 2 }
|
60
|
+
|
61
|
+
|
62
|
+
%tr
|
63
|
+
%td
|
64
|
+
params
|
65
|
+
%td
|
66
|
+
- fields = @workitem.fields.dup
|
67
|
+
- params = fields.delete('params') || {}
|
68
|
+
- params.delete('ref')
|
69
|
+
- fields.delete('dispatched_at')
|
70
|
+
&= Rufus::Json.encode(params)[1..-2]
|
71
|
+
%tr
|
72
|
+
%td
|
73
|
+
fields
|
74
|
+
%td.no_padding
|
75
|
+
%textarea{ :name => "fields", :cols => 80, :rows => 10 } #{Rufus::Json.pretty_encode(@workitem.fields)}
|
76
|
+
%tr
|
77
|
+
%td
|
78
|
+
proceed ?
|
79
|
+
%td
|
80
|
+
%input{ :type => 'checkbox', :name => '_proceed' }
|
81
|
+
%tr
|
82
|
+
%td
|
83
|
+
%td
|
84
|
+
%input{ :type => 'submit', :value => "PUT /_ruote/workitems/#{@workitem.fei.sid}" }
|
35
85
|
|
36
86
|
:javascript
|
37
|
-
|
38
|
-
|
87
|
+
|
88
|
+
var proc_rep = #{process_tree(@workitem)};
|
89
|
+
|
90
|
+
Fluo.renderFlow('fluo', proc_rep, { 'workitems' : ['#{@workitem.fei.expid}'] });
|
39
91
|
Fluo.crop('fluo');
|
92
|
+
Fluo.resizeForMaxWidth('fluo', $('body').width() / 2.1);
|
93
|
+
|
@@ -1,23 +1,46 @@
|
|
1
|
-
%h2 Workitems
|
2
1
|
|
3
|
-
.
|
4
|
-
.message
|
5
|
-
- if @workitems.empty?
|
6
|
-
.warn
|
7
|
-
%p No workitems are currently available #{ @wfid ? "for #{@wfid}" : '' }
|
8
|
-
- else
|
9
|
-
.notice
|
10
|
-
%p #{ pluralize(@workitems.size, 'workitem') } available #{ @wfid ? "for #{@wfid}" : '' }
|
2
|
+
- # under the MIT license, see LICENSE.txt
|
11
3
|
|
12
|
-
|
13
|
-
|
14
|
-
|
4
|
+
%h1
|
5
|
+
workitems
|
6
|
+
= @wfid ? "for #{@wfid}" : ''
|
7
|
+
|
8
|
+
= haml :_pagination, :layout => false
|
9
|
+
|
10
|
+
%table.list
|
11
|
+
|
12
|
+
%thead
|
13
|
+
%td
|
14
|
+
id
|
15
|
+
%td
|
16
|
+
process
|
17
|
+
%td
|
18
|
+
participant
|
19
|
+
%td
|
20
|
+
params
|
21
|
+
%td
|
22
|
+
dispatched at
|
23
|
+
%td
|
24
|
+
fields
|
15
25
|
|
16
|
-
%ul.nested_list
|
17
26
|
- @workitems.each do |wi|
|
18
|
-
%
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
27
|
+
%tr
|
28
|
+
%td
|
29
|
+
= alink(:workitems, wi.fei.sid, :text => wi.fei.sid)
|
30
|
+
%td
|
31
|
+
= alink(:processes, wi.wfid, :text => wi.wfid)
|
32
|
+
%td
|
33
|
+
&= wi.participant_name
|
34
|
+
%td
|
35
|
+
- params = (wi.fields['params'] || {}).dup
|
36
|
+
- params.delete('ref')
|
37
|
+
&= Rufus::Json.encode(params)[1..-2]
|
38
|
+
%td
|
39
|
+
- if wi.dispatched_at
|
40
|
+
= Time.parse(wi.dispatched_at).localtime.strftime('%Y/%m/%d %H:%M:%S')
|
41
|
+
%td
|
42
|
+
- fields = wi.fields.dup
|
43
|
+
- fields.delete('params')
|
44
|
+
- fields.delete('dispatched_at')
|
45
|
+
= Rufus::Json.encode(fields)[1..-2][0, 28]
|
46
|
+
|
data/lib/ruote-kit.rb
CHANGED
@@ -1,109 +1,38 @@
|
|
1
|
+
|
2
|
+
# license is MIT, see LICENSE.txt
|
3
|
+
|
4
|
+
require 'ostruct'
|
5
|
+
|
1
6
|
require 'rufus-json'
|
2
7
|
require 'ruote'
|
3
8
|
require 'ruote/part/storage_participant'
|
4
9
|
require 'ruote-kit/version'
|
5
10
|
|
11
|
+
|
6
12
|
module RuoteKit
|
7
13
|
|
8
|
-
autoload :
|
9
|
-
autoload :Application, "ruote-kit/application"
|
10
|
-
autoload :Helpers, "ruote-kit/helpers"
|
14
|
+
autoload :Application, 'ruote-kit/application'
|
11
15
|
|
12
16
|
class << self
|
13
|
-
# The instance of ruote
|
14
|
-
attr_accessor :engine
|
15
17
|
|
16
|
-
|
17
|
-
attr_accessor :worker
|
18
|
+
attr_accessor :engine
|
18
19
|
|
19
20
|
def env
|
20
|
-
@env ||= (
|
21
|
-
if defined?( Rails )
|
22
|
-
Rails.env
|
23
|
-
else
|
24
|
-
ENV['RACK_ENV'] || 'development'
|
25
|
-
end
|
26
|
-
)
|
27
|
-
end
|
28
|
-
|
29
|
-
# Yields a RuoteKit::Configuration instance and then immediately starts
|
30
|
-
# the engine.
|
31
|
-
def configure
|
32
|
-
yield configuration if block_given?
|
33
|
-
|
34
|
-
run_engine!
|
35
|
-
end
|
36
|
-
alias run! configure
|
37
|
-
|
38
|
-
def shutdown!( purge_engine = false )
|
39
|
-
shutdown_engine( purge_engine )
|
40
|
-
end
|
41
|
-
|
42
|
-
def configuration
|
43
|
-
@configuration ||= Configuration.new
|
44
|
-
end
|
45
|
-
|
46
|
-
# Ensure the engine is running
|
47
|
-
def ensure_engine!
|
48
|
-
run_engine! if self.engine.nil?
|
49
|
-
end
|
50
|
-
|
51
|
-
# Runs an engine, and starts a threaded workers if #configuration allows
|
52
|
-
# it
|
53
|
-
def run_engine!
|
54
|
-
|
55
|
-
return unless configuration.run_engine
|
56
|
-
|
57
|
-
storage = configuration.storage_instance
|
58
|
-
|
59
|
-
self.engine = Ruote::Engine.new( configuration.run_worker ? self.worker = Ruote::Worker.new(storage) : storage )
|
60
|
-
|
61
|
-
configuration.do_participant_registration
|
62
|
-
|
63
|
-
@storage_participant = nil
|
64
|
-
end
|
65
|
-
|
66
|
-
# Run a single worker. By default this method will block indefinitely,
|
67
|
-
# unless +run_in_thread+ is set to true
|
68
|
-
def run_worker!( run_in_thread = false )
|
69
|
-
self.worker = Ruote::Worker.new( configuration.storage_instance )
|
70
|
-
run_in_thread ? self.worker.run_in_thread : self.worker.run
|
71
|
-
end
|
72
|
-
|
73
|
-
def shutdown_engine( purge = false )
|
74
|
-
|
75
|
-
return if self.engine.nil?
|
76
|
-
|
77
|
-
self.engine.shutdown
|
78
|
-
|
79
|
-
if purge
|
80
|
-
self.engine.context.keys.each do |k|
|
81
|
-
s = self.engine.context[k]
|
82
|
-
s.purge if s.respond_to?(:purge)
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
self.engine = nil
|
87
|
-
|
88
|
-
shutdown_worker! if configuration.run_worker
|
89
|
-
end
|
90
|
-
|
91
|
-
def shutdown_worker!
|
92
|
-
self.worker.shutdown if self.worker
|
93
|
-
self.worker = nil
|
21
|
+
@env ||= defined?(Rails) ? Rails.env : ENV['RACK_ENV'] || 'development'
|
94
22
|
end
|
95
23
|
|
96
24
|
def storage_participant
|
97
|
-
|
98
|
-
@storage_participant ||= Ruote::StorageParticipant.new(self.engine)
|
25
|
+
engine.storage_participant
|
99
26
|
end
|
100
27
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
def reset_configuration!
|
105
|
-
@configuration = nil
|
28
|
+
def run_worker (storage)
|
29
|
+
RuoteKit.engine = Ruote::Engine.new(
|
30
|
+
Ruote::Worker.new(storage), :join => true)
|
106
31
|
end
|
107
32
|
|
33
|
+
def bind_engine (storage)
|
34
|
+
RuoteKit.engine = Ruote::Engine.new(storage)
|
35
|
+
end
|
108
36
|
end
|
109
37
|
end
|
38
|
+
|