Class: CMDx::Mergers
- Inherits:
-
Object
- Object
- CMDx::Mergers
- Defined in:
- lib/cmdx/mergers.rb,
lib/cmdx/mergers/no_merge.rb,
lib/cmdx/mergers/deep_merge.rb,
lib/cmdx/mergers/last_write_wins.rb
Overview
Registry of named merge strategies used to fold successful parallel task results back into the workflow context. Ships with built-ins for ‘:last_write_wins` (default), `:deep_merge`, and `:no_merge`. A merger is any callable accepting `call(workflow_context, result)`.
Defined Under Namespace
Modules: DeepMerge, LastWriteWins, NoMerge
Instance Attribute Summary collapse
-
#registry ⇒ Object
readonly
Returns the value of attribute registry.
Instance Method Summary collapse
-
#deregister(name) ⇒ Mergers
Self for chaining.
- #empty? ⇒ Boolean
-
#initialize ⇒ Mergers
constructor
A new instance of Mergers.
- #initialize_copy(source) ⇒ void
-
#lookup(name) ⇒ #call
The registered merger.
-
#register(name, callable = nil, &block) { ... } ⇒ Mergers
Registers a named merger, overwriting any existing entry.
-
#resolve(spec) ⇒ #call
Resolves a declaration’s ‘:merger` option to a concrete callable.
- #size ⇒ Integer
Constructor Details
Instance Attribute Details
#registry ⇒ Object (readonly)
Returns the value of attribute registry.
10 11 12 |
# File 'lib/cmdx/mergers.rb', line 10 def registry @registry end |
Instance Method Details
#deregister(name) ⇒ Mergers
Returns self for chaining.
50 51 52 53 |
# File 'lib/cmdx/mergers.rb', line 50 def deregister(name) registry.delete(name.to_sym) self end |
#empty? ⇒ Boolean
85 86 87 |
# File 'lib/cmdx/mergers.rb', line 85 def empty? registry.empty? end |
#initialize_copy(source) ⇒ void
This method returns an undefined value.
22 23 24 |
# File 'lib/cmdx/mergers.rb', line 22 def initialize_copy(source) @registry = source.registry.dup end |
#lookup(name) ⇒ #call
Returns the registered merger.
58 59 60 61 62 |
# File 'lib/cmdx/mergers.rb', line 58 def lookup(name) registry[name] || begin raise ArgumentError, "unknown merger: #{name.inspect}" end end |
#register(name, callable = nil, &block) { ... } ⇒ Mergers
Registers a named merger, overwriting any existing entry.
35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/cmdx/mergers.rb', line 35 def register(name, callable = nil, &block) merger = callable || block if callable && block raise ArgumentError, "provide either a callable or a block, not both" elsif !merger.respond_to?(:call) raise ArgumentError, "merger must respond to #call" end registry[name.to_sym] = merger self end |
#resolve(spec) ⇒ #call
Resolves a declaration’s ‘:merger` option to a concrete callable. Accepts `nil` (default `:last_write_wins`), a Symbol (registry lookup), or any object responding to `#call`.
71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/cmdx/mergers.rb', line 71 def resolve(spec) case spec when NilClass lookup(:last_write_wins) when Symbol lookup(spec) else return spec if spec.respond_to?(:call) raise ArgumentError, "unknown merger: #{spec.inspect}" end end |
#size ⇒ Integer
90 91 92 |
# File 'lib/cmdx/mergers.rb', line 90 def size registry.size end |