Module: Eco::API::UseCases::UseCaseChain::Chaining
- Included in:
- Eco::API::UseCases::UseCaseChain
- Defined in:
- lib/eco/api/usecases/use_case_chain/chaining.rb
Constant Summary collapse
- MAX_CHAINS =
70- @@num_chains =
0
Instance Method Summary collapse
Instance Method Details
#chain(usecase = nil, &block) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/eco/api/usecases/use_case_chain/chaining.rb', line 33 def chain(usecase = nil, &block) @@num_chains += 1 msg = "Reached maximum number of chained use cases (#{MAX_CHAINS}). " msg << "Looks like a recursive cyclic chain 'use'" raise msg if @@num_chains >= MAX_CHAINS msg = 'A UseCase can only be chained with another UseCase' raise msg if usecase && !usecase.is_a?(UseCase) msg = 'Missuse. Please use either parameter or block but not both' raise msg if block_given? && usecase usecase = block if block_given? @chains.push(usecase) self end |
#use(preserve_chains: false, recursive: false) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/eco/api/usecases/use_case_chain/chaining.rb', line 6 def use(preserve_chains: false, recursive: false) UseCase.new( @name, type: @type, model: @model, root: @root, &@case ).tap do |newcase| next unless preserve_chains chain_use = {preserve_chains: recursive, recursive: recursive} @chains = @chains.map do |usecase| if usecase.respond_to?(:call) proc do |usegroup| usecase = usecase.call(usegroup) usecase.use(**chain_use).chain_to(newcase) usecase end elsif usecase.is_a?(UseCase) usecase.use(**chain_use).chain_to(newcase) usecase end end end end |