taskloop 0.1.0 → 0.2.0

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.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/lib/taskloop/command/deploy.rb +3 -4
  4. data/lib/taskloop/command/init.rb +10 -8
  5. data/lib/taskloop/command/list.rb +10 -8
  6. data/lib/taskloop/dsl/dsl.rb +16 -5
  7. data/lib/taskloop/extension/integer_extension.rb +0 -4
  8. data/lib/taskloop/rules/after_scope_rule.rb +36 -45
  9. data/lib/taskloop/rules/before_scope_rule.rb +36 -45
  10. data/lib/taskloop/rules/between_scope_rule.rb +51 -60
  11. data/lib/taskloop/rules/boundary_rule.rb +21 -0
  12. data/lib/taskloop/rules/date_list_rule.rb +0 -4
  13. data/lib/taskloop/rules/default_rule.rb +0 -4
  14. data/lib/taskloop/rules/end_point_boundary_rule.rb +21 -0
  15. data/lib/taskloop/rules/interval_rule.rb +0 -4
  16. data/lib/taskloop/rules/loop_rule.rb +0 -4
  17. data/lib/taskloop/rules/rule.rb +2 -4
  18. data/lib/taskloop/rules/specific_rule.rb +25 -32
  19. data/lib/taskloop/rules/start_point_boundary_rule.rb +21 -0
  20. data/lib/taskloop/rules/time_list_rule.rb +0 -4
  21. data/lib/taskloop/task/task.rb +20 -7
  22. data/lib/taskloop/task/task_property.rb +121 -45
  23. data/lib/taskloop/version.rb +1 -1
  24. data/sig/integer.rbs +11 -0
  25. data/sig/string.rbs +7 -0
  26. data/sig/task_loop/after_scope_rule.rbs +11 -0
  27. data/sig/task_loop/before_scope_rule.rbs +11 -0
  28. data/sig/task_loop/between_scope_rule.rbs +14 -0
  29. data/sig/task_loop/boundary_rule.rbs +9 -0
  30. data/sig/task_loop/date_list_rule.rbs +11 -0
  31. data/sig/task_loop/default_rule.rbs +8 -0
  32. data/sig/task_loop/deploy.rbs +18 -0
  33. data/sig/task_loop/dsl.rbs +25 -0
  34. data/sig/task_loop/end_point_boundary_rule.rbs +9 -0
  35. data/sig/task_loop/env.rbs +13 -0
  36. data/sig/task_loop/init.rbs +5 -0
  37. data/sig/task_loop/interval_rule.rbs +9 -0
  38. data/sig/task_loop/launch.rbs +12 -0
  39. data/sig/task_loop/list.rbs +9 -0
  40. data/sig/task_loop/log.rbs +11 -0
  41. data/sig/task_loop/loop_rule.rbs +9 -0
  42. data/sig/task_loop/proj_task_list.rbs +5 -0
  43. data/sig/task_loop/rule.rbs +11 -0
  44. data/sig/task_loop/run.rbs +11 -0
  45. data/sig/task_loop/scope_rule.rbs +9 -0
  46. data/sig/task_loop/shutdown.rbs +7 -0
  47. data/sig/task_loop/specific_rule.rbs +11 -0
  48. data/sig/task_loop/start_point_boundary_rule.rbs +9 -0
  49. data/sig/task_loop/task.rbs +34 -0
  50. data/sig/task_loop/task_data_file.rbs +23 -0
  51. data/sig/task_loop/task_property.rbs +83 -0
  52. data/sig/task_loop/time_list_rule.rbs +13 -0
  53. data/sig/task_loop/undeploy.rbs +7 -0
  54. metadata +35 -2
@@ -2,63 +2,56 @@ module TaskLoop
2
2
 
3
3
  class SpecificRule < Rule
4
4
 
5
- attr_accessor :value
5
+ attr_accessor :values
6
6
 
7
- def initialize(unit, value)
7
+ def initialize(unit, values)
8
8
  super unit
9
- @value = value
9
+ unless values != nil && values.length > 0
10
+ raise ArgumentError, "values arguments need at least one value."
11
+ end
12
+
13
+ @values = values
10
14
  end
11
15
 
12
- def value_value
13
- if (Task::DAY.has_key?(@value))
14
- return Task::DAY[@value]
15
- end
16
- if (Task::WEEK.has_key?(@value))
17
- return Task::WEEK[@value]
18
- end
19
- if (Task::MONTH.has_key?(@value))
20
- return Task::MONTH[@value]
16
+ def values_values
17
+ if @unit == :week
18
+ return @values.map { |key| Task::WEEK[key] }
21
19
  end
22
20
 
23
- unless @value != nil && @value.is_a?(Integer)
24
- return -1
21
+ if @unit == :day
22
+ return @values.map { |key| Task::DAY[key] }
25
23
  end
26
24
 
27
- return @value
28
- end
29
-
30
- def is_week_value?
31
- if @unit == :day && Task::WEEK.has_key?(@value)
32
- return true
25
+ if @unit == :month
26
+ return @values.map { |key| Task::MONTH[key] }
33
27
  end
34
- return false
28
+
29
+ return @values
35
30
  end
36
31
 
37
32
  def is_conform_rule?(last_exec_time)
38
33
  current = Time.now
39
- value = value_value
34
+ vals = values_values
40
35
  result = false
41
36
  case @unit
42
37
  when :year then
43
- result = current.year == value
38
+ result = vals.include?(current.year)
44
39
  when :month then
45
- result = current.month == value
40
+ result = vals.include?(current.month)
41
+ when :week then
42
+ result = vals.include?(TaskLoop::WEEK_BASE + current.wday)
46
43
  when :day then
47
- if is_week_value?
48
- result = current.wday == (value % TaskLoop::WEEK_BASE)
49
- else
50
- result = current.day == value
51
- end
44
+ result = vals.include?(current.day)
52
45
  when :hour then
53
- result = current.hour == value
46
+ result = vals.include?(current.hour)
54
47
  when :minute then
55
- result = current.min == value
48
+ result = vals.include?(current.min)
56
49
  end
57
50
  return result
58
51
  end
59
52
 
60
53
  def desc
61
- super + "; specific: #{value}"
54
+ super + "; specific: #{values.join(', ')}"
62
55
  end
63
56
  end
64
57
  end
@@ -0,0 +1,21 @@
1
+ module TaskLoop
2
+ class StartPointBoundaryRule < BoundaryRule
3
+ attr_accessor :value
4
+ def initialize(unit, value)
5
+ super unit, :start
6
+ @value = value
7
+ end
8
+
9
+ def is_conform_rule?(last_exec_time)
10
+ current = Time.now.to_i
11
+ date_format = "%Y-%m-%d %H:%M:%S"
12
+ date_object = Time.strptime(value, date_format)
13
+ start_time = date_object.to_i
14
+ return current >= start_time
15
+ end
16
+
17
+ def desc
18
+ super + " from #{value}"
19
+ end
20
+ end
21
+ end
@@ -28,10 +28,6 @@ module TaskLoop
28
28
  @times = times
29
29
  end
30
30
 
31
- def is_week_value?
32
- return false
33
- end
34
-
35
31
  def is_conform_rule?(last_exec_time)
36
32
  current = Time.now
37
33
  result = false
@@ -19,7 +19,7 @@ module TaskLoop
19
19
  @@tasklist = value
20
20
  end
21
21
 
22
- def initialize()
22
+ def initialize
23
23
  yield self
24
24
  check = true
25
25
  unless @name
@@ -73,20 +73,20 @@ module TaskLoop
73
73
  def check_rule_conflict?
74
74
  result = true
75
75
  # check year/month/day with date, they cannot be set at the same time
76
- if hasYMD? && hasDate?
76
+ if has_ymd? && has_date?
77
77
  puts "Error: #{desc} => <year/month/day> and <date> cannot be set at the same time.".ansi.red
78
78
  result = false
79
79
  end
80
80
 
81
81
  # check hour/minute with time, they cannot be set at the same time
82
- if hasHM? && hasTime?
82
+ if has_hm? && has_time?
83
83
  puts "Error: #{desc} => <hour/minute> and <time> cannot be set at the same time.".ansi.red
84
84
  result = false
85
85
  end
86
86
 
87
87
  # check rule type
88
88
 
89
- if hasYMD? && hasHM?
89
+ if has_ymd? && has_hm?
90
90
  # check minute/hour/day/month/year. Get the last IntervalRule, than check if there is SpecificRule or ScopeRule before
91
91
  rules = [minute, hour, day, month, year]
92
92
  rIdx = rules.rindex { |rule| rule.is_a?(IntervalRule) }
@@ -104,7 +104,7 @@ module TaskLoop
104
104
 
105
105
  end
106
106
 
107
- if hasYMD? && hasTime?
107
+ if has_ymd? && has_time?
108
108
  # check year/month/day with time, YMD can not have IntervalRule
109
109
  rules = [day, month, year]
110
110
  hasInterval = rules.any? { |rule| rule.is_a?(IntervalRule) }
@@ -114,11 +114,11 @@ module TaskLoop
114
114
  end
115
115
  end
116
116
 
117
- if hasDate? && hasHM?
117
+ if has_date? && has_hm?
118
118
  # it's ok
119
119
  end
120
120
 
121
- if hasDate? && hasTime?
121
+ if has_date? && has_time?
122
122
  # it's ok
123
123
  end
124
124
 
@@ -129,6 +129,7 @@ module TaskLoop
129
129
  last_exec_time = last_time
130
130
 
131
131
  result = true
132
+ result &&= check_boundary_rule?(last_exec_time)
132
133
  result &&= check_interval_rule?(last_exec_time)
133
134
  result &&= check_scope_rule?(last_exec_time)
134
135
  result &&= check_specific_fule?(last_exec_time)
@@ -176,6 +177,9 @@ module TaskLoop
176
177
  if minute.is_a?(ScopeRule)
177
178
  result &&= minute.is_conform_rule?(last_exec_time)
178
179
  end
180
+ if week.is_a?(ScopeRule)
181
+ result &&= week.is_conform_rule?(last_exec_time)
182
+ end
179
183
  return result
180
184
  end
181
185
 
@@ -196,6 +200,9 @@ module TaskLoop
196
200
  if minute.is_a?(SpecificRule)
197
201
  result &&= minute.is_conform_rule?(last_exec_time)
198
202
  end
203
+ if week.is_a?(SpecificRule)
204
+ result &&= week.is_conform_rule?(last_exec_time)
205
+ end
199
206
  if time.is_a?(TimeListRule)
200
207
  result &&= time.is_conform_rule?(last_exec_time)
201
208
  end
@@ -215,6 +222,12 @@ module TaskLoop
215
222
  return result
216
223
  end
217
224
 
225
+ private def check_boundary_rule?(last_exec_time)
226
+ result = true
227
+ result &&= start_point.is_conform_rule?(last_exec_time)
228
+ result &&= end_point.is_conform_rule?(last_exec_time)
229
+ return result
230
+ end
218
231
 
219
232
  #################################
220
233
  # Sha1 and description
@@ -1,5 +1,14 @@
1
1
  module TaskLoop
2
2
  module TaskProperty
3
+ WEEK = {
4
+ :Sun => 0,
5
+ :Mon => 1,
6
+ :Tue => 2,
7
+ :Wed => 3,
8
+ :Thu => 4,
9
+ :Fri => 5,
10
+ :Sat => 6,
11
+ }
3
12
 
4
13
  MONTH = {
5
14
  :Jan => 1,
@@ -27,17 +36,6 @@ module TaskLoop
27
36
  :mon12 => 12,
28
37
  }
29
38
 
30
- WEEK_BASE = 10000
31
- WEEK = {
32
- :Sun => 10000,
33
- :Mon => 10001,
34
- :Tue => 10002,
35
- :Wed => 10003,
36
- :Thu => 10004,
37
- :Fri => 10005,
38
- :Sat => 10006,
39
- }
40
-
41
39
  DAY = {
42
40
  :day1 => 1,
43
41
  :day2 => 2,
@@ -78,11 +76,35 @@ module TaskLoop
78
76
  attr_accessor :path
79
77
 
80
78
  #################################
81
- # Setters & Getters
79
+ # Week Property
80
+ # specific syntax
81
+ # - at
82
+ # - example: at :Mon, :Tue, :Fri
83
+ # scope syntax
84
+ # - before
85
+ # - example: before :Mon
86
+ # - between
87
+ # - example: between :Mon, :Fri
88
+ # - after
89
+ # 0 example: after :Tue
82
90
  #################################
91
+ def week=(rule)
92
+ unless rule.is_a?(SpecificRule) || rule.is_a?(ScopeRule)
93
+ raise TypeError, "the rule of week must be SpecificRule or ScopeRule or IntervalRule"
94
+ end
95
+ @week = rule
96
+ @week.unit = :week
97
+ end
98
+
99
+ def week
100
+ @week ||= DefaultRule.new(:week)
101
+ end
102
+
103
+ #################################
104
+ # Year Property
83
105
  # specific syntax
84
106
  # - of
85
- # - example: in 2024
107
+ # - example: at 2024, 2025 ...
86
108
  # interval syntax
87
109
  # - interval
88
110
  # - example: interval 1.year
@@ -92,12 +114,12 @@ module TaskLoop
92
114
  # - between
93
115
  # - example: between 2025, 2026
94
116
  # - after
95
- # - examle: after 2023
117
+ # - example: after 2023
118
+ #################################
96
119
  def year=(rule)
97
- unless rule.is_a?(Rule)
98
- raise TypeError, "the rule of year must be a class or subclass of Rule"
120
+ unless rule.is_a?(SpecificRule) || rule.is_a?(ScopeRule) || rule.is_a?(IntervalRule)
121
+ raise TypeError, "the rule of year must be SpecificRule or ScopeRule or IntervalRule"
99
122
  end
100
-
101
123
  @year = rule
102
124
  @year.unit = :year
103
125
  end
@@ -106,10 +128,12 @@ module TaskLoop
106
128
  @year ||= DefaultRule.new(:year)
107
129
  end
108
130
 
131
+ #################################
132
+ # Month Property
109
133
  # specific syntax
110
- # - of
111
- # - example: of :Jan, :Feb, :Mar, :Apr, :Jun, :Jul, :Aug, :Sep, :Oct, :Nov, :Dec;
112
- # - example: of :month1, :month2, :month3, ....
134
+ # - at
135
+ # - example: at :Jan, :Feb, :Mar, :Apr, :Jun, :Jul, :Aug, :Sep, :Oct, :Nov, :Dec;
136
+ # - example: at :month1, :month2, :month3 ...
113
137
  # interval syntax
114
138
  # - every
115
139
  # - example: interval 1.month
@@ -120,9 +144,10 @@ module TaskLoop
120
144
  # - example: between 2025, 2026
121
145
  # - after
122
146
  # - examle: after 2023
147
+ #################################
123
148
  def month=(rule)
124
- unless rule.is_a?(Rule)
125
- raise TypeError, "the rule of month must be a class or subclass of Rule"
149
+ unless rule.is_a?(SpecificRule) || rule.is_a?(ScopeRule) || rule.is_a?(IntervalRule)
150
+ raise TypeError, "the rule of month must be SpecificRule or ScopeRule or IntervalRule"
126
151
  end
127
152
  @month = rule
128
153
  @month.unit = :month
@@ -132,10 +157,11 @@ module TaskLoop
132
157
  @month||= DefaultRule.new(:month)
133
158
  end
134
159
 
160
+ #################################
161
+ # Day Property
135
162
  # specific syntax
136
- # - on
137
- # - example: on :Mon, :Tue, :Wed, :Thu, :Fri, :Sat, :Sun;
138
- # - example: on :day1, :day2, :day3;
163
+ # - at
164
+ # - example: at :day1, :day2, :day3 ...
139
165
  # interval syntax
140
166
  # - interval
141
167
  # - example: interval 10.day
@@ -147,9 +173,10 @@ module TaskLoop
147
173
  # - example: between :Mon, :Fri
148
174
  # - after
149
175
  # - example: after :day10
176
+ #################################
150
177
  def day=(rule)
151
- unless rule.is_a?(Rule)
152
- raise TypeError, "the rule of day must be a class or subclass of Rule"
178
+ unless rule.is_a?(SpecificRule) || rule.is_a?(ScopeRule) || rule.is_a?(IntervalRule)
179
+ raise TypeError, "the rule of day must be SpecificRule or ScopeRule or IntervalRule"
153
180
  end
154
181
  @day = rule
155
182
  @day.unit = :day
@@ -159,9 +186,11 @@ module TaskLoop
159
186
  @day ||= DefaultRule.new(:day)
160
187
  end
161
188
 
189
+ #################################
190
+ # Hour Property
162
191
  # specific syntax
163
192
  # - at
164
- # - example: at 10; at 23
193
+ # - example: at 10, 11, 13 ...
165
194
  # interval syntax
166
195
  # - interval
167
196
  # - example: interval 10.hour
@@ -172,9 +201,10 @@ module TaskLoop
172
201
  # - example: between 10, 12
173
202
  # - after
174
203
  # - example: after 11
204
+ #################################
175
205
  def hour=(rule)
176
- unless rule.is_a?(Rule)
177
- raise TypeError, "the rule of hour must be a class or subclass of Rule"
206
+ unless rule.is_a?(SpecificRule) || rule.is_a?(ScopeRule) || rule.is_a?(IntervalRule)
207
+ raise TypeError, "the rule of hour must be SpecificRule or ScopeRule or IntervalRule"
178
208
  end
179
209
  @hour = rule
180
210
  @hour.unit = :hour
@@ -184,19 +214,17 @@ module TaskLoop
184
214
  @hour ||= DefaultRule.new(:hour)
185
215
  end
186
216
 
217
+ #################################
218
+ # Minute Property
187
219
  # specific syntax
188
220
  # - at
189
- # - example: at 59; at 45
221
+ # - example: at 59, 23 ...
190
222
  # interval syntax
191
223
  # - interval
192
224
  # - example: interval 5.minute
193
225
  def minute=(rule)
194
- unless rule.is_a?(Rule)
195
- raise TypeError, "the rule of minute must be a class or subclass of Rule"
196
- end
197
-
198
- if rule.is_a?(ScopeRule)
199
- raise TypeError, "the rule of minute cannot be a class or subclass of ScopeRule"
226
+ unless rule.is_a?(SpecificRule) || rule.is_a?(IntervalRule)
227
+ raise TypeError, "the rule of minute must be SpecificRule or IntervalRule"
200
228
  end
201
229
  @minute = rule
202
230
  @minute.unit = :minute
@@ -206,12 +234,15 @@ module TaskLoop
206
234
  @minute ||= DefaultRule.new(:minute)
207
235
  end
208
236
 
237
+ #################################
238
+ # Loop Property
209
239
  # loop syntax
210
240
  # - loop
211
241
  # - example: loop 5.times
242
+ #################################
212
243
  def loop=(rule)
213
- unless rule.is_a?(Rule)
214
- raise TypeError, "the rule of loop must be a class or subclass of Rule"
244
+ unless rule.is_a?(LoopRule)
245
+ raise TypeError, "the rule of loop must be LoopRule"
215
246
  end
216
247
 
217
248
  @loop = rule
@@ -221,12 +252,15 @@ module TaskLoop
221
252
  @loop ||= DefaultRule.new(:loop)
222
253
  end
223
254
 
255
+ #################################
256
+ # Time Property
224
257
  # time list syntax
225
258
  # - time
226
259
  # - example: time "10:10:30", "9:10:20", "20:10:20"
260
+ #################################
227
261
  def time=(rule)
228
262
  unless rule.is_a?(TimeListRule)
229
- raise TypeError, "the rule of time must be a TimeList Rule"
263
+ raise TypeError, "the rule of time must be TimeListRule"
230
264
  end
231
265
 
232
266
  @time = rule
@@ -236,12 +270,15 @@ module TaskLoop
236
270
  @time ||= DefaultRule.new(:time)
237
271
  end
238
272
 
273
+ #################################
274
+ # Date Property
239
275
  # date list syntax
240
276
  # - date
241
277
  # - example: date "2023-10-10", "2013-10-11", "2023-11-10"
278
+ #################################
242
279
  def date=(rule)
243
280
  unless rule.is_a?(DateListRule)
244
- raise TypeError, "the rule of time must be a DateList Rule"
281
+ raise TypeError, "the rule of time must be DateListRule"
245
282
  end
246
283
 
247
284
  @date = rule
@@ -251,22 +288,61 @@ module TaskLoop
251
288
  @date ||= DefaultRule.new(:date)
252
289
  end
253
290
 
291
+ #################################
292
+ # StartPoint Property
293
+ # boundary syntax
294
+ # - start_point
295
+ # - example: from "2023-10-11 10:00:00"
296
+ #################################
297
+ def start_point=(rule)
298
+ unless rule.is_a?(StartPointBoundaryRule)
299
+ raise TypeError, "the rule of start_point must be StartPointBoundaryRule"
300
+ end
301
+ @start_point = rule
302
+ @start_point.unit = :full
303
+ end
304
+
305
+ def start_point
306
+ @start_point ||= DefaultRule.new(:full)
307
+ end
308
+
309
+ #################################
310
+ # EndPoint Property
311
+ # boundary syntax
312
+ # - end_point
313
+ # - example: to "2023-10-11 10:00:00"
314
+ #################################
315
+ def end_point=(rule)
316
+ unless rule.is_a?(EndPointBoundaryRule)
317
+ raise TypeError, "the rule of end_point must be EndPointBoundaryRule"
318
+ end
319
+ @end_point = rule
320
+ @end_point.unit = :full
321
+ end
322
+
323
+ def end_point
324
+ @end_point ||= DefaultRule.new(:full)
325
+ end
326
+
254
327
  #################################
255
328
  # Help Methods
256
329
  #################################
257
- def hasDate?
330
+ def has_week?
331
+ !week.is_a?(DefaultRule)
332
+ end
333
+ def has_date?
258
334
  !date.is_a?(DefaultRule)
259
335
  end
260
336
 
261
- def hasTime?
337
+ def has_time?
262
338
  !time.is_a?(DefaultRule)
263
339
  end
264
340
 
265
- def hasYMD?
341
+ def has_ymd?
266
342
  [year, month, day].any? { |rule| !rule.is_a?(DefaultRule) }
267
343
  end
268
344
 
269
- def hasHM?
345
+ def has_hm?
270
346
  [hour, minute].any? { |rule| !rule.is_a?(DefaultRule) }
271
347
  end
272
348
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TaskLoop
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
5
  end
data/sig/integer.rbs ADDED
@@ -0,0 +1,11 @@
1
+ class Integer
2
+ def day: () -> Integer
3
+
4
+ def hour: () -> Integer
5
+
6
+ def minute: () -> Integer
7
+
8
+ def month: () -> Integer
9
+
10
+ def year: () -> Integer
11
+ end
data/sig/string.rbs ADDED
@@ -0,0 +1,7 @@
1
+ class String
2
+ def sha1: () -> String
3
+
4
+ def sha1_32bit: () -> String
5
+
6
+ def sha1_8bit: () -> String
7
+ end
@@ -0,0 +1,11 @@
1
+ module TaskLoop
2
+ class AfterScopeRule
3
+ attr_accessor left: [Symbol | Integer]
4
+
5
+ def desc: () -> String
6
+
7
+ def is_conform_rule?: (Time) -> bool
8
+
9
+ def left_value: () -> Integer
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module TaskLoop
2
+ class BeforeScopeRule
3
+ attr_accessor right: [Symbol | Integer]
4
+
5
+ def desc: () -> String
6
+
7
+ def is_conform_rule?: (Time) -> bool
8
+
9
+ def right_value: () -> Integer
10
+ end
11
+ end
@@ -0,0 +1,14 @@
1
+ module TaskLoop
2
+ class BetweenScopeRule
3
+ attr_accessor left: [Symbol | Integer]
4
+ attr_accessor right: [Symbol | Integer]
5
+
6
+ def desc: () -> String
7
+
8
+ def is_conform_rule?: (Time) -> bool
9
+
10
+ def left_value: () -> Integer
11
+
12
+ def right_value: () -> Integer
13
+ end
14
+ end
@@ -0,0 +1,9 @@
1
+ module TaskLoop
2
+ class BoundaryRule
3
+ BOUNDARY: Hash[Symbol, Integer]
4
+
5
+ attr_accessor boundary: Symbol
6
+
7
+ def desc: () -> String
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ module TaskLoop
2
+ class DateListRule
3
+ attr_writer dates: Array[String]
4
+
5
+ def dates_values: () -> Array[Time]
6
+
7
+ def desc: () -> String
8
+
9
+ def is_conform_rule?: (Time) -> bool
10
+ end
11
+ end
@@ -0,0 +1,8 @@
1
+ module TaskLoop
2
+ class DefaultRule
3
+
4
+ def desc: () -> String
5
+
6
+ def is_conform_rule?: (Time) -> bool
7
+ end
8
+ end
@@ -0,0 +1,18 @@
1
+ module TaskLoop
2
+ class Deploy
3
+ def run: () -> void
4
+ def register_taskfile_dir_if_needed: () -> void
5
+
6
+ def tasklist: () -> Array[Task]
7
+
8
+ private
9
+
10
+ def clean_loopfile_if_needed: () -> void
11
+
12
+ def deploy_lint?: () -> bool
13
+
14
+ def eval_taskfile: (String) -> void
15
+
16
+ def generate_taskfile_deploy: () -> void
17
+ end
18
+ end
@@ -0,0 +1,25 @@
1
+ module TaskLoop
2
+ module DSL
3
+ def after: ([Symbol | Integer]) -> AfterScopeRule
4
+
5
+ def at: (*[Symbol | Integer]) -> SpecificRule
6
+
7
+ def before: ([Symbol | Integer]) -> BeforeScopeRule
8
+
9
+ def between: ([Symbol | Integer], [Symbol | Integer]) -> BetweenScopeRule
10
+
11
+ def date: (*String) -> DateListRule
12
+
13
+ def env: (String, String) -> void
14
+
15
+ def from: (String) -> StartPointBoundaryRule
16
+
17
+ def interval: (Integer) -> IntervalRule
18
+
19
+ def loop: (Integer) -> LoopRule
20
+
21
+ def time: (*String) -> TimeListRule
22
+
23
+ def to: (String) -> EndPointBoundaryRule
24
+ end
25
+ end
@@ -0,0 +1,9 @@
1
+ module TaskLoop
2
+ class EndPointBoundaryRule
3
+ attr_accessor value: String
4
+
5
+ def desc: () -> String
6
+
7
+ def is_conform_rule?: (Time) -> bool
8
+ end
9
+ end