checkoff 0.93.0 → 0.94.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: 49531006387df986e746c99973d425917777230710978cad819951ca8d696d7b
4
- data.tar.gz: ef9ea84d3a708b8a47425c77a63f83241f310d2b9b0fd71e01f15ec00d5eb4d7
3
+ metadata.gz: 3728a0da90fb49dedd232b05722fbb87f03789d3bf9bc15513e4fa4b88f9e6fc
4
+ data.tar.gz: 16ce81c8b51905620414ff21f9469ce83c100a61985f355b8a27de20b7234b3c
5
5
  SHA512:
6
- metadata.gz: 7d5e93cea9b3b00bb6d7622e7aa4aa93229820683118f72414ac60dd7b3fafd36fac60e1a79a16fc6091b4ba051ae3cc818b0e2f8c5a354ae57b4b849b562af0
7
- data.tar.gz: e4f24e5b32dfce8459a3c04fc89ba0b831f0d50f61dcc780864f441b1e119f29f774f2b47503ef6653b285b60c58273bb0bca8a80aa7feacea517019ce8139c1
6
+ metadata.gz: d73466d69b7b116eb8c58c0053b7cf13cedf288477e7cc8862de091fdd183e5a84355e19841e09df003da9b44d2b87ac90a459845c9186737069002f5312e455
7
+ data.tar.gz: 207d7d34ecdc3435892afe3b96860df2373e36067f8c75866f7b87d5a6f0aac0ebe89b0889b45d6a31ddec1ac6211f592fce4b657aa70ffad5e5c504deeea773
data/Gemfile.lock CHANGED
@@ -12,7 +12,7 @@ GIT
12
12
  PATH
13
13
  remote: .
14
14
  specs:
15
- checkoff (0.93.0)
15
+ checkoff (0.94.0)
16
16
  activesupport
17
17
  asana (> 0.10.0)
18
18
  cache_method
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Checkoff
4
+ module Internal
5
+ # Utility methods for working with task dates and times
6
+ class TaskTiming
7
+ # @param time_class [Class<Time>]
8
+ def initialize(time_class: Time)
9
+ @time_class = time_class
10
+ end
11
+
12
+ # @param task [Asana::Resources::Task]
13
+ # @return [Time, nil]
14
+ def start_time(task)
15
+ return @time_class.parse(task.start_at) if task.start_at
16
+ return @time_class.parse(task.start_on) if task.start_on
17
+
18
+ nil
19
+ end
20
+
21
+ # @param task [Asana::Resources::Task]
22
+ # @return [Time, nil]
23
+ def due_time(task)
24
+ return @time_class.parse(task.due_at) if task.due_at
25
+ return @time_class.parse(task.due_on) if task.due_on
26
+
27
+ nil
28
+ end
29
+ end
30
+ end
31
+ end
@@ -5,6 +5,7 @@
5
5
  require_relative 'sections'
6
6
  require_relative 'workspaces'
7
7
  require_relative 'internal/config_loader'
8
+ require_relative 'internal/task_timing'
8
9
  require 'asana'
9
10
 
10
11
  module Checkoff
@@ -57,8 +58,8 @@ module Checkoff
57
58
  def task_ready?(task, ignore_dependencies: false)
58
59
  return false if !ignore_dependencies && incomplete_dependencies?(task)
59
60
 
60
- start = start_time(task)
61
- due = due_time(task)
61
+ start = task_timing.start_time(task)
62
+ due = task_timing.due_time(task)
62
63
 
63
64
  return true if start.nil? && due.nil?
64
65
 
@@ -79,12 +80,12 @@ module Checkoff
79
80
  only_uncompleted: true,
80
81
  extra_fields: [])
81
82
  # @sg-ignore
82
- tasks = tasks_from_section(workspace_name,
83
- project_name,
84
- section_name: section_name,
85
- only_uncompleted: only_uncompleted,
86
- extra_fields: extra_fields)
87
- tasks.find { |task| task.name == task_name }
83
+ t = tasks(workspace_name,
84
+ project_name,
85
+ section_name: section_name,
86
+ only_uncompleted: only_uncompleted,
87
+ extra_fields: extra_fields)
88
+ t.find { |task| task.name == task_name }
88
89
  end
89
90
  cache_method :task, SHORT_CACHE_TIME
90
91
 
@@ -146,16 +147,20 @@ module Checkoff
146
147
 
147
148
  private
148
149
 
150
+ # @return [Checkoff::Internal::TaskTiming]
151
+ def task_timing
152
+ @task_timing ||= Checkoff::Internal::TaskTiming.new(time_class: @time_class)
153
+ end
154
+
149
155
  # @param workspace_name [String]
150
156
  # @param project_name [String, Symbol]
151
- # @param section_name [String, nil, :unspecified]
157
+ # @param section_name [String, nil, Symbol<:unspecified>]
152
158
  # @param only_uncompleted [Boolean]
153
159
  # @param extra_fields [Array<String>]
160
+ #
154
161
  # @return [Enumerable<Asana::Resources::Task>]
155
- def tasks_from_section(workspace_name, project_name,
156
- section_name:,
157
- only_uncompleted:,
158
- extra_fields:)
162
+ def tasks(workspace_name, project_name,
163
+ only_uncompleted:, extra_fields:, section_name: :unspecified)
159
164
  if section_name == :unspecified
160
165
  project = projects.project_or_raise(workspace_name, project_name)
161
166
  projects.tasks_from_project(project,
@@ -182,23 +187,5 @@ module Checkoff
182
187
  def default_assignee_gid
183
188
  @config.fetch(:default_assignee_gid)
184
189
  end
185
-
186
- # @param task [Asana::Resources::Task]
187
- # @return [Time, nil]
188
- def start_time(task)
189
- return @time_class.parse(task.start_at) if task.start_at
190
- return @time_class.parse(task.start_on) if task.start_on
191
-
192
- nil
193
- end
194
-
195
- # @param task [Asana::Resources::Task]
196
- # @return [Time, nil]
197
- def due_time(task)
198
- return @time_class.parse(task.due_at) if task.due_at
199
- return @time_class.parse(task.due_on) if task.due_on
200
-
201
- nil
202
- end
203
190
  end
204
191
  end
@@ -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.93.0'
6
+ VERSION = '0.94.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.93.0
4
+ version: 0.94.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-22 00:00:00.000000000 Z
11
+ date: 2023-10-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -153,6 +153,7 @@ files:
153
153
  - lib/checkoff/internal/selector_classes/task/function_evaluator.rb
154
154
  - lib/checkoff/internal/selector_evaluator.rb
155
155
  - lib/checkoff/internal/task_selector_evaluator.rb
156
+ - lib/checkoff/internal/task_timing.rb
156
157
  - lib/checkoff/my_tasks.rb
157
158
  - lib/checkoff/portfolios.rb
158
159
  - lib/checkoff/project_selectors.rb