checkoff 0.159.0 → 0.161.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/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
|