checkoff 0.116.0 → 0.118.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/section.rb +17 -0
- data/lib/checkoff/internal/selector_classes/task.rb +16 -0
- data/lib/checkoff/tasks.rb +12 -0
- data/lib/checkoff/timelines.rb +19 -0
- 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: 963a3b8220497cddec9b0267e32b875105ac3694d74133e074dbbf8064c61b42
|
4
|
+
data.tar.gz: c0ff06c0ec7e800f26bfabd93d47bcf820644df6c33ffc3b3061c490e625188f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3321268a181406c1d2323946022818166a8a26867f31ea52bc235bf8070445a566868f0f78ba4aeee4dba805cda726c6fde7cdf26835a16c147b4e13f7b77f64
|
7
|
+
data.tar.gz: 02ee7fb7ec62e1bef53cf39490d57a119d643efbdd4d6bd3f15d20461cc68e5831a91ed2fdbcb80d9b34f7d54f9dc77f1f413cd3a9881f9965ccada8a8c8b7f3
|
data/Gemfile.lock
CHANGED
@@ -26,6 +26,23 @@ module Checkoff
|
|
26
26
|
tasks.last&.resource_subtype == 'milestone'
|
27
27
|
end
|
28
28
|
end
|
29
|
+
|
30
|
+
# :has_tasks? function
|
31
|
+
class HasTasksPFunctionEvaluator < FunctionEvaluator
|
32
|
+
FUNCTION_NAME = :has_tasks?
|
33
|
+
|
34
|
+
def matches?
|
35
|
+
fn?(selector, FUNCTION_NAME)
|
36
|
+
end
|
37
|
+
|
38
|
+
# @param section [Asana::Resources::Section]
|
39
|
+
#
|
40
|
+
# @sg-ignore
|
41
|
+
# @return [Boolean]
|
42
|
+
def evaluate(section)
|
43
|
+
@sections.tasks_by_section_gid(section.gid).any?
|
44
|
+
end
|
45
|
+
end
|
29
46
|
end
|
30
47
|
end
|
31
48
|
end
|
@@ -256,6 +256,22 @@ module Checkoff
|
|
256
256
|
@tasks.in_portfolio_named?(task, portfolio_name)
|
257
257
|
end
|
258
258
|
end
|
259
|
+
|
260
|
+
# :last_task_milestone_does_not_depend_on_this_task? function
|
261
|
+
class LastTaskMilestoneDoesNotDependOnThisTaskPFunctionEvaluator < FunctionEvaluator
|
262
|
+
FUNCTION_NAME = :last_task_milestone_does_not_depend_on_this_task?
|
263
|
+
|
264
|
+
def matches?
|
265
|
+
fn?(selector, FUNCTION_NAME)
|
266
|
+
end
|
267
|
+
|
268
|
+
# @param task [Asana::Resources::Task]
|
269
|
+
#
|
270
|
+
# @return [Boolean]
|
271
|
+
def evaluate(task)
|
272
|
+
!@timelines.last_task_milestone_depends_on_this_task?(task)
|
273
|
+
end
|
274
|
+
end
|
259
275
|
end
|
260
276
|
end
|
261
277
|
end
|
data/lib/checkoff/tasks.rb
CHANGED
@@ -188,6 +188,18 @@ module Checkoff
|
|
188
188
|
end
|
189
189
|
end
|
190
190
|
|
191
|
+
# @param task [Asana::Resources::Task]
|
192
|
+
#
|
193
|
+
# @return [Array<Asana::Resources::Task>]
|
194
|
+
def all_dependent_tasks(task)
|
195
|
+
dependent_tasks = []
|
196
|
+
task.dependents.each do |dependent_task|
|
197
|
+
dependent_tasks << dependent_task
|
198
|
+
dependent_tasks += all_dependent_tasks(dependent_task)
|
199
|
+
end
|
200
|
+
dependent_tasks
|
201
|
+
end
|
202
|
+
|
191
203
|
# Builds on the standard API representation of an Asana task with some
|
192
204
|
# convenience keys:
|
193
205
|
#
|
data/lib/checkoff/timelines.rb
CHANGED
@@ -58,6 +58,25 @@ module Checkoff
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
+
# @param task [Asana::Resources::Task]
|
62
|
+
def last_task_milestone_depends_on_this_task?(task)
|
63
|
+
all_dependent_task_gids = @tasks.all_dependent_tasks(task).map(&:gid)
|
64
|
+
task.memberships.all? do |membership_data|
|
65
|
+
# @type [Hash{String => String}]
|
66
|
+
section_data = membership_data.fetch('section')
|
67
|
+
# @type [String]
|
68
|
+
section_gid = section_data.fetch('gid')
|
69
|
+
|
70
|
+
last_milestone = last_milestone_in_section(section_gid)
|
71
|
+
|
72
|
+
next false if last_milestone.nil?
|
73
|
+
|
74
|
+
next true if last_milestone.gid == task.gid
|
75
|
+
|
76
|
+
all_dependent_task_gids.include? last_milestone.gid
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
61
80
|
# @param section_gid [String]
|
62
81
|
#
|
63
82
|
# @return [Asana::Resources::Task,nil]
|
data/lib/checkoff/version.rb
CHANGED