Class: Matcher
- Inherits:
-
Object
- Object
- Matcher
- Defined in:
- lib/deimos/ext/routing_defaults.rb
Overview
This monkey patch was provided by Maciej, the maintainer of Karafka. This allows configs to override each other on a more granular basis rather than each ‘configure` call blowing away all fields. It also supports multiple default blocks.
Unfortunately this can’t be merged into Karafka as of now because it will be a major breaking change. As a compromise, it has been added to the test coverage of Karafka to ensure that other changes don’t break this. github.com/karafka/karafka/issues/2344
Instance Method Summary collapse
-
#initialize ⇒ Matcher
constructor
A new instance of Matcher.
- #method_missing(m, *args, **kwargs) ⇒ Object
- #replay_on(topic_node) ⇒ Object
Constructor Details
#initialize ⇒ Matcher
Returns a new instance of Matcher.
10 11 12 |
# File 'lib/deimos/ext/routing_defaults.rb', line 10 def initialize @applications = [] end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(m, *args, **kwargs) ⇒ Object
44 45 46 47 48 49 50 |
# File 'lib/deimos/ext/routing_defaults.rb', line 44 def method_missing(m, *args, **kwargs) if args.empty? @applications << [m, kwargs] else @applications << [m, args] end end |
Instance Method Details
#replay_on(topic_node) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/deimos/ext/routing_defaults.rb', line 14 def replay_on(topic_node) @applications.each do |method, kwargs| if kwargs.is_a?(Hash) ref = topic_node.public_send(method) kwargs.each do |arg, val| if ref.respond_to?("#{arg}=") ref.public_send("#{arg}=", val) else if ref.respond_to?(:details) ref.details.merge!(kwargs) elsif ref.is_a?(Hash) ref.merge!(kwargs) else raise 'No idea if such case exists, if so, similar handling as config' end end end end if kwargs.is_a?(Array) && kwargs.size == 1 if topic_node.respond_to?("#{method}=") topic_node.public_send(:"#{method}=", kwargs.first) else topic_node.public_send(method, *kwargs) end end end end |