checkoff 0.58.1 → 0.60.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 +4 -4
- data/Gemfile.lock +13 -2
- data/lib/checkoff/internal/project_selector_evaluator.rb +46 -0
- data/lib/checkoff/internal/search_url/simple_param_converter.rb +9 -0
- data/lib/checkoff/internal/selector_classes/common/function_evaluator.rb +158 -0
- data/lib/checkoff/internal/selector_classes/common.rb +226 -0
- data/lib/checkoff/internal/selector_classes/function_evaluator.rb +36 -0
- data/lib/checkoff/internal/selector_classes/project/function_evaluator.rb +161 -0
- data/lib/checkoff/internal/selector_classes/project.rb +10 -0
- data/lib/checkoff/internal/selector_classes/task/function_evaluator.rb +161 -0
- data/lib/checkoff/internal/selector_classes/task.rb +333 -0
- data/lib/checkoff/internal/selector_evaluator.rb +66 -0
- data/lib/checkoff/internal/task_selector_evaluator.rb +23 -728
- data/lib/checkoff/project_selectors.rb +9 -15
- data/lib/checkoff/tasks.rb +3 -0
- data/lib/checkoff/version.rb +1 -1
- metadata +11 -2
@@ -0,0 +1,66 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Checkoff
|
4
|
+
# Base class to evaluate Asana resource selectors against an Asana resource
|
5
|
+
class SelectorEvaluator
|
6
|
+
# @param selector [Array]
|
7
|
+
# @return [Boolean, Object, nil]
|
8
|
+
def evaluate(selector)
|
9
|
+
return true if selector.empty?
|
10
|
+
|
11
|
+
function_evaluators.each do |evaluator_class|
|
12
|
+
# @type [SelectorClasses::FunctionEvaluator]
|
13
|
+
# @sg-ignore
|
14
|
+
evaluator = evaluator_class.new(selector: selector,
|
15
|
+
**initializer_kwargs)
|
16
|
+
|
17
|
+
next unless evaluator.matches?
|
18
|
+
|
19
|
+
return try_this_evaluator(selector, evaluator)
|
20
|
+
end
|
21
|
+
|
22
|
+
raise "Syntax issue trying to handle #{selector.inspect}"
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
# @return [Hash]
|
28
|
+
def initializer_kwargs
|
29
|
+
{}
|
30
|
+
end
|
31
|
+
|
32
|
+
# @return [Array<Class<FunctionEvaluator>>]
|
33
|
+
# @sg-ignore
|
34
|
+
def function_evaluators
|
35
|
+
raise 'Implement me!'
|
36
|
+
end
|
37
|
+
|
38
|
+
# @param selector [Array]
|
39
|
+
# @param evaluator [SelectorClasses::FunctionEvaluator]
|
40
|
+
# @return [Array]
|
41
|
+
def evaluate_args(selector, evaluator)
|
42
|
+
return [] unless selector.is_a?(Array)
|
43
|
+
|
44
|
+
selector[1..].map.with_index do |item, index|
|
45
|
+
if evaluator.evaluate_arg?(index)
|
46
|
+
evaluate(item)
|
47
|
+
else
|
48
|
+
item
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# @param selector [Array]
|
54
|
+
# @param evaluator [SelectorClasses::FunctionEvaluator]
|
55
|
+
# @return [Boolean, Object, nil]
|
56
|
+
def try_this_evaluator(selector, evaluator)
|
57
|
+
# if selector is an array
|
58
|
+
evaluated_args = evaluate_args(selector, evaluator)
|
59
|
+
|
60
|
+
evaluator.evaluate(item, *evaluated_args)
|
61
|
+
end
|
62
|
+
|
63
|
+
# @return [Asana::Resources::Resource]
|
64
|
+
attr_reader :item
|
65
|
+
end
|
66
|
+
end
|