Class: Micro::Case::Flow::Reducer
- Inherits:
-
Object
- Object
- Micro::Case::Flow::Reducer
- Defined in:
- lib/micro/case/flow/reducer.rb
Direct Known Subclasses
Instance Attribute Summary collapse
-
#use_cases ⇒ Object
readonly
Returns the value of attribute use_cases.
Class Method Summary collapse
Instance Method Summary collapse
- #&(arg) ⇒ Object
- #>>(arg) ⇒ Object
- #call(arg = {}) ⇒ Object
-
#initialize(use_cases) ⇒ Reducer
constructor
A new instance of Reducer.
- #to_proc ⇒ Object
Constructor Details
#initialize(use_cases) ⇒ Reducer
Returns a new instance of Reducer.
24 25 26 27 28 |
# File 'lib/micro/case/flow/reducer.rb', line 24 def initialize(use_cases) @use_cases = use_cases @first_use_case = use_cases[0] @next_use_cases = use_cases[1..-1] end |
Instance Attribute Details
#use_cases ⇒ Object (readonly)
Returns the value of attribute use_cases.
7 8 9 |
# File 'lib/micro/case/flow/reducer.rb', line 7 def use_cases @use_cases end |
Class Method Details
.build(args) ⇒ Object
16 17 18 19 20 21 22 |
# File 'lib/micro/case/flow/reducer.rb', line 16 def self.build(args) use_cases = Array(args).flat_map { |arg| map_use_cases(arg) } raise Error::InvalidUseCases if use_cases.any? { |klass| !(klass < ::Micro::Case) } new(use_cases) end |
.map_use_cases(arg) ⇒ Object
9 10 11 12 13 14 |
# File 'lib/micro/case/flow/reducer.rb', line 9 def self.map_use_cases(arg) return arg.use_cases if arg.is_a?(Reducer) return arg.__flow__.use_cases if arg.is_a?(Class) && arg < ::Micro::Case::Flow Array(arg) end |
Instance Method Details
#&(arg) ⇒ Object
44 45 46 |
# File 'lib/micro/case/flow/reducer.rb', line 44 def &(arg) raise NoMethodError, "undefined method `&' for #{self.inspect}. Please, use the method `>>' to avoid this error." end |
#>>(arg) ⇒ Object
40 41 42 |
# File 'lib/micro/case/flow/reducer.rb', line 40 def >>(arg) self.class.build(use_cases + self.class.map_use_cases(arg)) end |
#call(arg = {}) ⇒ Object
30 31 32 33 34 35 36 37 38 |
# File 'lib/micro/case/flow/reducer.rb', line 30 def call(arg = {}) memo = arg.is_a?(Hash) ? arg.dup : {} first_result = first_use_case_result(arg) return first_result if @next_use_cases.empty? next_use_cases_result(first_result, memo) end |
#to_proc ⇒ Object
48 49 50 |
# File 'lib/micro/case/flow/reducer.rb', line 48 def to_proc Proc.new { |arg| call(arg) } end |