dor-services 4.25.1 → 5.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/dor-indexer +20 -19
- data/bin/dor-indexerd +3 -2
- data/config/certs/robots-dor-dev.crt +29 -0
- data/config/certs/robots-dor-dev.key +27 -0
- data/config/config_defaults.yml +0 -6
- data/config/dev_console_env.rb +65 -0
- data/config/environments/development.rb +84 -0
- data/config/environments/development.rb.old +84 -0
- data/config/environments/test.rb +84 -0
- data/lib/dor-services.rb +8 -18
- data/lib/dor/config.rb +18 -24
- data/lib/dor/datastreams/administrative_metadata_ds.rb +8 -7
- data/lib/dor/datastreams/content_metadata_ds.rb +200 -278
- data/lib/dor/datastreams/datastream_spec_solrizer.rb +1 -1
- data/lib/dor/datastreams/default_object_rights_ds.rb +10 -8
- data/lib/dor/datastreams/desc_metadata_ds.rb +30 -34
- data/lib/dor/datastreams/embargo_metadata_ds.rb +17 -13
- data/lib/dor/datastreams/events_ds.rb +12 -12
- data/lib/dor/datastreams/geo_metadata_ds.rb +3 -244
- data/lib/dor/datastreams/identity_metadata_ds.rb +34 -30
- data/lib/dor/datastreams/role_metadata_ds.rb +6 -6
- data/lib/dor/datastreams/simple_dublin_core_ds.rb +12 -9
- data/lib/dor/datastreams/version_metadata_ds.rb +14 -33
- data/lib/dor/datastreams/workflow_definition_ds.rb +18 -18
- data/lib/dor/datastreams/workflow_ds.rb +74 -65
- data/lib/dor/migrations/identifiable/assert_adminPolicy.rb +1 -1
- data/lib/dor/migrations/identifiable/fix_model_assertions.rb +1 -1
- data/lib/dor/migrations/identifiable/record_remediation.rb +2 -2
- data/lib/dor/migrations/identifiable/uriify_augmented_contentlocation_refs.rb +1 -1
- data/lib/dor/migrations/identifiable/uriify_contentlocation_refs.rb +1 -1
- data/lib/dor/migrations/processable/unify_workflows.rb +4 -4
- data/lib/dor/migrations/versionable/add_missing_version_md.rb +1 -1
- data/lib/dor/models/admin_policy_object.rb +1 -1
- data/lib/dor/models/assembleable.rb +3 -4
- data/lib/dor/models/collection.rb +0 -2
- data/lib/dor/models/contentable.rb +34 -35
- data/lib/dor/models/describable.rb +80 -122
- data/lib/dor/models/editable.rb +57 -73
- data/lib/dor/models/embargoable.rb +13 -15
- data/lib/dor/models/eventable.rb +3 -3
- data/lib/dor/models/geoable.rb +8 -9
- data/lib/dor/models/governable.rb +36 -54
- data/lib/dor/models/identifiable.rb +119 -115
- data/lib/dor/models/item.rb +4 -4
- data/lib/dor/models/itemizable.rb +9 -9
- data/lib/dor/models/presentable.rb +133 -0
- data/lib/dor/models/preservable.rb +4 -4
- data/lib/dor/models/processable.rb +29 -28
- data/lib/dor/models/publishable.rb +36 -30
- data/lib/dor/models/releasable.rb +310 -0
- data/lib/dor/models/shelvable.rb +14 -14
- data/lib/dor/models/upgradable.rb +13 -13
- data/lib/dor/models/versionable.rb +4 -7
- data/lib/dor/models/workflow_object.rb +16 -36
- data/lib/dor/services/cleanup_reset_service.rb +28 -34
- data/lib/dor/services/cleanup_service.rb +4 -4
- data/lib/dor/services/digital_stacks_service.rb +10 -10
- data/lib/dor/services/merge_service.rb +1 -1
- data/lib/dor/services/metadata_handlers/mdtoolkit_handler.rb +2 -2
- data/lib/dor/services/metadata_service.rb +20 -20
- data/lib/dor/services/registration_service.rb +26 -27
- data/lib/dor/services/reset_workspace_service.rb +15 -15
- data/lib/dor/services/sdr_ingest_service.rb +4 -4
- data/lib/dor/services/search_service.rb +4 -9
- data/lib/dor/services/suri_service.rb +5 -5
- data/lib/dor/services/technical_metadata_service.rb +3 -2
- data/lib/dor/utils/ng_tidy.rb +9 -9
- data/lib/dor/utils/predicate_patch.rb +1 -1
- data/lib/dor/utils/solr_doc_helper.rb +13 -5
- data/lib/dor/version.rb +1 -1
- data/lib/dor/workflow/document.rb +28 -30
- data/lib/dor/workflow/graph.rb +36 -36
- data/lib/dor/workflow/process.rb +12 -12
- data/lib/tasks/dor.rake +1 -1
- data/lib/tasks/rdoc.rake +3 -3
- metadata +67 -76
- data/lib/dor/datastreams/geo2mods.xsl +0 -867
- data/lib/dor/models/discoverable.rb +0 -64
- data/lib/dor/models/releaseable.rb +0 -357
- data/lib/dor/services/indexing_service.rb +0 -64
- data/lib/dor/utils/sdr_client.rb +0 -23
- data/lib/dor/utils/utc_date_field_mapper.rb +0 -7
@@ -1,9 +1,17 @@
|
|
1
1
|
module SolrDocHelper
|
2
|
-
|
2
|
+
|
3
3
|
def add_solr_value(solr_doc, field_name, value, field_type = :default, index_types = [:searchable])
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
if Solrizer::VERSION > "3"
|
5
|
+
case field_type
|
6
|
+
when :symbol
|
7
|
+
index_types << field_type
|
8
|
+
end
|
9
|
+
::Solrizer.insert_field(solr_doc, field_name, value, *index_types)
|
10
|
+
else
|
11
|
+
index_types.each { |index_type|
|
12
|
+
::Solrizer::Extractor.insert_solr_field_value(solr_doc, ::ActiveFedora::SolrService.solr_name(field_name, field_type, index_type), value)
|
13
|
+
}
|
14
|
+
end
|
7
15
|
end
|
8
|
-
|
16
|
+
|
9
17
|
end
|
data/lib/dor/version.rb
CHANGED
@@ -2,7 +2,7 @@ module Dor
|
|
2
2
|
module Workflow
|
3
3
|
class Document
|
4
4
|
include SolrDocHelper
|
5
|
-
include OM::XML::Document
|
5
|
+
include ::OM::XML::Document
|
6
6
|
|
7
7
|
set_terminology do |t|
|
8
8
|
t.root(:path => 'workflow')
|
@@ -15,7 +15,6 @@ module Workflow
|
|
15
15
|
t.elapsed(:path=>{:attribute=>"elapsed"})
|
16
16
|
t.lifecycle(:path=>{:attribute=>"lifecycle"})
|
17
17
|
t.attempts(:path=>{:attribute=>"attempts"}, :index_as => [:not_searchable])
|
18
|
-
t.version(:path=>{:attribute=>"version"})
|
19
18
|
}
|
20
19
|
end
|
21
20
|
@@definitions={}
|
@@ -31,28 +30,27 @@ module Workflow
|
|
31
30
|
def priority
|
32
31
|
processes.map {|proc| proc.priority.to_i }.detect(0) {|p| p > 0}
|
33
32
|
end
|
34
|
-
|
35
|
-
# @return [Boolean] if any process node does not have version, returns true, false otherwise (all processes have version)
|
33
|
+
|
36
34
|
def active?
|
37
|
-
|
35
|
+
processes.any? { |proc| !proc.version }
|
38
36
|
end
|
39
37
|
|
40
38
|
def definition
|
41
39
|
@definition ||= begin
|
42
|
-
if @@definitions.has_key? workflowId.first
|
43
|
-
@@definitions[workflowId.first]
|
40
|
+
if @@definitions.has_key? self.workflowId.first
|
41
|
+
@@definitions[self.workflowId.first]
|
44
42
|
else
|
45
|
-
wfo = Dor::WorkflowObject.find_by_name(workflowId.first)
|
43
|
+
wfo = Dor::WorkflowObject.find_by_name(self.workflowId.first)
|
46
44
|
wf_def=wfo ? wfo.definition : nil
|
47
|
-
@@definitions[workflowId.first] = wf_def
|
45
|
+
@@definitions[self.workflowId.first] = wf_def
|
48
46
|
wf_def
|
49
47
|
end
|
50
48
|
end
|
51
49
|
end
|
52
50
|
|
53
|
-
def graph(parent
|
54
|
-
wf_definition = definition
|
55
|
-
result = wf_definition ? Workflow::Graph.from_processes(wf_definition.repo, wf_definition.name, processes, parent) : nil
|
51
|
+
def graph(parent=nil, dir=nil)
|
52
|
+
wf_definition = self.definition
|
53
|
+
result = wf_definition ? Workflow::Graph.from_processes(wf_definition.repo, wf_definition.name, self.processes, parent) : nil
|
56
54
|
unless result.nil?
|
57
55
|
result['rankdir'] = dir || 'TB'
|
58
56
|
end
|
@@ -60,7 +58,7 @@ module Workflow
|
|
60
58
|
end
|
61
59
|
|
62
60
|
def [](value)
|
63
|
-
processes.find { |p| p.name == value }
|
61
|
+
self.processes.find { |p| p.name == value }
|
64
62
|
end
|
65
63
|
|
66
64
|
def processes
|
@@ -68,16 +66,15 @@ module Workflow
|
|
68
66
|
if ng_xml.search("/workflow/process").length == 0
|
69
67
|
return []
|
70
68
|
end
|
71
|
-
@processes ||=
|
72
|
-
|
73
|
-
definition.processes.collect do |process|
|
69
|
+
@processes ||= if self.definition
|
70
|
+
self.definition.processes.collect do |process|
|
74
71
|
node = ng_xml.at("/workflow/process[@name = '#{process.name}']")
|
75
72
|
process.update!(node,self) unless node.nil?
|
76
73
|
process
|
77
74
|
end
|
78
75
|
else
|
79
|
-
find_by_terms(:workflow, :process).collect do |x|
|
80
|
-
pnode = Dor::Workflow::Process.new(repository, workflowId, {})
|
76
|
+
self.find_by_terms(:workflow, :process).collect do |x|
|
77
|
+
pnode = Dor::Workflow::Process.new(self.repository, self.workflowId, {})
|
81
78
|
pnode.update!(x,self)
|
82
79
|
pnode
|
83
80
|
end.sort_by(&:datetime)
|
@@ -85,12 +82,12 @@ module Workflow
|
|
85
82
|
end
|
86
83
|
|
87
84
|
def workflow_should_show_completed? processes
|
88
|
-
processes.all?{|p| ['skipped', 'completed', '', nil].include?(p.status)}
|
85
|
+
return processes.all?{|p| ['skipped', 'completed', '', nil].include?(p.status)}
|
89
86
|
end
|
90
87
|
|
91
|
-
def to_solr(solr_doc
|
92
|
-
wf_name = workflowId.first
|
93
|
-
repo = repository.first
|
88
|
+
def to_solr(solr_doc=Hash.new, *args)
|
89
|
+
wf_name = self.workflowId.first
|
90
|
+
repo = self.repository.first
|
94
91
|
add_solr_value(solr_doc, 'wf', wf_name, :string, [:facetable])
|
95
92
|
add_solr_value(solr_doc, 'wf_wps', wf_name, :string, [:facetable])
|
96
93
|
add_solr_value(solr_doc, 'wf_wsp', wf_name, :string, [:facetable])
|
@@ -101,20 +98,20 @@ module Workflow
|
|
101
98
|
processes.each do |process|
|
102
99
|
if process.status.present?
|
103
100
|
#add a record of the robot having operated on this item, so we can track robot activity
|
104
|
-
if process.date_time
|
101
|
+
if process.date_time and process.status and (process.status == 'completed' || process.status == 'error')
|
105
102
|
add_solr_value(solr_doc, "wf_#{wf_name}_#{process.name}", process.date_time+'Z', :date)
|
106
103
|
end
|
107
104
|
add_solr_value(solr_doc, 'wf_error', "#{wf_name}:#{process.name}:#{process.error_message}", :string, [:facetable,:displayable]) if process.error_message #index the error message without the druid so we hopefully get some overlap
|
108
105
|
add_solr_value(solr_doc, 'wf_wsp', "#{wf_name}:#{process.status}", :string, [:facetable])
|
109
106
|
add_solr_value(solr_doc, 'wf_wsp', "#{wf_name}:#{process.status}:#{process.name}", :string, [:facetable])
|
110
|
-
add_solr_value(solr_doc, 'wf_wps', "#{wf_name}:#{process.name}", :string, [:facetable])
|
111
|
-
add_solr_value(solr_doc, 'wf_wps', "#{wf_name}:#{process.name}:#{process.status}", :string, [:facetable])
|
107
|
+
add_solr_value(solr_doc, 'wf_wps', "#{wf_name}:#{process.name}", :string, [:facetable, :symbol])
|
108
|
+
add_solr_value(solr_doc, 'wf_wps', "#{wf_name}:#{process.name}:#{process.status}", :string, [:facetable, :symbol])
|
112
109
|
add_solr_value(solr_doc, 'wf_swp', "#{process.status}", :string, [:facetable])
|
113
110
|
add_solr_value(solr_doc, 'wf_swp', "#{process.status}:#{wf_name}", :string, [:facetable])
|
114
111
|
add_solr_value(solr_doc, 'wf_swp', "#{process.status}:#{wf_name}:#{process.name}", :string, [:facetable])
|
115
112
|
if process.state != process.status
|
116
113
|
add_solr_value(solr_doc, 'wf_wsp', "#{wf_name}:#{process.state}:#{process.name}", :string, [:facetable])
|
117
|
-
add_solr_value(solr_doc, 'wf_wps', "#{wf_name}:#{process.name}:#{process.state}", :string, [:facetable])
|
114
|
+
add_solr_value(solr_doc, 'wf_wps', "#{wf_name}:#{process.name}:#{process.state}", :string, [:facetable, :symbol])
|
118
115
|
add_solr_value(solr_doc, 'wf_swp', "#{process.state}", :string, [:facetable])
|
119
116
|
add_solr_value(solr_doc, 'wf_swp', "#{process.state}:#{wf_name}", :string, [:facetable])
|
120
117
|
add_solr_value(solr_doc, 'wf_swp', "#{process.state}:#{wf_name}:#{process.name}", :string, [:facetable])
|
@@ -122,16 +119,17 @@ module Workflow
|
|
122
119
|
end
|
123
120
|
end
|
124
121
|
|
125
|
-
solr_doc['
|
126
|
-
solr_doc['
|
127
|
-
solr_doc['
|
122
|
+
solr_doc[Solrizer.solr_name('wf_wps', :symbol)].uniq! if solr_doc[Solrizer.solr_name('wf_wps', :symbol)]
|
123
|
+
solr_doc[Solrizer.solr_name('wf_wps', :facetable)].uniq! if solr_doc[Solrizer.solr_name('wf_wps', :facetable)]
|
124
|
+
solr_doc[Solrizer.solr_name('wf_wsp', :facetable)].uniq! if solr_doc[Solrizer.solr_name('wf_wsp', :facetable)]
|
125
|
+
solr_doc[Solrizer.solr_name('wf_swp', :facetable)].uniq! if solr_doc[Solrizer.solr_name('wf_swp', :facetable)]
|
128
126
|
solr_doc['workflow_status'].uniq! if solr_doc['workflow_status']
|
129
127
|
|
130
128
|
solr_doc
|
131
129
|
end
|
132
130
|
|
133
131
|
def inspect
|
134
|
-
"#<#{self.class.name}:#{object_id}>"
|
132
|
+
"#<#{self.class.name}:#{self.object_id}>"
|
135
133
|
end
|
136
134
|
end
|
137
135
|
end
|
data/lib/dor/workflow/graph.rb
CHANGED
@@ -3,16 +3,16 @@ require 'graphviz'
|
|
3
3
|
module Dor
|
4
4
|
module Workflow
|
5
5
|
class Graph
|
6
|
-
|
6
|
+
|
7
7
|
FILL_COLORS = { 'waiting' => "white", 'ready' => "white", 'error' => "#8B0000", 'blocked' => "white", 'completed' => "darkgreen", 'unknown' => "#CFCFCF" }
|
8
8
|
TEXT_COLORS = { 'waiting' => "black", 'ready' => "black", 'error' => "white", 'blocked' => "#8B0000", 'completed' => "white", 'unknown' => "black" }
|
9
9
|
PATTERNS = { 'waiting' => "diagonals", 'ready' => "filled", 'error' => "filled", 'blocked' => "diagonals", 'completed' => "filled", 'unknown' => "filled" }
|
10
10
|
RESERVED_KEYS = ['repository','name']
|
11
11
|
|
12
12
|
attr_reader :repo, :name, :processes, :graph, :root
|
13
|
-
|
13
|
+
|
14
14
|
def self.from_config(name, config, parent = nil)
|
15
|
-
wf = new(config['repository'], name, parent)
|
15
|
+
wf = self.new(config['repository'], name, parent)
|
16
16
|
config.keys.each { |p| wf.add_process(p.to_s) unless RESERVED_KEYS.include?(p) }
|
17
17
|
config.keys.each { |p|
|
18
18
|
if wf.processes[p]
|
@@ -27,12 +27,12 @@ class Graph
|
|
27
27
|
end
|
28
28
|
}
|
29
29
|
wf.finish
|
30
|
-
wf
|
30
|
+
return wf
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
def self.from_processes(repo, name, processes, parent = nil)
|
34
|
-
wf = new(repo, name, parent)
|
35
|
-
processes.each { |p|
|
34
|
+
wf = self.new(repo, name, parent)
|
35
|
+
processes.each { |p|
|
36
36
|
wf.add_process(p.name).status = p.state || 'unknown'
|
37
37
|
}
|
38
38
|
processes.each { |p|
|
@@ -46,15 +46,15 @@ class Graph
|
|
46
46
|
}
|
47
47
|
}
|
48
48
|
wf.finish
|
49
|
-
wf
|
49
|
+
return wf
|
50
50
|
end
|
51
|
-
|
51
|
+
|
52
52
|
def initialize(repo, name, parent = nil)
|
53
53
|
@repo = repo
|
54
54
|
@name = name
|
55
55
|
if parent.nil?
|
56
56
|
@graph = GraphViz.new(qname)
|
57
|
-
@root = add_nodes(name)
|
57
|
+
@root = self.add_nodes(name)
|
58
58
|
else
|
59
59
|
@graph = parent.subgraph(qname)
|
60
60
|
@root = parent.add_nodes(name)
|
@@ -63,34 +63,34 @@ class Graph
|
|
63
63
|
@root.shape = 'plaintext'
|
64
64
|
@processes = {}
|
65
65
|
end
|
66
|
-
|
66
|
+
|
67
67
|
def qname
|
68
68
|
[@repo,@name].join(':')
|
69
69
|
end
|
70
|
-
|
70
|
+
|
71
71
|
def add_process(name, external = false)
|
72
72
|
pqname = name.split(/:/).length == 3 ? name : [qname,name].join(':')
|
73
73
|
p = Process.new(self, pqname, name)
|
74
74
|
@processes[name] = p
|
75
|
-
p
|
75
|
+
return p
|
76
76
|
end
|
77
|
-
|
77
|
+
|
78
78
|
def finish
|
79
79
|
@processes.values.each do |process|
|
80
80
|
process.node.fontname = 'Helvetica'
|
81
|
-
if process.id =~ %r{^#{qname}}
|
81
|
+
if process.id =~ %r{^#{qname}} and process.prerequisites.length == 0
|
82
82
|
(@root << process.node)[:arrowhead => 'none', :arrowtail => 'none', :dir => 'both', :style => 'invisible']
|
83
83
|
end
|
84
84
|
end
|
85
85
|
|
86
86
|
@root.fontname = 'Helvetica'
|
87
|
-
self
|
87
|
+
return self
|
88
88
|
end
|
89
|
-
|
89
|
+
|
90
90
|
def inspect
|
91
|
-
"#{to_s[0..-2]} #{repo}:#{name} (#{processes.keys.join(', ')})>"
|
91
|
+
"#{self.to_s[0..-2]} #{repo}:#{name} (#{processes.keys.join(', ')})>"
|
92
92
|
end
|
93
|
-
|
93
|
+
|
94
94
|
def method_missing(sym,*args)
|
95
95
|
if @graph.respond_to?(sym)
|
96
96
|
@graph.send(sym,*args)
|
@@ -98,11 +98,11 @@ class Graph
|
|
98
98
|
super
|
99
99
|
end
|
100
100
|
end
|
101
|
-
|
101
|
+
|
102
102
|
class Process
|
103
|
-
|
103
|
+
|
104
104
|
attr_reader :name, :status, :node, :prerequisites
|
105
|
-
|
105
|
+
|
106
106
|
def initialize(graph, id, name)
|
107
107
|
@name = name
|
108
108
|
@graph = graph
|
@@ -110,13 +110,13 @@ class Graph
|
|
110
110
|
@node.shape = 'box'
|
111
111
|
@node.label = name
|
112
112
|
@prerequisites = []
|
113
|
-
set_status('unknown')
|
113
|
+
self.set_status('unknown')
|
114
114
|
end
|
115
|
-
|
115
|
+
|
116
116
|
def id
|
117
117
|
@node.id
|
118
118
|
end
|
119
|
-
|
119
|
+
|
120
120
|
def status=(s)
|
121
121
|
@status = s
|
122
122
|
if s == 'external'
|
@@ -129,14 +129,14 @@ class Graph
|
|
129
129
|
@node.style = PATTERNS[s]
|
130
130
|
end
|
131
131
|
end
|
132
|
-
|
132
|
+
|
133
133
|
def set_status(s)
|
134
134
|
self.status = s
|
135
|
-
self
|
135
|
+
return self
|
136
136
|
end
|
137
|
-
|
137
|
+
|
138
138
|
def depends_on(*processes)
|
139
|
-
wf1 = id.split(/:/)[0..1].join(':')
|
139
|
+
wf1 = self.id.split(/:/)[0..1].join(':')
|
140
140
|
processes.each { |process|
|
141
141
|
wf2 = process.id.split(/:/)[0..1].join(':')
|
142
142
|
edge = (process.node << @node)
|
@@ -146,21 +146,21 @@ class Graph
|
|
146
146
|
if (wf1 != wf2)
|
147
147
|
edge.style = 'dashed'
|
148
148
|
end
|
149
|
-
prerequisites << process
|
149
|
+
self.prerequisites << process
|
150
150
|
}
|
151
|
-
self
|
151
|
+
return self
|
152
152
|
end
|
153
|
-
|
153
|
+
|
154
154
|
def same_as(process)
|
155
|
-
@node = process.node
|
155
|
+
@node = process.node
|
156
156
|
end
|
157
|
-
|
157
|
+
|
158
158
|
def all_prerequisites
|
159
159
|
prerequisites.collect { |p| p.all_prerequisites + [p.name] }.flatten.uniq
|
160
160
|
end
|
161
|
-
|
161
|
+
|
162
162
|
end
|
163
163
|
|
164
164
|
end
|
165
165
|
end
|
166
|
-
end
|
166
|
+
end
|
data/lib/dor/workflow/process.rb
CHANGED
@@ -23,8 +23,8 @@ module Workflow
|
|
23
23
|
'batch_limit' => node['batch-limit'] ? node['batch-limit'].to_i : nil,
|
24
24
|
'error_limit' => node['error-limit'] ? node['error-limit'].to_i : nil,
|
25
25
|
'prerequisite' => node.xpath('prereq').collect { |p|
|
26
|
-
repo = (p['repository'].nil?
|
27
|
-
wf = (p['workflow'].nil?
|
26
|
+
repo = (p['repository'].nil? or p['repository'] == @repo) ? nil : p['repository']
|
27
|
+
wf = (p['workflow'].nil? or p['workflow'] == @workflow) ? nil : p['workflow']
|
28
28
|
[repo,wf,p.text.to_s].compact.join(':')
|
29
29
|
},
|
30
30
|
'priority' => node['priority'] ? node['priority'].to_i : 0
|
@@ -43,22 +43,22 @@ module Workflow
|
|
43
43
|
def note ; @attrs['note'] ; end
|
44
44
|
def version ; @attrs['version'] ; end
|
45
45
|
def priority ; @attrs['priority'] ; end
|
46
|
-
def completed? ; status == 'completed' ; end
|
47
|
-
def error? ; status == 'error' ; end
|
48
|
-
def waiting? ; status == 'waiting' ; end
|
49
|
-
def date_time ;@attrs['datetime'] ; end
|
46
|
+
def completed? ; self.status == 'completed' ; end
|
47
|
+
def error? ; self.status == 'error' ; end
|
48
|
+
def waiting? ; self.status == 'waiting' ; end
|
49
|
+
def date_time ;@attrs['datetime'] ; end
|
50
50
|
|
51
51
|
def archived?
|
52
52
|
return true if(@attrs['archived'] =~ /true$/i)
|
53
|
-
false
|
53
|
+
return false
|
54
54
|
end
|
55
55
|
|
56
56
|
def ready?
|
57
|
-
self.waiting?
|
57
|
+
self.waiting? and (not self.prerequisite.nil?) and self.prerequisite.all? { |pr| (prq = self.owner[pr]) && prq.completed? }
|
58
58
|
end
|
59
59
|
|
60
60
|
def blocked?
|
61
|
-
self.waiting?
|
61
|
+
self.waiting? and (not self.prerequisite.nil?) and self.prerequisite.any? { |pr| (prq = self.owner[pr]) && (prq.error? or prq.blocked?) }
|
62
62
|
end
|
63
63
|
|
64
64
|
def state
|
@@ -83,7 +83,7 @@ module Workflow
|
|
83
83
|
@attrs['elapsed'].nil? ? nil : @attrs['elapsed'].to_f
|
84
84
|
end
|
85
85
|
|
86
|
-
def update!(info, new_owner
|
86
|
+
def update!(info, new_owner=nil)
|
87
87
|
@owner = new_owner unless new_owner.nil?
|
88
88
|
if info.is_a? Nokogiri::XML::Node
|
89
89
|
info = Hash[info.attributes.collect { |k,v| [k,v.value] }]
|
@@ -92,8 +92,8 @@ module Workflow
|
|
92
92
|
end
|
93
93
|
|
94
94
|
def to_hash
|
95
|
-
@attrs.reject { |k,v| v.nil?
|
95
|
+
@attrs.reject { |k,v| v.nil? or v == 0 or (v.respond_to?(:empty?) and v.empty?) }
|
96
96
|
end
|
97
97
|
end
|
98
98
|
end
|
99
|
-
end
|
99
|
+
end
|
data/lib/tasks/dor.rake
CHANGED
@@ -24,7 +24,7 @@ task :bump_version, [:level] do |t, args|
|
|
24
24
|
version = version.join('.')
|
25
25
|
file_content.sub!(/^(\s*VERSION = )['"](.+)['"]/,"#{declaration}'#{version}'")
|
26
26
|
File.open(version_file,'w') { |f| f.write(file_content) }
|
27
|
-
|
27
|
+
|
28
28
|
readme_file = File.expand_path('../../../README.rdoc',__FILE__)
|
29
29
|
file_content = File.read(readme_file)
|
30
30
|
lines = file_content.lines.to_a
|
data/lib/tasks/rdoc.rake
CHANGED
@@ -10,11 +10,11 @@ namespace :doc do
|
|
10
10
|
require 'yard/rake/yardoc_task'
|
11
11
|
|
12
12
|
YARD::Rake::YardocTask.new(:generate) do |yt|
|
13
|
-
yt.files = Dir.glob(File.join(project_root, 'lib', '*.rb')) +
|
13
|
+
yt.files = Dir.glob(File.join(project_root, 'lib', '*.rb')) +
|
14
14
|
Dir.glob(File.join(project_root, 'lib', '**', '*.rb')) +
|
15
15
|
[ File.join(project_root, 'README.rdoc') ] +
|
16
16
|
[ File.join(project_root, 'LICENSE') ]
|
17
|
-
|
17
|
+
|
18
18
|
yt.options = ['--output-dir', doc_destination, '--readme', 'README.rdoc']
|
19
19
|
end
|
20
20
|
rescue LoadError
|
@@ -29,4 +29,4 @@ namespace :doc do
|
|
29
29
|
rm_r doc_destination if File.exists?(doc_destination)
|
30
30
|
end
|
31
31
|
|
32
|
-
end
|
32
|
+
end
|