checkoff 0.100.0 → 0.101.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: c1944705f29ddc4dab95bb2c056b55c3aa6417cab26ca036a5493612663a4614
4
- data.tar.gz: 299262b20e9331ee86755c8fced359e62889e34f1fb714c694535167356c2793
3
+ metadata.gz: 6242a956ad83d3a1818be59711f4ba42040d7051dac2dd0ba2c8a2e5ed29f244
4
+ data.tar.gz: 515a08a90d20a58956256f76248f01d7a5fd52c6ac14e1fbd8215a6eb33dcc6d
5
5
  SHA512:
6
- metadata.gz: f84b26f7790beb97d9f2467b00bead09cd59f60c57e448442892304bbbf7acd6c72c299ee2c890762d9682df76efcf203d5ff3b4442d88d8871b117006a18a83
7
- data.tar.gz: b1478b9ac625f873fa32ab444facf710ac7246b118927fd3347ed0867ca182cb757ec8b12cbb83a29e4d00882647b6df45a93c2758fb2e4c1ebad5983b13b724
6
+ metadata.gz: 8575f32ba5e2130117784cdf0b6e3f9bd40a11c918ffd99208457cd8dde84f7333da5ffc09096f520bccb28f6451da0605f3a3073002de89e8b9d75800371dfa
7
+ data.tar.gz: 037b01300963f231ba1401eb55beb47aff94deb9baab62c3d952876de3d3afc6d5a2c427bb717f5bdc0b8faa8cf3029bdd844de8d955ae3d600ebf9b2ee20835
data/Gemfile.lock CHANGED
@@ -12,7 +12,7 @@ GIT
12
12
  PATH
13
13
  remote: .
14
14
  specs:
15
- checkoff (0.100.0)
15
+ checkoff (0.101.0)
16
16
  activesupport
17
17
  asana (> 0.10.0)
18
18
  cache_method
@@ -63,6 +63,10 @@
63
63
  # # @return [String,nil]
64
64
  # def due_date; end
65
65
  # end
66
+ # class Portfolio
67
+ # # @return [Enumerable<Asana::Resources::Project>]
68
+ # def get_items(options = {}); end
69
+ # end
66
70
  # end
67
71
  # module Resources
68
72
  # class Workspace
@@ -394,6 +394,23 @@ module Checkoff
394
394
  limit_to_portfolio_gid: limit_to_portfolio_gid)
395
395
  end
396
396
  end
397
+
398
+ # :in_portfolio_named? function
399
+ class InPortfolioNamedFunctionEvaluator < FunctionEvaluator
400
+ FUNCTION_NAME = :in_portfolio_named?
401
+
402
+ def matches?
403
+ fn?(selector, FUNCTION_NAME)
404
+ end
405
+
406
+ # @param task [Asana::Resources::Task]
407
+ # @param portfolio_name [String]
408
+ #
409
+ # @return [Boolean]
410
+ def evaluate(task, portfolio_name)
411
+ @tasks.in_portfolio_named?(task, portfolio_name)
412
+ end
413
+ end
397
414
  end
398
415
  end
399
416
  end
@@ -78,6 +78,16 @@ module Checkoff
78
78
  end
79
79
  cache_method :portfolio_by_gid, SHORT_CACHE_TIME
80
80
 
81
+ # @param workspace_name [String]
82
+ # @param portfolio_name [String]
83
+ #
84
+ # @return [Enumerable<Asana::Resources::Project>]
85
+ def projects_in_portfolio(workspace_name, portfolio_name)
86
+ portfolio = portfolio_or_raise(workspace_name, portfolio_name)
87
+ portfolio.get_items
88
+ end
89
+ cache_method :projects_in_portfolio, LONG_CACHE_TIME
90
+
81
91
  private
82
92
 
83
93
  # @return [Checkoff::Workspaces]
@@ -3,6 +3,7 @@
3
3
  # frozen_string_literal: true
4
4
 
5
5
  require_relative 'sections'
6
+ require_relative 'portfolios'
6
7
  require_relative 'workspaces'
7
8
  require_relative 'internal/config_loader'
8
9
  require_relative 'internal/task_timing'
@@ -26,6 +27,7 @@ module Checkoff
26
27
  # @param client [Asana::Client]
27
28
  # @param workspaces [Checkoff::Workspaces]
28
29
  # @param sections [Checkoff::Sections]
30
+ # @param portfolios [Checkoff::Portfolios]
29
31
  # @param time_class [Class<Time>]
30
32
  # @param date_class [Class<Date>]
31
33
  # @param asana_task [Class<Asana::Resources::Task>]
@@ -35,6 +37,8 @@ module Checkoff
35
37
  client: client),
36
38
  sections: Checkoff::Sections.new(config: config,
37
39
  client: client),
40
+ portfolios: Checkoff::Portfolios.new(config: config,
41
+ client: client),
38
42
  time_class: Time,
39
43
  date_class: Date,
40
44
  asana_task: Asana::Resources::Task)
@@ -44,6 +48,7 @@ module Checkoff
44
48
  @date_class = date_class
45
49
  @asana_task = asana_task
46
50
  @client = client
51
+ @portfolios = portfolios
47
52
  @workspaces = workspaces
48
53
  end
49
54
 
@@ -166,6 +171,21 @@ module Checkoff
166
171
  task_hashes.task_to_h(task)
167
172
  end
168
173
 
174
+ # @param task [Asana::Resources::Task]
175
+ # @param portfolio_name [String]
176
+ # @param workspace_name [String]
177
+ def in_portfolio_named?(task,
178
+ portfolio_name,
179
+ workspace_name: @workspaces.default_workspace.name)
180
+ portfolio_projects = @portfolios.projects_in_portfolio(workspace_name, portfolio_name)
181
+ task.memberships.any? do |membership|
182
+ project_gid = membership.fetch('project').fetch('gid')
183
+ portfolio_projects.any? do |portfolio_project|
184
+ portfolio_project.gid == project_gid
185
+ end
186
+ end
187
+ end
188
+
169
189
  private
170
190
 
171
191
  # @return [Checkoff::Internal::TaskTiming]
@@ -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.100.0'
6
+ VERSION = '0.101.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.100.0
4
+ version: 0.101.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-10-27 00:00:00.000000000 Z
11
+ date: 2023-10-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport