Sha256: 2afd22c8ee391c07173808fd515f425596d5071ff5fc7e2ebb421969bd32c870
Contents?: true
Size: 1.41 KB
Versions: 1
Compression:
Stored size: 1.41 KB
Contents
# frozen_string_literal: true module RShade module Filter class FilterComposition include Enumerable AND_OP = :and OR_OP = :or UNARY_OP = :unary attr_reader :value, :left, :right attr_accessor :parent # @param [#call, Enumerable] left # @param [#call, Enumerable] right def initialize(value, left = nil, right = nil) @value = value @left = left @right = right end # rubocop:disable Metrics/CyclomaticComplexity def call(event) case value when UNARY_OP left&.call(event) when AND_OP left&.call(event) && right&.call(event) when OR_OP left&.call(event) || right&.call(event) else value.call(event) end end # rubocop:enable Metrics/CyclomaticComplexity def each(&block) yield value unless left && right left&.each(&block) right&.each(&block) end def filter(type, &block) filter = find do |f| f.is_a? type end filter&.config(&block) end # for debug purposes, show each filter and result of evaluation def filter_results(event) each_with_object([]) do |filter, arr| arr << [filter, filter.call(event)] end end def self.build(arr) ::RShade::Filter::FilterBuilder.build(arr) end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
rshade-0.2.2 | lib/rshade/filter/filter_composition.rb |