Class: Dry::Events::Filter Private
- Inherits:
-
Object
- Object
- Dry::Events::Filter
- Defined in:
- lib/dry/events/filter.rb
Overview
This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.
Event filter
A filter cherry-picks probes payload of events. Events not matching the predicates don’t fire callbacks.
Constant Summary collapse
- NO_MATCH =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
Object.new.freeze
Instance Attribute Summary collapse
- #checks ⇒ Object readonly private
-
#events ⇒ Array
readonly
A list of lambdas checking payloads.
Instance Method Summary collapse
-
#build_checks(filter, checks = EMPTY_ARRAY, keys = EMPTY_ARRAY) ⇒ Object
private
Recursively build checks.
-
#call(payload = EMPTY_HASH) ⇒ Object
private
Test event payload against the checks.
- #compare(path, predicate, payload) ⇒ Object private
-
#initialize(filter) ⇒ Filter
constructor
private
Create a new filter.
- #predicate(value) ⇒ Object private
Constructor Details
#initialize(filter) ⇒ Filter
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Create a new filter
23 24 25 |
# File 'lib/dry/events/filter.rb', line 23 def initialize(filter) @checks = build_checks(filter) end |
Instance Attribute Details
#checks ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
16 17 18 |
# File 'lib/dry/events/filter.rb', line 16 def checks @checks end |
#events ⇒ Array (readonly)
Returns A list of lambdas checking payloads.
16 |
# File 'lib/dry/events/filter.rb', line 16 attr_reader :checks |
Instance Method Details
#build_checks(filter, checks = EMPTY_ARRAY, keys = EMPTY_ARRAY) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Recursively build checks
39 40 41 42 43 44 45 46 47 |
# File 'lib/dry/events/filter.rb', line 39 def build_checks(filter, checks = EMPTY_ARRAY, keys = EMPTY_ARRAY) if filter.is_a?(Hash) filter.reduce(checks) do |cs, (key, value)| build_checks(value, cs, [*keys, key]) end else [*checks, method(:compare).curry.(keys, predicate(filter))] end end |
#call(payload = EMPTY_HASH) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Test event payload against the checks
32 33 34 |
# File 'lib/dry/events/filter.rb', line 32 def call(payload = EMPTY_HASH) checks.all? { |check| check.(payload) } end |
#compare(path, predicate, payload) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/dry/events/filter.rb', line 50 def compare(path, predicate, payload) value = path.reduce(payload) do |acc, key| if acc.is_a?(Hash) && acc.key?(key) acc[key] else break NO_MATCH end end predicate.(value) end |
#predicate(value) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
63 64 65 66 67 68 69 |
# File 'lib/dry/events/filter.rb', line 63 def predicate(value) case value when Proc then value when Array then value.method(:include?) else value.method(:==) end end |