checkoff 0.27.0 → 0.29.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: bac942429684609678acb06e7426577be0bfd0239b9bf7ca4123e71484125746
4
- data.tar.gz: 5cad1409ce70028e43f52789878b3d2cbcfaceb3bfcd26b230890a27d9d87fbf
3
+ metadata.gz: 20a21200031442f158e3d48a5a51cd9cbe58265c421a0463bbf4642655a35ec2
4
+ data.tar.gz: 04dc7d610ee4366d2f4df09cd7be9f65d369f62bb09e24b7f1193ac5b717291c
5
5
  SHA512:
6
- metadata.gz: b68f2aa40aef9ecfe7fb4fbbe1bfac3b48f99c7cdf4ed1ed6308f93e3f4ac9f0d8b289bd5e82a7e1e05ee189b9fc62ca7cf6e07a237cb5d626318509ec24f5b8
7
- data.tar.gz: 493cc1f59007c7fce4146e3bebae38a9447fa57cf418079afd835783529f8952c981e4bf86819fc8ec66f40f2c32a251da43fccafaf064316bee90f8bdbf781a
6
+ metadata.gz: 1ad9ef6eadc4292f4b8e9adf1f834cec57b83957eaf2b2adc1dd3577034a3799b7a4d0cf1b66150e838d8376b29b54837b94b1facfb9ce505ff3f32f56129169
7
+ data.tar.gz: efe36f401cf154c5a3f98873a9c3cff908963806ce87db080da81be702de2c2452d26599b994c6722889c7ffbc2d58a9009cba6c68f8780a71edb5c71342cc25
data/Gemfile.lock CHANGED
@@ -12,7 +12,7 @@ GIT
12
12
  PATH
13
13
  remote: .
14
14
  specs:
15
- checkoff (0.27.0)
15
+ checkoff (0.29.0)
16
16
  activesupport
17
17
  asana (> 0.10.0)
18
18
  cache_method
@@ -43,7 +43,7 @@ GEM
43
43
  concurrent-ruby (1.1.10)
44
44
  crack (0.4.5)
45
45
  rexml
46
- dalli (3.2.3)
46
+ dalli (3.2.4)
47
47
  diff-lcs (1.5.0)
48
48
  docile (1.4.0)
49
49
  fakeweb (1.3.0)
@@ -71,9 +71,14 @@ module Checkoff
71
71
  # Handle 'completion' search url param
72
72
  class Completion < SimpleParam
73
73
  def convert
74
- raise "Teach me how to handle #{key} = #{values}" if single_value != 'incomplete'
75
-
76
- ['completed', false]
74
+ case single_value
75
+ when 'incomplete'
76
+ ['completed', false]
77
+ when 'complete'
78
+ ['completed', true]
79
+ else
80
+ raise "Teach me how to handle #{key} = #{values}"
81
+ end
77
82
  end
78
83
  end
79
84
 
@@ -3,8 +3,10 @@
3
3
  module Checkoff
4
4
  # Base class to evaluate a task selector function given fully evaluated arguments
5
5
  class FunctionEvaluator
6
- def initialize(task_selector:)
6
+ def initialize(task_selector:,
7
+ tasks:)
7
8
  @task_selector = task_selector
9
+ @tasks = tasks
8
10
  end
9
11
 
10
12
  def evaluate_arg?(_index)
@@ -83,6 +85,17 @@ module Checkoff
83
85
  end
84
86
  end
85
87
 
88
+ # :due function
89
+ class DuePFunctionEvaluator < FunctionEvaluator
90
+ def matches?
91
+ fn?(task_selector, :due)
92
+ end
93
+
94
+ def evaluate(task)
95
+ @tasks.task_ready?(task)
96
+ end
97
+ end
98
+
86
99
  # :custom_field_value function
87
100
  class CustomFieldValueFunctionEvaluator < FunctionEvaluator
88
101
  def matches?
@@ -174,8 +187,10 @@ module Checkoff
174
187
 
175
188
  # Evaluator task selectors against a task
176
189
  class TaskSelectorEvaluator
177
- def initialize(task:)
190
+ def initialize(task:,
191
+ tasks: Checkoff::Tasks.new)
178
192
  @task = task
193
+ @tasks = tasks
179
194
  end
180
195
 
181
196
  FUNCTION_EVALUTORS = [
@@ -186,13 +201,15 @@ module Checkoff
186
201
  CustomFieldGidValueFunctionEvaluator,
187
202
  CustomFieldGidValueContainsAnyGidFunctionEvaluator,
188
203
  AndFunctionEvaluator,
204
+ DuePFunctionEvaluator,
189
205
  ].freeze
190
206
 
191
207
  def evaluate(task_selector)
192
208
  return true if task_selector == []
193
209
 
194
210
  FUNCTION_EVALUTORS.each do |evaluator_class|
195
- evaluator = evaluator_class.new(task_selector: task_selector)
211
+ evaluator = evaluator_class.new(task_selector: task_selector,
212
+ tasks: tasks)
196
213
 
197
214
  next unless evaluator.matches?
198
215
 
@@ -216,6 +233,6 @@ module Checkoff
216
233
  evaluator.evaluate(task, *evaluated_args)
217
234
  end
218
235
 
219
- attr_reader :task, :task_selector
236
+ attr_reader :task, :tasks, :task_selector
220
237
  end
221
238
  end
@@ -20,17 +20,23 @@ module Checkoff
20
20
  LONG_CACHE_TIME = MINUTE * 15
21
21
  SHORT_CACHE_TIME = MINUTE
22
22
 
23
- def initialize(config: Checkoff::Internal::ConfigLoader.load(:asana))
23
+ def initialize(config: Checkoff::Internal::ConfigLoader.load(:asana),
24
+ tasks: Checkoff::Tasks.new)
24
25
  @config = config
26
+ @tasks = tasks
25
27
  end
26
28
 
27
29
  # @param [Hash<Symbol, Object>] task_selector Filter based on
28
30
  # description. Examples: {tag: 'foo'} {:not {tag: 'foo'} (:tag 'foo')
29
31
  def filter_via_task_selector(task, task_selector)
30
- evaluator = TaskSelectorEvaluator.new(task: task)
32
+ evaluator = TaskSelectorEvaluator.new(task: task, tasks: tasks)
31
33
  evaluator.evaluate(task_selector)
32
34
  end
33
35
 
36
+ private
37
+
38
+ attr_reader :tasks
39
+
34
40
  # bundle exec ./task_selectors.rb
35
41
  # :nocov:
36
42
  class << self
@@ -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.27.0'
6
+ VERSION = '0.29.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.27.0
4
+ version: 0.29.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-02-02 00:00:00.000000000 Z
11
+ date: 2023-02-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport