Class: Micro::Cases::Flow
- Inherits:
-
Object
- Object
- Micro::Cases::Flow
- Defined in:
- lib/micro/cases/flow.rb
Direct Known Subclasses
Constant Summary collapse
- IsAUseCaseWithDefaults =
-> arg { arg.is_a?(Array) && Micro.case?(arg[0]) && arg[1].is_a?(Hash) }
- IsAValidUseCase =
-> use_case { Micro.case?(use_case) || IsAUseCaseWithDefaults[use_case] }
Instance Attribute Summary collapse
-
#use_cases ⇒ Object
readonly
Returns the value of attribute use_cases.
Class Method Summary collapse
Instance Method Summary collapse
- #call(input = Kind::Empty::HASH) {|result_wrapper| ... } ⇒ Object (also: #__call__)
- #call!(input:, result:) ⇒ Object
-
#initialize(use_cases, transaction: nil) ⇒ Flow
constructor
A new instance of Flow.
- #inspect ⇒ Object
- #then(use_case = nil, &block) ⇒ Object
- #to_proc ⇒ Object
Constructor Details
#initialize(use_cases, transaction: nil) ⇒ Flow
Returns a new instance of Flow.
19 20 21 22 23 24 |
# File 'lib/micro/cases/flow.rb', line 19 def initialize(use_cases, transaction: nil) @use_cases = use_cases.dup.freeze @next_ones = use_cases.dup @first = @next_ones.shift @transaction = ::Micro::Case.check.transaction_kwarg!(transaction) end |
Instance Attribute Details
#use_cases ⇒ Object (readonly)
Returns the value of attribute use_cases.
9 10 11 |
# File 'lib/micro/cases/flow.rb', line 9 def use_cases @use_cases end |
Class Method Details
.build(args, transaction: nil) ⇒ Object
11 12 13 14 15 16 17 |
# File 'lib/micro/cases/flow.rb', line 11 def self.build(args, transaction: nil) use_cases = Utils.map_use_cases(args) ::Micro::Case.check.flow_use_cases!(use_cases) new(use_cases, transaction: transaction) end |
Instance Method Details
#call(input = Kind::Empty::HASH) {|result_wrapper| ... } ⇒ Object Also known as: __call__
38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/micro/cases/flow.rb', line 38 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 |
#call!(input:, result:) ⇒ Object
32 33 34 35 36 |
# File 'lib/micro/cases/flow.rb', line 32 def call!(input:, result:) return __call_steps(input, result) unless @transaction __wrap_in_transaction { __call_steps(input, result) } end |
#inspect ⇒ Object
26 27 28 29 30 |
# File 'lib/micro/cases/flow.rb', line 26 def inspect return '#<(%s) use_cases=%s>' % [self.class, @use_cases] unless @transaction '#<(%s) transaction=%p use_cases=%s>' % [self.class, @transaction, @use_cases] end |
#then(use_case = nil, &block) ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/micro/cases/flow.rb', line 56 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 ::Micro::Case.check.then_use_case_or_flow!(use_case, "#{self.class.name}#") self.call.then(use_case) end end |
#to_proc ⇒ Object
52 53 54 |
# File 'lib/micro/cases/flow.rb', line 52 def to_proc Proc.new { |arg| call(arg) } end |