checkoff 0.159.0 → 0.161.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/config/env.1p +2 -0
- data/lib/checkoff/internal/project_timing.rb +2 -0
- data/lib/checkoff/internal/selector_classes/task.rb +44 -0
- data/lib/checkoff/projects.rb +1 -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: f83187f80678558975069a3181a34814c3859b81a9a19f0d29606e9ba37e62c4
|
4
|
+
data.tar.gz: 8e53186cd5ac43fa6b2fb6f9f4f13a4da3259ab75d8792a43459657e8dcaf8bc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4e4415a477513de35f11579dd45544071ca1b223a5b7a646c2bba0adb2b3becddf7409d4bd69cf0c14d2f0e8fcf55b10014f7d1b90f33d0b667b442aa25dba63
|
7
|
+
data.tar.gz: 823f046f8f55e05be6d3368cd878abbb02e9632c9bdc7bf5ca5e46160155bee5845ff742550579c55cd1c5013de7e632c828e84c3861ada4998feca0ef29c34a
|
data/Gemfile.lock
CHANGED
data/config/env.1p
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/projects.rb
CHANGED
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.161.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-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|