class Micro::Cases::Flow
Constants
- IsAUseCaseWithDefaults
- IsAValidUseCase
Attributes
use_cases[R]
Public Class Methods
build(args)
click to toggle source
# File lib/micro/cases/flow.rb, line 11 def self.build(args) use_cases = Utils.map_use_cases(args) raise Error::InvalidUseCases if use_cases.none?(&IsAValidUseCase) new(use_cases) end
new(use_cases)
click to toggle source
# File lib/micro/cases/flow.rb, line 19 def initialize(use_cases) @use_cases = use_cases.dup.freeze @next_ones = use_cases.dup @first = @next_ones.shift end
Public Instance Methods
call(input = Kind::Empty::HASH) { |result_wrapper| ... }
click to toggle source
# File lib/micro/cases/flow.rb, line 37 def call(input = Kind::Empty::HASH) result = call!(input: input, result: Case::Result.new) return result unless block_given? result_wrapper = ::Micro::Case::Result::Wrapper.new(result) yield(result_wrapper) result_wrapper.output end
Also aliased as: __call__
call!(input:, result:)
click to toggle source
# File lib/micro/cases/flow.rb, line 29 def call!(input:, result:) first_result = __call_use_case(@first, result, input) return first_result if @next_ones.empty? __call_next_use_cases(first_result) end
inspect()
click to toggle source
# File lib/micro/cases/flow.rb, line 25 def inspect '#<(%s) use_cases=%s>' % [self.class, @use_cases] end
then(use_case = nil, &block)
click to toggle source
# File lib/micro/cases/flow.rb, line 55 def then(use_case = nil, &block) can_yield_self = respond_to?(:yield_self) if block raise_invalid_invocation_of_the_then_method if use_case raise NotImplementedError if !can_yield_self yield_self(&block) else return yield_self if !use_case && can_yield_self raise_invalid_invocation_of_the_then_method unless ::Micro.case_or_flow?(use_case) self.call.then(use_case) end end
to_proc()
click to toggle source
# File lib/micro/cases/flow.rb, line 51 def to_proc Proc.new { |arg| call(arg) } end
Private Instance Methods
__build_use_case(use_case, result, input)
click to toggle source
# File lib/micro/cases/flow.rb, line 90 def __build_use_case(use_case, result, input) return use_case.__new__(result, input) unless use_case.is_a?(Array) use_case[0].__new__(result, input.merge(use_case[1])) end
__call_next_use_cases(first_result)
click to toggle source
# File lib/micro/cases/flow.rb, line 82 def __call_next_use_cases(first_result) @next_ones.reduce(first_result) do |result, use_case| break result if result.failure? __call_use_case(use_case, result, result.data) end end
__call_use_case(use_case, result, input)
click to toggle source
# File lib/micro/cases/flow.rb, line 78 def __call_use_case(use_case, result, input) __build_use_case(use_case, result, input).__call__ end
raise_invalid_invocation_of_the_then_method()
click to toggle source
# File lib/micro/cases/flow.rb, line 74 def raise_invalid_invocation_of_the_then_method raise Case::Error::InvalidInvocationOfTheThenMethod.new("#{self.class.name}#") end