libis-workflow 2.0.12 → 2.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +9 -17
- data/lib/libis/workflow/base/work_item.rb +4 -17
- data/lib/libis/workflow/base/workflow.rb +2 -2
- data/lib/libis/workflow/status.rb +22 -4
- data/lib/libis/workflow/task.rb +13 -23
- data/lib/libis/workflow/task_group.rb +5 -2
- data/lib/libis/workflow/task_runner.rb +0 -36
- data/lib/libis/workflow/version.rb +1 -1
- data/lib/libis/workflow/work_item.rb +2 -8
- data/spec/workflow_spec.rb +13 -65
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 391fa63e8c66d517802a33270a23090e71861051
|
4
|
+
data.tar.gz: d78da40fa5ebdca1174805ec76aa3c5b4e62ddcf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 355050d00564e301721e794c4ef4effdd3c8626ed1e98d7c572942dca121769c4baf4468513391b92d4e917f0d63d84e10294d4d7ec2f50d4ec3eb2155bc4eb5
|
7
|
+
data.tar.gz: 81a05c1532b13641e3d48f0a4f37bdedb0e0ec52fc4cfc5641aef51814792546dbd3baf24a6bee1b3534688ddeb8f53311e9481beab3027b2afeba4f22fee61d
|
data/README.md
CHANGED
@@ -44,7 +44,7 @@ implementation is provided in the class ::Libis::Workflow::Workflow for your con
|
|
44
44
|
your own from.
|
45
45
|
|
46
46
|
The Job class is responsible for instantiating a run-time workflow execution object - a Run - that captures the
|
47
|
-
configuration
|
47
|
+
configuration and workitems generated while executing the tasks. Essential logic is provided in the module
|
48
48
|
::Libis::Workflow::Base::Run with a simple in-memory implementation in ::Libis::Workflow::Run. The run object's class
|
49
49
|
name has to be provided to the job configuration so that the job can instantiate the correct object. The run object
|
50
50
|
will be able to execute the tasks in proper order on all the WorkItems supplied/collected. Each task can be implemented
|
@@ -99,15 +99,17 @@ is a Hash with:
|
|
99
99
|
::Libis::Tools::Parameter class for this.
|
100
100
|
|
101
101
|
The ::Libis::Workflow::Task base class allready defines the following parameters:
|
102
|
-
* quiet: Prevent generating log output. Default: false
|
103
102
|
* recursive: Run the task on all subitems recursively. Default: false
|
103
|
+
* abort_recursion_on_failure: Stop processing items recursively if one item fails. Default: false
|
104
104
|
* retry_count: Number of times to retry the task. Default: 0
|
105
105
|
* retry_interval: Number of seconds to wait between retries. Default: 10
|
106
106
|
|
107
107
|
If 'class' is not present, the default '::Libis::Workflow::TaskGroup' with the given name will be instantiated, which
|
108
|
-
performs each sub-task on the item.
|
109
|
-
|
110
|
-
|
108
|
+
performs each sub-task on the item.
|
109
|
+
|
110
|
+
If the task is configured to be recursive, it will iterate over the child items and perform each sub-task on each of
|
111
|
+
the child items. If a 'class' value is given, an instance of that class will be created and the task will be handed
|
112
|
+
the work item to process on. See the chapter on 'Tasks' below for more information on tasks.
|
111
113
|
|
112
114
|
Note that a task with custom processing will not execute sub-tasks. If you configured a processing task with subtasks
|
113
115
|
an exception will be thrown when trying to execute the job.
|
@@ -165,7 +167,6 @@ or if a custom storage implementation is desired, a number of data items and met
|
|
165
167
|
stored_attribute :items
|
166
168
|
stored_attribute :options
|
167
169
|
stored_attribute :properties
|
168
|
-
stored_attribute :log_history
|
169
170
|
stored_attribute :status_log
|
170
171
|
stored_attribute :summary
|
171
172
|
|
@@ -174,23 +175,14 @@ or if a custom storage implementation is desired, a number of data items and met
|
|
174
175
|
self.items = []
|
175
176
|
self.options = {}
|
176
177
|
self.properties = {}
|
177
|
-
self.log_history = []
|
178
178
|
self.status_log = []
|
179
179
|
self.summary = {}
|
180
180
|
end
|
181
181
|
|
182
182
|
protected
|
183
183
|
|
184
|
-
def
|
185
|
-
self.
|
186
|
-
end
|
187
|
-
|
188
|
-
def add_status_log(message, tasklist = nil)
|
189
|
-
self.status_log << { timestamp: ::Time.now, tasklist: tasklist, text: message }.cleanup
|
190
|
-
end
|
191
|
-
|
192
|
-
def status_label(status_entry)
|
193
|
-
"#{status_entry[:tasklist].last rescue nil}#{status_entry[:text] rescue nil}"
|
184
|
+
def add_status_log(info)
|
185
|
+
self.status_log << info
|
194
186
|
end
|
195
187
|
|
196
188
|
end
|
@@ -14,11 +14,6 @@ module Libis
|
|
14
14
|
# This module lacks the implementation for the data attributes. It functions as an interface that describes the
|
15
15
|
# common functionality regardless of the storage implementation. These attributes require some implementation:
|
16
16
|
#
|
17
|
-
# - status: [Symbol] the status field. Each task sets the status of the items it works on. Before starting processing
|
18
|
-
# the status is set to "#{task_name}Started". After successfull processing it is set to "#{task_name}Done" and if
|
19
|
-
# the task failed, it is set to "#{task_name}Failed". The status field can be used to perform real-time
|
20
|
-
# monitoring, reporting and error-recovery or restart of the ingest.
|
21
|
-
# The initial value for this attribute is :START.
|
22
17
|
# - parent: [Object|nil] a link to a parent work item. Work items can be organized in any hierarchy you think is
|
23
18
|
# relevant for your workflow (e.g. directory[/directory...]/file/line or library/section/book/page). Of course
|
24
19
|
# hierarchies are not mandatory.
|
@@ -28,9 +23,6 @@ module Libis
|
|
28
23
|
# - properties: [Hash] a set of properties, typically collected during the workflow processing and used to store
|
29
24
|
# final or intermediate resulst of tasks. The ::Lias::Ingester::FileItem module uses this attribute to store the
|
30
25
|
# properties (e.g. size, checksum, ...) of the file it represents.
|
31
|
-
# - log_history: [Array] a list of all logging messages collected for this work item. Whenever a task logs a message
|
32
|
-
# it will automatically be registered for the work item that it is processing or for the work item that was
|
33
|
-
# supplied as the first argument.
|
34
26
|
# - status_log: [Array] a list of all status changes the work item went through.
|
35
27
|
# - summary: [Hash] collected statistics about the ingest for the work item and its children. This structure will
|
36
28
|
# be filled in by the included task ::Lias::Ingester::Tasks::Analyzer wich is appended to the workflow by default.
|
@@ -41,7 +33,7 @@ module Libis
|
|
41
33
|
# attr_accessor :parent
|
42
34
|
# attr_accessor :items
|
43
35
|
# attr_accessor :options, :properties
|
44
|
-
# attr_accessor :
|
36
|
+
# attr_accessor :status_log
|
45
37
|
# attr_accessor :summary
|
46
38
|
#
|
47
39
|
# def initialize
|
@@ -49,21 +41,16 @@ module Libis
|
|
49
41
|
# self.items = []
|
50
42
|
# self.options = {}
|
51
43
|
# self.properties = {}
|
52
|
-
# self.log_history = []
|
53
44
|
# self.status_log = []
|
54
45
|
# self.summary = {}
|
55
46
|
# end
|
56
47
|
#
|
57
48
|
# protected
|
58
49
|
#
|
59
|
-
# ##
|
50
|
+
# ## Method below should be adapted to match the implementation of the status array
|
60
51
|
#
|
61
|
-
# def
|
62
|
-
# self.
|
63
|
-
# end
|
64
|
-
#
|
65
|
-
# def add_status_log(message, tasklist = nil)
|
66
|
-
# self.status_log << { c_at: ::Time.now, tasklist: tasklist, text: message }.cleanup
|
52
|
+
# def add_status_log(info)
|
53
|
+
# self.status_log << info
|
67
54
|
# end
|
68
55
|
#
|
69
56
|
#
|
@@ -34,8 +34,8 @@ module Libis
|
|
34
34
|
# - tasks: [Array] a list of subtask defintions for this task.
|
35
35
|
#
|
36
36
|
# Additionally the task definition Hash may specify values for any other parameter that the task knows of.
|
37
|
-
# All tasks have parameters
|
38
|
-
#
|
37
|
+
# All tasks have some fixed parameters. For more information about these see the documentation of
|
38
|
+
# the task class.
|
39
39
|
#
|
40
40
|
# A task definition does not require to have a 'class' entry. If not present the default
|
41
41
|
# ::Libis::Workflow::TaskGroup class will be instatiated. It will do nothing itself, but will execute the
|
@@ -22,10 +22,16 @@ module Libis
|
|
22
22
|
|
23
23
|
# Changes the status of the object. The status changed is logged in the status_log with the current timestamp.
|
24
24
|
#
|
25
|
-
# @param [
|
26
|
-
|
27
|
-
|
28
|
-
|
25
|
+
# @param [String] task namepath of the task
|
26
|
+
# @param [Symbol] status status to set
|
27
|
+
def set_status(task, status)
|
28
|
+
case status
|
29
|
+
when :STARTED
|
30
|
+
self.add_status_log(task: task, status: status)
|
31
|
+
else
|
32
|
+
log_entry = status_entry(task) || self.add_status_log(task: task, status: status)
|
33
|
+
log_entry[:status] = status
|
34
|
+
end
|
29
35
|
self.save!
|
30
36
|
end
|
31
37
|
|
@@ -73,6 +79,18 @@ module Libis
|
|
73
79
|
STATUS[self.status(task)] <=> STATUS[state]
|
74
80
|
end
|
75
81
|
|
82
|
+
# Update the progress of the working task
|
83
|
+
# @param [String] task namepath of the task
|
84
|
+
# @param [Integer] progress progress indicator (as <progress> of <max> or as % if <max> not set). Default: 0
|
85
|
+
# @param [Integer] max max count.
|
86
|
+
def status_progress(task, progress = 0, max = nil)
|
87
|
+
log_entry = self.status_entry(task)
|
88
|
+
log_entry ||= self.status_log.build(task: task)
|
89
|
+
log_entry[:progress] = progress
|
90
|
+
log_entry[:max] = max if max
|
91
|
+
self.save!
|
92
|
+
end
|
93
|
+
|
76
94
|
protected
|
77
95
|
|
78
96
|
# Get last known status entry for a given task
|
data/lib/libis/workflow/task.rb
CHANGED
@@ -17,8 +17,8 @@ module Libis
|
|
17
17
|
|
18
18
|
attr_accessor :parent, :name, :workitem
|
19
19
|
|
20
|
-
parameter quiet: false, description: 'Prevent generating log output.'
|
21
20
|
parameter recursive: false, description: 'Run the task on all subitems recursively.'
|
21
|
+
parameter abort_recursion_on_failure: false, description: 'Stop processing items recursively if one item fails.'
|
22
22
|
parameter retry_count: 0, description: 'Number of times to retry the task if waiting for another process.'
|
23
23
|
parameter retry_interval: 10, description: 'Number of seconds to wait between retries.'
|
24
24
|
|
@@ -124,23 +124,13 @@ module Libis
|
|
124
124
|
def message(severity, msg, *args)
|
125
125
|
taskname = self.namepath rescue nil
|
126
126
|
self.set_application(taskname)
|
127
|
-
item = self.workitem
|
127
|
+
item = self.workitem rescue nil
|
128
128
|
item = args.shift if args.size > 0 and args[0].is_a?(::Libis::Workflow::Base::WorkItem)
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
subject = item.namepath
|
135
|
-
rescue
|
136
|
-
# do nothing
|
137
|
-
end
|
138
|
-
self.set_subject(subject)
|
139
|
-
return unless super(severity, msg, *args)
|
140
|
-
item.log_message(
|
141
|
-
severity, msg.is_a?(Integer) ? {id: msg} : {text: (msg.to_s rescue '')}.merge(task: taskname), *args
|
142
|
-
)
|
143
|
-
end
|
129
|
+
subject = item.namepath rescue nil
|
130
|
+
subject ||= item.name rescue nil
|
131
|
+
subject ||= item.to_s rescue nil
|
132
|
+
self.set_subject(subject)
|
133
|
+
super(severity, msg, *args)
|
144
134
|
end
|
145
135
|
|
146
136
|
def logger
|
@@ -192,10 +182,14 @@ module Libis
|
|
192
182
|
return unless items.size > 0
|
193
183
|
|
194
184
|
status = Hash.new(0)
|
185
|
+
parent_item.status_progress(self.namepath, 0, items.count)
|
195
186
|
items.each_with_index do |item, i|
|
196
187
|
debug 'Processing subitem (%d/%d): %s', parent_item, i+1, items.size, item.to_s
|
197
188
|
run_item item
|
198
|
-
|
189
|
+
parent_item.status_progress(self.namepath, i+1)
|
190
|
+
item_status = item.status(self.namepath)
|
191
|
+
status[item_status] += 1
|
192
|
+
break if parameter(:abort_recursion_on_failure) && item_status != :DONE
|
199
193
|
end
|
200
194
|
|
201
195
|
debug '%d of %d subitems passed', parent_item, status[:DONE], items.size
|
@@ -275,14 +269,10 @@ module Libis
|
|
275
269
|
end
|
276
270
|
|
277
271
|
def set_status(item, state)
|
278
|
-
item.
|
272
|
+
item.set_status self.namepath, state
|
279
273
|
state
|
280
274
|
end
|
281
275
|
|
282
|
-
def to_status(state)
|
283
|
-
[state, self.namepath]
|
284
|
-
end
|
285
|
-
|
286
276
|
def check_item_type(klass, item = nil)
|
287
277
|
item ||= self.workitem
|
288
278
|
unless item.is_a? klass.to_s.constantize
|
@@ -38,11 +38,14 @@ module Libis
|
|
38
38
|
return unless tasks.size > 0
|
39
39
|
|
40
40
|
status = Hash.new(0)
|
41
|
+
item.status_progress(self.namepath, 0, tasks.count)
|
41
42
|
tasks.each_with_index do |task, i|
|
42
43
|
info 'Running subtask (%d/%d): %s', item, i+1, tasks.size, task.name
|
43
44
|
task.run item
|
44
|
-
|
45
|
-
|
45
|
+
item.status_progress(self.namepath, i+1)
|
46
|
+
item_status = item.status(task.namepath)
|
47
|
+
status[item_status] += 1
|
48
|
+
break if parameter(:abort_on_failure) && item_status != :DONE
|
46
49
|
end
|
47
50
|
|
48
51
|
substatus_check(status, item, 'task')
|
@@ -26,42 +26,6 @@ module Libis
|
|
26
26
|
|
27
27
|
super
|
28
28
|
|
29
|
-
recursive_run(item)
|
30
|
-
self.workitem = item
|
31
|
-
|
32
|
-
end
|
33
|
-
|
34
|
-
private
|
35
|
-
|
36
|
-
def recursive_run(item)
|
37
|
-
|
38
|
-
item.properties['ingest_failed'] = item.check_status(:FAILED)
|
39
|
-
|
40
|
-
item.summary = {}
|
41
|
-
item.log_history.each do |log|
|
42
|
-
level = log[:severity]
|
43
|
-
item.summary[level.to_s] ||= 0
|
44
|
-
item.summary[level.to_s] += 1
|
45
|
-
end
|
46
|
-
|
47
|
-
item.each do |i|
|
48
|
-
recursive_run i
|
49
|
-
i.summary.each do |level, count|
|
50
|
-
item.summary[level] ||= 0
|
51
|
-
item.summary[level] += (count || 0)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
rescue RuntimeError => ex
|
56
|
-
|
57
|
-
self.workitem = item
|
58
|
-
error 'Failed to analyze item: %s - %s', item, item.class, item.name
|
59
|
-
error 'Exception: %s', item, ex.message
|
60
|
-
|
61
|
-
ensure
|
62
|
-
|
63
|
-
item.save!
|
64
|
-
|
65
29
|
end
|
66
30
|
|
67
31
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Libis
|
2
2
|
module Workflow
|
3
|
-
VERSION = '2.0.
|
3
|
+
VERSION = '2.0.13' unless const_defined? :VERSION # the guard is against a redefinition warning that happens on Travis
|
4
4
|
end
|
5
5
|
end
|
@@ -11,7 +11,7 @@ module Libis
|
|
11
11
|
attr_accessor :parent
|
12
12
|
attr_accessor :items
|
13
13
|
attr_accessor :options, :properties
|
14
|
-
attr_accessor :
|
14
|
+
attr_accessor :status_log
|
15
15
|
attr_accessor :summary
|
16
16
|
|
17
17
|
def initialize
|
@@ -19,21 +19,15 @@ module Libis
|
|
19
19
|
self.items = []
|
20
20
|
self.options = {}
|
21
21
|
self.properties = {}
|
22
|
-
self.log_history = []
|
23
22
|
self.status_log = []
|
24
23
|
self.summary = {}
|
25
24
|
end
|
26
25
|
|
27
26
|
protected
|
28
27
|
|
29
|
-
def add_log_entry(msg)
|
30
|
-
# noinspection RubyResolve
|
31
|
-
self.log_history << msg.merge(c_at: ::Time.now)
|
32
|
-
end
|
33
|
-
|
34
28
|
def add_status_log(info)
|
35
29
|
# noinspection RubyResolve
|
36
|
-
self.status_log << info
|
30
|
+
self.status_log << info
|
37
31
|
end
|
38
32
|
|
39
33
|
end
|
data/spec/workflow_spec.rb
CHANGED
@@ -121,87 +121,35 @@ STR
|
|
121
121
|
expect(o[/(?<=\] ).*/].strip).to eq sample_out[i].strip
|
122
122
|
end
|
123
123
|
|
124
|
-
expect(run.
|
125
|
-
expect(run.
|
126
|
-
expect(run.status_log.size).to eq 10
|
127
|
-
expect(run.items.first.log_history.size).to eq 12
|
128
|
-
expect(run.items.first.status_log.size).to eq 6
|
124
|
+
expect(run.status_log.size).to eq 5
|
125
|
+
expect(run.items.first.status_log.size).to eq 3
|
129
126
|
|
130
127
|
[
|
131
|
-
{task: 'Run', status: :
|
132
|
-
{task: 'CollectFiles', status: :
|
133
|
-
{task: '
|
134
|
-
{task: 'ProcessFiles', status: :
|
135
|
-
{task: 'ProcessFiles/
|
136
|
-
{task: 'ProcessFiles/ChecksumTester', status: :DONE},
|
137
|
-
{task: 'ProcessFiles/CamelizeName', status: :STARTED},
|
138
|
-
{task: 'ProcessFiles/CamelizeName', status: :DONE},
|
139
|
-
{task: 'ProcessFiles', status: :DONE},
|
140
|
-
{task: 'Run', status: :DONE},
|
128
|
+
{task: 'Run', status: :DONE, progress: 2, max: 2},
|
129
|
+
{task: 'CollectFiles', status: :DONE, progress: 1, max: 1},
|
130
|
+
{task: 'ProcessFiles', status: :DONE, progress: 2, max: 2},
|
131
|
+
{task: 'ProcessFiles/ChecksumTester', status: :DONE, progress: 1, max: 1},
|
132
|
+
{task: 'ProcessFiles/CamelizeName', status: :DONE, progress: 1, max: 1},
|
141
133
|
].each_with_index do |h, i|
|
142
134
|
h.keys.each { |key| expect(run.status_log[i][key]).to eq h[key] }
|
143
135
|
end
|
144
136
|
|
145
137
|
[
|
146
|
-
{task: 'CollectFiles', status: :
|
147
|
-
{task: '
|
148
|
-
{task: 'ProcessFiles/
|
149
|
-
{task: 'ProcessFiles/ChecksumTester', status: :DONE},
|
150
|
-
{task: 'ProcessFiles/CamelizeName', status: :STARTED},
|
151
|
-
{task: 'ProcessFiles/CamelizeName', status: :DONE},
|
138
|
+
{task: 'CollectFiles', status: :DONE, progress: 3, max: 3},
|
139
|
+
{task: 'ProcessFiles/ChecksumTester', status: :DONE, progress: 3, max: 3},
|
140
|
+
{task: 'ProcessFiles/CamelizeName', status: :DONE, progress: 3, max: 3},
|
152
141
|
].each_with_index do |h, i|
|
153
142
|
h.keys.each { |key| expect(run.items.first.status_log[i][key]).to eq h[key] }
|
154
143
|
end
|
155
144
|
|
156
145
|
[
|
157
|
-
{task: 'CollectFiles', status: :
|
158
|
-
{task: '
|
159
|
-
{task: 'ProcessFiles/
|
160
|
-
{task: 'ProcessFiles/ChecksumTester', status: :DONE},
|
161
|
-
{task: 'ProcessFiles/CamelizeName', status: :STARTED},
|
162
|
-
{task: 'ProcessFiles/CamelizeName', status: :DONE},
|
146
|
+
{task: 'CollectFiles', status: :DONE, progress: nil, max: nil},
|
147
|
+
{task: 'ProcessFiles/ChecksumTester', status: :DONE, progress: nil, max: nil},
|
148
|
+
{task: 'ProcessFiles/CamelizeName', status: :DONE, progress: nil, max: nil},
|
163
149
|
].each_with_index do |h, i|
|
164
150
|
h.keys.each { |key| expect(run.items.first.first.status_log[i][key]).to eq h[key] }
|
165
151
|
end
|
166
152
|
|
167
|
-
[
|
168
|
-
{severity: 'INFO', task: 'Run', message: 'Ingest run started.'},
|
169
|
-
{severity: 'INFO', task: 'Run', message: 'Running subtask (1/2): CollectFiles'},
|
170
|
-
{severity: 'DEBUG', task: 'CollectFiles', message: 'Processing subitem (1/1): items'},
|
171
|
-
{severity: 'DEBUG', task: 'CollectFiles', message: '1 of 1 subitems passed'},
|
172
|
-
{severity: 'INFO', task: 'Run', message: 'Running subtask (2/2): ProcessFiles'},
|
173
|
-
{severity: 'INFO', task: 'ProcessFiles', message: 'Running subtask (1/2): ChecksumTester'},
|
174
|
-
{severity: 'DEBUG', task: 'ProcessFiles/ChecksumTester', message: 'Processing subitem (1/1): items'},
|
175
|
-
{severity: 'DEBUG', task: 'ProcessFiles/ChecksumTester', message: '1 of 1 subitems passed'},
|
176
|
-
{severity: 'INFO', task: 'ProcessFiles', message: 'Running subtask (2/2): CamelizeName'},
|
177
|
-
{severity: 'DEBUG', task: 'ProcessFiles/CamelizeName', message: 'Processing subitem (1/1): items'},
|
178
|
-
{severity: 'DEBUG', task: 'ProcessFiles/CamelizeName', message: '1 of 1 subitems passed'},
|
179
|
-
{severity: 'INFO', task: 'ProcessFiles', message: 'Done'},
|
180
|
-
{severity: 'INFO', task: 'Run', message: 'Done'},
|
181
|
-
].each_with_index do |h, i|
|
182
|
-
h.keys.each { |key| expect(run.log_history[i][key]).to eq h[key] }
|
183
|
-
end
|
184
|
-
|
185
|
-
[
|
186
|
-
{severity: 'DEBUG', task: 'CollectFiles', message: 'Processing subitem (1/3): test_dir_item.rb'},
|
187
|
-
{severity: 'DEBUG', task: 'CollectFiles', message: 'Processing subitem (2/3): test_file_item.rb'},
|
188
|
-
{severity: 'DEBUG', task: 'CollectFiles', message: 'Processing subitem (3/3): test_run.rb'},
|
189
|
-
{severity: 'DEBUG', task: 'CollectFiles', message: '3 of 3 subitems passed'},
|
190
|
-
{severity: 'DEBUG', task: 'ProcessFiles/ChecksumTester', message: 'Processing subitem (1/3): test_dir_item.rb'},
|
191
|
-
{severity: 'DEBUG', task: 'ProcessFiles/ChecksumTester', message: 'Processing subitem (2/3): test_file_item.rb'},
|
192
|
-
{severity: 'DEBUG', task: 'ProcessFiles/ChecksumTester', message: 'Processing subitem (3/3): test_run.rb'},
|
193
|
-
{severity: 'DEBUG', task: 'ProcessFiles/ChecksumTester', message: '3 of 3 subitems passed'},
|
194
|
-
{severity: 'DEBUG', task: 'ProcessFiles/CamelizeName', message: 'Processing subitem (1/3): test_dir_item.rb'},
|
195
|
-
{severity: 'DEBUG', task: 'ProcessFiles/CamelizeName', message: 'Processing subitem (2/3): test_file_item.rb'},
|
196
|
-
{severity: 'DEBUG', task: 'ProcessFiles/CamelizeName', message: 'Processing subitem (3/3): test_run.rb'},
|
197
|
-
{severity: 'DEBUG', task: 'ProcessFiles/CamelizeName', message: '3 of 3 subitems passed'},
|
198
|
-
].each_with_index do |h, i|
|
199
|
-
h.keys.each { |key| expect(run.items.first.log_history[i][key]).to eq h[key] }
|
200
|
-
end
|
201
|
-
|
202
|
-
# noinspection RubyResolve
|
203
|
-
expect(run.items.first.first.log_history).to be_empty
|
204
|
-
|
205
153
|
end
|
206
154
|
|
207
155
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: libis-workflow
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kris Dekeyser
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-04-
|
11
|
+
date: 2016-04-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|