checkoff 0.159.0 → 0.160.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 +44 -0
- data/lib/checkoff/tasks.rb +3 -2
- data/lib/checkoff/timelines.rb +30 -0
- data/lib/checkoff/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 897cdf980ba4cd99cba3d924f954f36673ce78edb5529a2446425a101d53352c
|
4
|
+
data.tar.gz: a6b247ac6f97a1c44c4f619c9ec761849c6a5ee6cbce52e03307444df082b97d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6674f07d919b4a584cfc349ce817dee9f967a9f0efedbad47e68dd1209621b69297a3e64f4d9e72435c389cf504f9d293e5fd4f9764d4894190bdce87d1a978d
|
7
|
+
data.tar.gz: 5403e26340b63f9e6def9bcd7fa783b2cb00b0f12df8baab29ed84ce80cefd06db57df3df8a43f13ad00d45dd013e1ccf6e41200e4917ee23c3b4d27f07ba579
|
data/Gemfile.lock
CHANGED
@@ -301,6 +301,50 @@ module Checkoff
|
|
301
301
|
limit_to_portfolio_name: limit_to_portfolio_name)
|
302
302
|
end
|
303
303
|
end
|
304
|
+
|
305
|
+
# :milestone_does_not_depend_on_this_task? function
|
306
|
+
class MilestonePFunctionEvaluator < FunctionEvaluator
|
307
|
+
FUNCTION_NAME = :milestone?
|
308
|
+
|
309
|
+
def matches?
|
310
|
+
fn?(selector, FUNCTION_NAME)
|
311
|
+
end
|
312
|
+
|
313
|
+
def evaluate_arg?(_index)
|
314
|
+
false
|
315
|
+
end
|
316
|
+
|
317
|
+
# @param task [Asana::Resources::Task]
|
318
|
+
#
|
319
|
+
# @return [Boolean]
|
320
|
+
def evaluate(task)
|
321
|
+
raise 'Please add resource_subtype to extra_fields' if task.resource_subtype.nil?
|
322
|
+
|
323
|
+
task.resource_subtype == 'milestone'
|
324
|
+
end
|
325
|
+
end
|
326
|
+
|
327
|
+
# :milestone_does_not_depend_on_this_task? function
|
328
|
+
class NoMilestoneDependsOnThisTaskPFunctionEvaluator < FunctionEvaluator
|
329
|
+
FUNCTION_NAME = :no_milestone_depends_on_this_task?
|
330
|
+
|
331
|
+
def matches?
|
332
|
+
fn?(selector, FUNCTION_NAME)
|
333
|
+
end
|
334
|
+
|
335
|
+
def evaluate_arg?(_index)
|
336
|
+
false
|
337
|
+
end
|
338
|
+
|
339
|
+
# @param task [Asana::Resources::Task]
|
340
|
+
# @param limit_to_portfolio_name [String, nil]
|
341
|
+
#
|
342
|
+
# @return [Boolean]
|
343
|
+
def evaluate(task, limit_to_portfolio_name = nil)
|
344
|
+
!@timelines.any_milestone_depends_on_this_task?(task,
|
345
|
+
limit_to_portfolio_name: limit_to_portfolio_name)
|
346
|
+
end
|
347
|
+
end
|
304
348
|
end
|
305
349
|
end
|
306
350
|
end
|
data/lib/checkoff/tasks.rb
CHANGED
@@ -198,9 +198,10 @@ module Checkoff
|
|
198
198
|
end
|
199
199
|
|
200
200
|
# @param task [Asana::Resources::Task]
|
201
|
+
# @param extra_task_fields [Array<String>]
|
201
202
|
#
|
202
203
|
# @return [Array<Hash>]
|
203
|
-
def all_dependent_tasks(task)
|
204
|
+
def all_dependent_tasks(task, extra_task_fields: [])
|
204
205
|
dependent_tasks = []
|
205
206
|
# See note above - same applies as does in @dependencies
|
206
207
|
#
|
@@ -216,7 +217,7 @@ module Checkoff
|
|
216
217
|
|
217
218
|
dependent_task = task_by_gid(dependent_task_hash.fetch('gid'),
|
218
219
|
only_uncompleted: true,
|
219
|
-
extra_fields: ['dependents'])
|
220
|
+
extra_fields: ['dependents'] + extra_task_fields)
|
220
221
|
debug { "#{task.name} has dependent task #{dependent_task.name}" }
|
221
222
|
unless dependent_task.nil?
|
222
223
|
dependent_tasks << dependent_task
|
data/lib/checkoff/timelines.rb
CHANGED
@@ -92,6 +92,36 @@ module Checkoff
|
|
92
92
|
end
|
93
93
|
end
|
94
94
|
|
95
|
+
# @param task [Asana::Resources::Task]
|
96
|
+
# @param limit_to_portfolio_name [String, nil]
|
97
|
+
def any_milestone_depends_on_this_task?(task, limit_to_portfolio_name: nil)
|
98
|
+
unless limit_to_portfolio_name.nil?
|
99
|
+
limit_to_projects = @portfolios.projects_in_portfolio(@workspaces.default_workspace.name,
|
100
|
+
limit_to_portfolio_name)
|
101
|
+
end
|
102
|
+
|
103
|
+
all_dependent_milestones = nil
|
104
|
+
task.memberships.all? do |membership_data|
|
105
|
+
unless limit_to_portfolio_name.nil?
|
106
|
+
project_gid = membership_data.fetch('project').fetch('gid')
|
107
|
+
next true unless limit_to_projects.map(&:gid).include? project_gid
|
108
|
+
end
|
109
|
+
|
110
|
+
all_dependent_milestones ||=
|
111
|
+
@tasks.all_dependent_tasks(task,
|
112
|
+
extra_task_fields: ['resource_subtype',
|
113
|
+
'memberships.project.gid']).select do |dependent_task|
|
114
|
+
dependent_task.resource_subtype == 'milestone'
|
115
|
+
end
|
116
|
+
|
117
|
+
all_dependent_milestones.any? do |milestone|
|
118
|
+
milestone.memberships.any? do |milestone_membership_data|
|
119
|
+
milestone_membership_data.fetch('project').fetch('gid') == project_gid
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
95
125
|
# @param section_gid [String]
|
96
126
|
#
|
97
127
|
# @return [Asana::Resources::Task,nil]
|
data/lib/checkoff/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: checkoff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.160.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vince Broz
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-12-
|
11
|
+
date: 2023-12-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|