Module: ConvenientService::Core::Entities::Config::Entities::MethodMiddlewares::Entities::Middlewares::Chain::Concern::InstanceMethods

Includes:
Support::AbstractMethod
Defined in:
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middlewares/chain/concern/instance_methods.rb

Instance Method Summary collapse

Methods included from Support::Concern

included

Instance Method Details

#call(env) ⇒ Object

Returns Can be any type.

Parameters:

  • env (Hash)

Returns:

  • (Object)

    Can be any type.



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middlewares/chain/concern/instance_methods.rb', line 44

def call(env)
  @__env__ = env

  ##
  # IMPORTANT: This is a library code. Do NOT do things like this in your application code.
  #
  chain.instance_variable_set(:@env, env)

  ##
  # NOTE: `__send__` is used since `next` is ruby keyword.
  # https://ruby-doc.org/core-2.7.0/doc/keywords_rdoc.html
  #
  # TODO: Enforce to always pass args, kwargs, block.
  #
  __send__(:next, *env[:args], **env[:kwargs], &env[:block])
end

#chainConvenientService::Core::Entities::Config::Entities::MethodMiddlewares::Entities::Chain

Returns:

  • (ConvenientService::Core::Entities::Config::Entities::MethodMiddlewares::Entities::Chain)


102
103
104
# File 'lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middlewares/chain/concern/instance_methods.rb', line 102

def chain
  @__chain__ ||= self.class.chain_class.new(stack: @__stack__)
end

#entityClass, Object

Returns:

  • (Class, Object)


67
68
69
# File 'lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middlewares/chain/concern/instance_methods.rb', line 67

def entity
  @__env__[:entity]
end

#methodSymbol

Note:

Fallback to avoid ‘if` conditions based on `method` value when possible, prefer to create separate middlewares instead.

Returns:

  • (Symbol)


79
80
81
# File 'lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middlewares/chain/concern/instance_methods.rb', line 79

def method
  @__env__[:method]
end

#nextObject

Note:

But it completely OK, to omit ‘chain.next(*args, **kwargs, &block)` completely. This way middleware stack is stopped in the “middle” and its “middle” value is returned.

Returns Can be any type.

Examples:

Subclass should call ‘value = chain.next(*args, **kwargs, &block)` to trigger next middleware in a stack.

def next(*args, **kwargs, &block)
  # pre processing...

  value = chain.next(*args, **kwargs, &block)

  # post processing...

  post_processed_value
end

Returns:

  • (Object)

    Can be any type.

Raises:

See Also:



38
# File 'lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middlewares/chain/concern/instance_methods.rb', line 38

abstract_method :next

#next_argumentsConvenientService::Support::Arguments



90
91
92
93
94
# File 'lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middlewares/chain/concern/instance_methods.rb', line 90

def next_arguments
  return unless @__env__.has_key?(:args)

  @__next_arguments__ ||= Support::Arguments.new(*@__env__[:args], **@__env__[:kwargs], &@__env__[:block])
end