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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1ea1c2f4c9b1727b1f1ea960da4305dbcc170570726b7d072d672173e765a617
4
- data.tar.gz: f6e47950aad4370f48548afda8f97ec4688c0c8b1f588cabad415ae8d92bcd43
3
+ metadata.gz: f83187f80678558975069a3181a34814c3859b81a9a19f0d29606e9ba37e62c4
4
+ data.tar.gz: 8e53186cd5ac43fa6b2fb6f9f4f13a4da3259ab75d8792a43459657e8dcaf8bc
5
5
  SHA512:
6
- metadata.gz: c045f4a4fba06f9844082e269b902d738dbdadba318480a833e9e930b8092ae7b1178dbca94b8e10c8b39fbb9c3dbab4e8cf5d635bc324958db5d98f700f605e
7
- data.tar.gz: 196b0fadb3f8c36ac722af7e2ce89bc498e0a6107da920b6370b2f1b19dd2a9e5556b3e34a0e238e79fb1bad404031753cf3e75ecfb14e4f1c9c92821e6b7f22
6
+ metadata.gz: 4e4415a477513de35f11579dd45544071ca1b223a5b7a646c2bba0adb2b3becddf7409d4bd69cf0c14d2f0e8fcf55b10014f7d1b90f33d0b667b442aa25dba63
7
+ data.tar.gz: 823f046f8f55e05be6d3368cd878abbb02e9632c9bdc7bf5ca5e46160155bee5845ff742550579c55cd1c5013de7e632c828e84c3861ada4998feca0ef29c34a
data/Gemfile.lock CHANGED
@@ -12,7 +12,7 @@ GIT
12
12
  PATH
13
13
  remote: .
14
14
  specs:
15
- checkoff (0.159.0)
15
+ checkoff (0.161.0)
16
16
  activesupport
17
17
  asana (> 0.10.0)
18
18
  cache_method
data/config/env.1p CHANGED
@@ -0,0 +1,2 @@
1
+ ASANA__PERSONAL_ACCESS_TOKEN="op://Private/Asana access token - Plate Spinner read-write/token"
2
+ LOG_LEVEL=debug
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'checkoff/custom_fields'
4
+
3
5
  module Checkoff
4
6
  module Internal
5
7
  # Utility methods for working with project dates and times
@@ -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
@@ -5,6 +5,7 @@ require_relative 'internal/project_hashes'
5
5
  require_relative 'internal/project_timing'
6
6
  require_relative 'workspaces'
7
7
  require_relative 'clients'
8
+ require_relative 'timing'
8
9
  require 'cache_method'
9
10
  require 'asana'
10
11
 
@@ -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
@@ -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]
@@ -3,5 +3,5 @@
3
3
  # Command-line and gem client for Asana (unofficial)
4
4
  module Checkoff
5
5
  # Version of library
6
- VERSION = '0.159.0'
6
+ VERSION = '0.161.0'
7
7
  end
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.159.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-16 00:00:00.000000000 Z
11
+ date: 2023-12-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport