module SmartCore::Operation::ClassConstructor

@api private @since 0.1.0

Constants

CONSYSTENCY_CONTROL

@return [SmartCore::Engine::Lock]

@api private @since 0.1.0

Public Class Methods

construct(klass = Class.new(SmartCore::Operation), type_system: default_type_system) click to toggle source

@param klass [Class, Class<SmartCore::Operation>] @option type_system [String, Symbol] @return [Class<SmartCore::Operation>]

@api private @since 0.1.0

# File lib/smart_core/operation/class_constructor.rb, line 21
def construct(klass = Class.new(SmartCore::Operation), type_system: default_type_system)
  klass.tap do
    consistent do
      parameters = Parameters.new(type_system: type_system)
      inject_initializer_interface(klass, parameters)
    end
  end
end
default_type_system() click to toggle source

@return [String, Symbol]

@api private @since 0.1.0

# File lib/smart_core/operation/class_constructor.rb, line 34
def default_type_system
  SmartCore::Initializer::Configuration[:default_type_system]
end

Private Class Methods

consistent(&block) click to toggle source

@param block [Block] @return [Any]

@api private @since 0.1.0

# File lib/smart_core/operation/class_constructor.rb, line 58
def consistent(&block)
  CONSYSTENCY_CONTROL.synchronize(&block)
end
inject_initializer_interface(klass, parameters) click to toggle source

@param klass [Class, Class<SmartCore::Operation>] @param parameters [SmartCore::Operation::ClassConstructor::Parameters] @return [void]

@api private @since 0.1.0

# File lib/smart_core/operation/class_constructor.rb, line 46
def inject_initializer_interface(klass, parameters)
  unless klass < SmartCore::Initializer
    klass.include(SmartCore::Initializer(type_system: parameters.type_system))
    klass.ext_init { |instance| SmartCore::Operation::InstanceBuilder.call(instance) }
  end
end