Class: Enumpath::Operator::FilterExpression
- Defined in:
- lib/enumpath/operator/filter_expression.rb
Overview
Implements JSONPath filter expression operator syntax. See README for syntax and examples
Constant Summary collapse
- COMPARISON_OPERATOR_REGEX =
/(==|!=|>=|<=|<=>|>|<|=~|!~)/
- LOGICAL_OPERATORS_REGEX =
/(&&)|(\|\|)/
- OPERATOR_REGEX =
/^\?\((.*)\)$/
Instance Attribute Summary
Attributes inherited from Base
Class Method Summary collapse
-
.detect?(operator) ⇒ true, false
Whether the operator matches OPERATOR_REGEX.
Instance Method Summary collapse
-
#apply(remaining_path, enum, resolved_path) {|remaining_path, enum, resolved_path| ... } ⇒ Object
Yields to the block once for each member of the enumerable that passes the filter expression.
Methods inherited from Base
Constructor Details
This class inherits a constructor from Enumpath::Operator::Base
Class Method Details
.detect?(operator) ⇒ true, false
Whether the operator matches OPERATOR_REGEX
19 20 21 |
# File 'lib/enumpath/operator/filter_expression.rb', line 19 def detect?(operator) !(operator =~ OPERATOR_REGEX).nil? end |
Instance Method Details
#apply(remaining_path, enum, resolved_path) {|remaining_path, enum, resolved_path| ... } ⇒ Object
Yields to the block once for each member of the enumerable that passes the filter expression
32 33 34 35 36 37 |
# File 'lib/enumpath/operator/filter_expression.rb', line 32 def apply(remaining_path, enum, resolved_path, &block) Enumpath.log('Evaluating filter expression') { { expression: operator, to: enum } } _match, unpacked_operator = OPERATOR_REGEX.match(operator).to_a expressions = unpacked_operator.split(LOGICAL_OPERATORS_REGEX).map(&:strip) keys(enum).each { |key| apply_to_key(key, expressions, remaining_path, enum, resolved_path, &block) } end |