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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1ea1c2f4c9b1727b1f1ea960da4305dbcc170570726b7d072d672173e765a617
4
- data.tar.gz: f6e47950aad4370f48548afda8f97ec4688c0c8b1f588cabad415ae8d92bcd43
3
+ metadata.gz: 897cdf980ba4cd99cba3d924f954f36673ce78edb5529a2446425a101d53352c
4
+ data.tar.gz: a6b247ac6f97a1c44c4f619c9ec761849c6a5ee6cbce52e03307444df082b97d
5
5
  SHA512:
6
- metadata.gz: c045f4a4fba06f9844082e269b902d738dbdadba318480a833e9e930b8092ae7b1178dbca94b8e10c8b39fbb9c3dbab4e8cf5d635bc324958db5d98f700f605e
7
- data.tar.gz: 196b0fadb3f8c36ac722af7e2ce89bc498e0a6107da920b6370b2f1b19dd2a9e5556b3e34a0e238e79fb1bad404031753cf3e75ecfb14e4f1c9c92821e6b7f22
6
+ metadata.gz: 6674f07d919b4a584cfc349ce817dee9f967a9f0efedbad47e68dd1209621b69297a3e64f4d9e72435c389cf504f9d293e5fd4f9764d4894190bdce87d1a978d
7
+ data.tar.gz: 5403e26340b63f9e6def9bcd7fa783b2cb00b0f12df8baab29ed84ce80cefd06db57df3df8a43f13ad00d45dd013e1ccf6e41200e4917ee23c3b4d27f07ba579
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.160.0)
16
16
  activesupport
17
17
  asana (> 0.10.0)
18
18
  cache_method
@@ -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
@@ -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.160.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.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-16 00:00:00.000000000 Z
11
+ date: 2023-12-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport