checkoff 0.106.0 → 0.108.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.
- 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