checkoff 0.106.0 → 0.108.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/checkoff/internal/selector_classes/task.rb +3 -20
- data/lib/checkoff/portfolios.rb +2 -2
- data/lib/checkoff/tasks.rb +7 -1
- data/lib/checkoff/timing.rb +59 -8
- data/lib/checkoff/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a6f58b9f4020d786886f43c7c3422b55b99143796be35fcccf7d46cc6d3369d8
|
4
|
+
data.tar.gz: 39b470be2c13d3e32d545f9914d935ee1fb8a8f2705e5cdb799a2ae2bab8bf71
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df03add2cd762e7e4ce70ec769d316d96b718f59eb418c340557822894f202d28b92796ae0d02e42b5e9e8d1f1ca607c294a4ce64ac92e71e1a6a556d4eeba72
|
7
|
+
data.tar.gz: 89ad98040c6ea65313d51206394f5af2ddcd2671a0b9ea403ecbf3466df564dbe7e09f64932838d7f8d06302d9abf9c29dd8f8dbaad28cf2342795269e5ec2f5
|
data/Gemfile.lock
CHANGED
@@ -94,7 +94,7 @@ module Checkoff
|
|
94
94
|
def evaluate(task, period = :now_or_before, ignore_dependencies = false)
|
95
95
|
@tasks.task_ready?(task, period: period, ignore_dependencies: ignore_dependencies)
|
96
96
|
end
|
97
|
-
# rubocop:
|
97
|
+
# rubocop:enable Style/OptionalBooleanParameter
|
98
98
|
end
|
99
99
|
|
100
100
|
# :unassigned function
|
@@ -171,16 +171,7 @@ module Checkoff
|
|
171
171
|
#
|
172
172
|
# @return [Boolean]
|
173
173
|
def evaluate(task, field_name, num_days)
|
174
|
-
|
175
|
-
|
176
|
-
date = task_timing.date_or_time_field_by_name(task, field_name)&.to_date
|
177
|
-
|
178
|
-
return false if date.nil?
|
179
|
-
|
180
|
-
# @sg-ignore
|
181
|
-
n_days_ago = Date.today - num_days
|
182
|
-
# @sg-ignore
|
183
|
-
date < n_days_ago
|
174
|
+
@tasks.in_period?(task, field_name, [:less_than_n_days_ago, num_days])
|
184
175
|
end
|
185
176
|
end
|
186
177
|
|
@@ -202,15 +193,7 @@ module Checkoff
|
|
202
193
|
#
|
203
194
|
# @return [Boolean]
|
204
195
|
def evaluate(task, field_name, num_days)
|
205
|
-
|
206
|
-
date = task_timing.date_or_time_field_by_name(task, field_name)&.to_date
|
207
|
-
|
208
|
-
return false if date.nil?
|
209
|
-
|
210
|
-
# @sg-ignore
|
211
|
-
n_days_from_today = Date.today + num_days
|
212
|
-
# @sg-ignore
|
213
|
-
date >= n_days_from_today
|
196
|
+
@tasks.in_period?(task, field_name, [:greater_than_or_equal_to_n_days_from_today, num_days])
|
214
197
|
end
|
215
198
|
end
|
216
199
|
|
data/lib/checkoff/portfolios.rb
CHANGED
@@ -28,9 +28,9 @@ module Checkoff
|
|
28
28
|
# @param clients [Checkoff::Clients]
|
29
29
|
# @param client [Asana::Client]
|
30
30
|
def initialize(config: Checkoff::Internal::ConfigLoader.load(:asana),
|
31
|
-
workspaces: Checkoff::Workspaces.new(config: config),
|
32
31
|
clients: Checkoff::Clients.new(config: config),
|
33
|
-
client: clients.client
|
32
|
+
client: clients.client,
|
33
|
+
workspaces: Checkoff::Workspaces.new(config: config, client: client))
|
34
34
|
@workspaces = workspaces
|
35
35
|
@client = client
|
36
36
|
end
|
data/lib/checkoff/tasks.rb
CHANGED
@@ -67,9 +67,15 @@ module Checkoff
|
|
67
67
|
# @param period [Symbol<:now_or_before,:this_week>]
|
68
68
|
# @param ignore_dependencies [Boolean]
|
69
69
|
def task_ready?(task, period: :now_or_before, ignore_dependencies: false)
|
70
|
-
field_name = :ready
|
71
70
|
return false if !ignore_dependencies && incomplete_dependencies?(task)
|
72
71
|
|
72
|
+
in_period?(task, :ready, period)
|
73
|
+
end
|
74
|
+
|
75
|
+
# @param task [Asana::Resources::Task]
|
76
|
+
# @param field_name [Symbol]
|
77
|
+
# @param period [Symbol<:now_or_before,:this_week>,Array] See Checkoff::Timing#in_period?_
|
78
|
+
def in_period?(task, field_name, period)
|
73
79
|
# @type [Date,Time,nil]
|
74
80
|
task_date_or_time = task_timing.date_or_time_field_by_name(task, field_name)
|
75
81
|
|
data/lib/checkoff/timing.rb
CHANGED
@@ -31,14 +31,9 @@ module Checkoff
|
|
31
31
|
end
|
32
32
|
|
33
33
|
# @param date_or_time [Date,Time,nil]
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
date_or_time.to_time < @now_getter.now
|
38
|
-
end
|
39
|
-
|
40
|
-
# @param date_or_time [Date,Time,nil]
|
41
|
-
# @param period [Symbol<:indefinite>]
|
34
|
+
# @param period [Symbol,Array<(Symbol,Integer)>]
|
35
|
+
#
|
36
|
+
# Valid values: :this_week, :now_or_before, :indefinite, [:less_than_n_days_ago, Integer]
|
42
37
|
def in_period?(date_or_time, period)
|
43
38
|
return this_week?(date_or_time) if period == :this_week
|
44
39
|
|
@@ -46,11 +41,46 @@ module Checkoff
|
|
46
41
|
|
47
42
|
return now_or_before?(date_or_time) if period == :now_or_before
|
48
43
|
|
44
|
+
if period.is_a?(Array)
|
45
|
+
# @sg-ignore
|
46
|
+
# @type [Symbol]
|
47
|
+
period_name = period.first
|
48
|
+
args = period[1..]
|
49
|
+
|
50
|
+
return compound_in_period?(date_or_time, period_name, *args)
|
51
|
+
end
|
52
|
+
|
49
53
|
raise "Teach me how to handle period #{period.inspect}"
|
50
54
|
end
|
51
55
|
|
52
56
|
private
|
53
57
|
|
58
|
+
# @param date_or_time [Date,Time,nil]
|
59
|
+
# @param num_days [Integer]
|
60
|
+
def greater_than_or_equal_to_n_days_from_today?(date_or_time, num_days)
|
61
|
+
return false if date_or_time.nil?
|
62
|
+
|
63
|
+
date = date_or_time.to_date
|
64
|
+
|
65
|
+
# @sg-ignore
|
66
|
+
n_days_from_today = @today_getter.today + num_days
|
67
|
+
# @sg-ignore
|
68
|
+
date >= n_days_from_today
|
69
|
+
end
|
70
|
+
|
71
|
+
# @param date_or_time [Date,Time,nil]
|
72
|
+
# @param num_days [Integer]
|
73
|
+
def less_than_n_days_ago?(date_or_time, num_days)
|
74
|
+
return false if date_or_time.nil?
|
75
|
+
|
76
|
+
date = date_or_time.to_date
|
77
|
+
|
78
|
+
# @sg-ignore
|
79
|
+
n_days_ago = @today_getter.today - num_days
|
80
|
+
# @sg-ignore
|
81
|
+
date < n_days_ago
|
82
|
+
end
|
83
|
+
|
54
84
|
# @param date_or_time [Date,Time,nil]
|
55
85
|
def this_week?(date_or_time)
|
56
86
|
return true if date_or_time.nil?
|
@@ -68,6 +98,27 @@ module Checkoff
|
|
68
98
|
date >= beginning_of_week && date <= end_of_week
|
69
99
|
end
|
70
100
|
|
101
|
+
# @param date_or_time [Date,Time,nil]
|
102
|
+
def now_or_before?(date_or_time)
|
103
|
+
return true if date_or_time.nil?
|
104
|
+
|
105
|
+
date_or_time.to_time < @now_getter.now
|
106
|
+
end
|
107
|
+
|
108
|
+
# @param date_or_time [Date,Time,nil]
|
109
|
+
# @param period_name [Symbol]
|
110
|
+
# @param args [Object]
|
111
|
+
def compound_in_period?(date_or_time, period_name, *args)
|
112
|
+
# @sg-ignore
|
113
|
+
return less_than_n_days_ago?(date_or_time, *args) if period_name == :less_than_n_days_ago
|
114
|
+
|
115
|
+
if period_name == :greater_than_or_equal_to_n_days_from_today
|
116
|
+
return greater_than_or_equal_to_n_days_from_today?(date_or_time,
|
117
|
+
*args)
|
118
|
+
end
|
119
|
+
raise "Teach me how to handle period [#{period_name.inspect}, #{args.join(', ')}]"
|
120
|
+
end
|
121
|
+
|
71
122
|
# bundle exec ./time.rb
|
72
123
|
# :nocov:
|
73
124
|
class << self
|
data/lib/checkoff/version.rb
CHANGED