Class: DeployPin::Task
Constant Summary
ParallelWrapper::PARALLEL_PREFIX
Instance Attribute Summary collapse
Instance Method Summary
collapse
method_missing, respond_to_missing?
Constructor Details
#initialize(file) ⇒ Task
Returns a new instance of Task.
20
21
22
23
24
25
26
27
28
29
|
# File 'lib/deploy_pin/task.rb', line 20
def initialize(file)
@file = file
@identifier = nil
@group = nil
@title = ''
@affected_areas = ''
@script = ''
@explicit_timeout = false
@parallel = false
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
in the class DeployPin::ParallelWrapper
Instance Attribute Details
#affected_areas ⇒ Object
Returns the value of attribute affected_areas.
9
10
11
|
# File 'lib/deploy_pin/task.rb', line 9
def affected_areas
@affected_areas
end
|
#explicit_timeout ⇒ Object
Returns the value of attribute explicit_timeout.
9
10
11
|
# File 'lib/deploy_pin/task.rb', line 9
def explicit_timeout
@explicit_timeout
end
|
#file ⇒ Object
Returns the value of attribute file.
9
10
11
|
# File 'lib/deploy_pin/task.rb', line 9
def file
@file
end
|
#group ⇒ Object
Returns the value of attribute group.
9
10
11
|
# File 'lib/deploy_pin/task.rb', line 9
def group
@group
end
|
#identifier ⇒ Object
Returns the value of attribute identifier.
9
10
11
|
# File 'lib/deploy_pin/task.rb', line 9
def identifier
@identifier
end
|
#recurring ⇒ Object
Returns the value of attribute recurring.
9
10
11
|
# File 'lib/deploy_pin/task.rb', line 9
def recurring
@recurring
end
|
#script ⇒ Object
Returns the value of attribute script.
9
10
11
|
# File 'lib/deploy_pin/task.rb', line 9
def script
@script
end
|
#title ⇒ Object
Returns the value of attribute title.
9
10
11
|
# File 'lib/deploy_pin/task.rb', line 9
def title
@title
end
|
Instance Method Details
#<=>(other) ⇒ Object
131
132
133
|
# File 'lib/deploy_pin/task.rb', line 131
def <=>(other)
sorting_key <=> other.sorting_key
end
|
#details ⇒ Object
104
105
106
107
108
109
110
111
|
# File 'lib/deploy_pin/task.rb', line 104
def details
{
identifier:,
group:,
title:,
affected_areas:
}
end
|
#done? ⇒ Boolean
65
66
67
68
69
70
|
# File 'lib/deploy_pin/task.rb', line 65
def done?
return if recurring
return unless record
record.completed_at.present?
end
|
#each_line(&block) ⇒ Object
96
97
98
99
100
101
102
|
# File 'lib/deploy_pin/task.rb', line 96
def each_line(&block)
if file.starts_with?('# no_file_task')
file.each_line(&block)
else
File.foreach(file, &block)
end
end
|
#eql?(other) ⇒ Boolean
113
114
115
116
|
# File 'lib/deploy_pin/task.rb', line 113
def eql?(other)
script == other.script && identifier != other.identifier
end
|
#increment_progress!(incrementor) ⇒ Object
53
54
55
56
57
|
# File 'lib/deploy_pin/task.rb', line 53
def increment_progress!(incrementor)
raise NotImplementedError, 'Recurring tasks do not support progress yet.' if recurring
record.increment!(:progress, incrementor)
end
|
#mark ⇒ Object
46
47
48
49
50
51
|
# File 'lib/deploy_pin/task.rb', line 46
def mark
return if recurring
record.update(completed_at: Time.current)
end
|
#parse ⇒ Object
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
# File 'lib/deploy_pin/task.rb', line 76
def parse
each_line do |line|
case line.strip
when /\A# (-?\d+):(\w+):?(recurring)?/
@identifier = Regexp.last_match(1).to_i
@group = Regexp.last_match(2)
@recurring = Regexp.last_match(3)
when /\A# task_title:(.+)/
@title = Regexp.last_match(1).strip
when /\A# affected_areas:(.+)/
@affected_areas = Regexp.last_match(1).strip
when /\A[^#].*/
@script += line
@explicit_timeout = true if line =~ /Database.execute_with_timeout.*/
@parallel = true if line =~ /[Pp]arallel.*/
end
end
end
|
#prepare ⇒ Object
40
41
42
43
44
|
# File 'lib/deploy_pin/task.rb', line 40
def prepare
return if recurring
DeployPin::Record.create(uuid: identifier) unless record
end
|
#record ⇒ Object
36
37
38
|
# File 'lib/deploy_pin/task.rb', line 36
def record
DeployPin::Record.find_by(uuid: identifier)
end
|
#run ⇒ Object
31
32
33
34
|
# File 'lib/deploy_pin/task.rb', line 31
def run
eval(script)
end
|
#save_progress!(value) ⇒ Object
59
60
61
62
63
|
# File 'lib/deploy_pin/task.rb', line 59
def save_progress!(value)
raise NotImplementedError, 'Recurring tasks do not support progress yet.' if recurring
record.update(progress: value)
end
|
#sorting_key ⇒ Object
122
123
124
125
126
127
128
|
# File 'lib/deploy_pin/task.rb', line 122
def sorting_key
if identifier.to_i.negative?
[group_index, unreachable_future + identifier]
else
[group_index, identifier]
end
end
|
#under_timeout? ⇒ Boolean
72
73
74
|
# File 'lib/deploy_pin/task.rb', line 72
def under_timeout?
!explicit_timeout? && !parallel?
end
|
#unreachable_future ⇒ Object
118
119
120
|
# File 'lib/deploy_pin/task.rb', line 118
def unreachable_future
1.year.from_now.to_date.strftime('%Y%m%d%H%M%S').to_i
end
|