Class: Checkoff::SelectorEvaluator

Inherits:
Object
  • Object
show all
Defined in:
lib/checkoff/internal/selector_evaluator.rb,
sig/checkoff.rbs

Overview

Base class to evaluate Asana resource selectors against an Asana resource

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#itemAsana::Resources::Resource (readonly)



67
68
69
# File 'lib/checkoff/internal/selector_evaluator.rb', line 67

def item
  @item
end

Instance Method Details

#evaluate(selector) ⇒ bool, ...

@param selector

Parameters:

  • selector (Symbol, ::Array[(Symbol | Integer | ::Array[untyped])])

Returns:

  • (bool, Object, ::Array[untyped], nil)


9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/checkoff/internal/selector_evaluator.rb', line 9

def evaluate(selector)
  return true if selector.empty?

  function_evaluators.each do |evaluator_class|
    # @type [Checkoff::SelectorClasses::FunctionEvaluator]
    # @sg-ignore
    evaluator = evaluator_class.new(selector:,
                                    **initializer_kwargs)

    next unless evaluator.matches?

    # @sg-ignore
    return try_this_evaluator(selector, evaluator)
  end

  raise "Syntax issue trying to handle #{selector.inspect}"
end

#evaluate_args(selector, evaluator) ⇒ ::Array[untyped]

@param selector

@param evaluator

Parameters:

Returns:

  • (::Array[untyped])


43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/checkoff/internal/selector_evaluator.rb', line 43

def evaluate_args(selector, evaluator)
  return [] unless selector.is_a?(Array)

  # @sg-ignore
  selector[1..].map.with_index do |item, index|
    if evaluator.evaluate_arg?(index)
      evaluate(item)
    else
      item
    end
  end
end

#function_evaluators::Array[singleton(Checkoff::SelectorClasses::FunctionEvaluator)]

@sg-ignore

Returns:



36
37
38
# File 'lib/checkoff/internal/selector_evaluator.rb', line 36

def function_evaluators
  raise 'Implement me!'
end

#initializer_kwargsHash

Returns:

  • (Hash)


30
31
32
# File 'lib/checkoff/internal/selector_evaluator.rb', line 30

def initializer_kwargs
  {}
end

#try_this_evaluator(selector, evaluator) ⇒ bool, ...

@param selector

@param evaluator

Parameters:

Returns:

  • (bool, Object, nil)


59
60
61
62
63
64
# File 'lib/checkoff/internal/selector_evaluator.rb', line 59

def try_this_evaluator(selector, evaluator)
  # if selector is an array
  evaluated_args = evaluate_args(selector, evaluator)

  evaluator.evaluate(item, *evaluated_args)
end