Module: Flows::Plugin::ImplicitInit

Included in:
Railway, SharedContextPipeline
Defined in:
lib/flows/plugin/implicit_init.rb

Overview

Note:

This module must be injected into target class using extend, not include.

Note:

Class inheritance is supported: each child class will inherit behaviour, but not data.

Class extension with method MyClass.call which works like MyClass.new.call.

Examples:

Extending a class

class SomeClass
  extend Flows::Plugin::ImplicitInit

  def initialize(param: 'default')
    @param = param
  end

  def call
    @param
  end
end

SomeClass.call
# => 'default'

SomeClass.default_instance.call
# => 'default'

Since:

  • 0.4.0

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#default_instanceObject (readonly)

Contains memoized instance of a host class or nil.

Since:

  • 0.4.0



30
31
32
# File 'lib/flows/plugin/implicit_init.rb', line 30

def default_instance
  @default_instance
end

Instance Method Details

#call(*args, **kwargs, &block) ⇒ Object

Creates an instance of a host class by calling new without arguments and calls #call method on the instance with provided parameters and block.

After first invocation the instance will be memoized in #default_instance.

Child classes have separate default instances.

Since:

  • 0.4.0



38
39
40
41
42
# File 'lib/flows/plugin/implicit_init.rb', line 38

def call(*args, **kwargs, &block)
  @default_instance ||= new

  default_instance.call(*args, **kwargs, &block)
end