checkoff 0.27.0 → 0.29.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: 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