Class: Tasker::Types::EngineConfig

Inherits:
BaseConfig
  • Object
show all
Defined in:
lib/tasker/types/engine_config.rb

Overview

Configuration type for core engine settings

This configuration handles core Tasker engine settings including task handler directories, identity strategies, and custom event configurations. It provides the same functionality as the original EngineConfiguration but with dry-struct type safety and immutability.

Examples:

Basic usage

config = EngineConfig.new(
  task_handler_directory: 'app/tasks',
  identity_strategy: :hash
)

Full configuration

config = EngineConfig.new(
  task_handler_directory: 'app/tasks',
  task_config_directory: 'config/tasks',
  default_module_namespace: 'MyApp::Tasks',
  identity_strategy: :custom,
  identity_strategy_class: 'MyApp::CustomIdentityStrategy',
  custom_events_directories: ['config/events', 'lib/events']
)

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from BaseConfig

#initialize

Constructor Details

This class inherits a constructor from Tasker::Types::BaseConfig

Instance Attribute Details

#custom_events_directoriesArray<String> (readonly)

Returns Custom event directories.

Returns:

  • (Array<String>)

    Custom event directories



64
65
66
# File 'lib/tasker/types/engine_config.rb', line 64

attribute :custom_events_directories, Types::Array.of(Types::String).default(proc {
  default_custom_events_directories
}.freeze, shared: true)

#default_module_namespaceString? (readonly)

Returns Default module namespace for generated handlers.

Returns:

  • (String, nil)

    Default module namespace for generated handlers



46
# File 'lib/tasker/types/engine_config.rb', line 46

attribute? :default_module_namespace, Types::String.optional.default(nil)

#identity_strategySymbol (readonly)

Returns Identity strategy (:default, :hash, :custom).

Returns:

  • (Symbol)

    Identity strategy (:default, :hash, :custom)



52
# File 'lib/tasker/types/engine_config.rb', line 52

attribute :identity_strategy, Types::Symbol.default(:default)

#identity_strategy_classString? (readonly)

Returns Custom identity strategy class name.

Returns:

  • (String, nil)

    Custom identity strategy class name



58
# File 'lib/tasker/types/engine_config.rb', line 58

attribute? :identity_strategy_class, Types::String.optional.default(nil)

#task_config_directoryString (readonly)

Returns Task configuration directory path.

Returns:

  • (String)

    Task configuration directory path



40
# File 'lib/tasker/types/engine_config.rb', line 40

attribute :task_config_directory, Types::String.default('tasker/tasks')

#task_handler_directoryString (readonly)

Returns Task handler directory path.

Returns:

  • (String)

    Task handler directory path



34
# File 'lib/tasker/types/engine_config.rb', line 34

attribute :task_handler_directory, Types::String.default('tasks')

Class Method Details

.default_custom_events_directoriesArray<String>

Get default custom events directories

Returns:

  • (Array<String>)

    Default directories to search for custom events



71
72
73
74
75
# File 'lib/tasker/types/engine_config.rb', line 71

def self.default_custom_events_directories
  [
    'config/tasker/events'
  ].freeze
end

Instance Method Details

#add_custom_events_directories(*directories) ⇒ EngineConfig

Add custom event directories to the existing configuration

Since dry-struct types are immutable, this returns a new instance.

Parameters:

  • directories (Array<String>)

    Additional directories to search for events

Returns:



108
109
110
111
# File 'lib/tasker/types/engine_config.rb', line 108

def add_custom_events_directories(*directories)
  new_directories = (custom_events_directories + directories.flatten).uniq
  self.class.new(to_h.merge(custom_events_directories: new_directories))
end

#identity_strategy_instanceTasker::IdentityStrategy

Creates and returns an appropriate identity strategy instance

Returns:

Raises:

  • (ArgumentError)

    If an invalid strategy is specified



81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/tasker/types/engine_config.rb', line 81

def identity_strategy_instance
  case identity_strategy
  when :default
    Tasker::IdentityStrategy.new
  when :hash
    Tasker::HashIdentityStrategy.new
  when :custom
    if identity_strategy_class.nil?
      raise ArgumentError, 'Custom identity strategy selected but no identity_strategy_class provided'
    end

    begin
      identity_strategy_class.constantize.new
    rescue NameError => e
      raise ArgumentError, "Invalid identity_strategy_class: #{e.message}"
    end
  else
    raise ArgumentError, "Unknown identity_strategy: #{identity_strategy}"
  end
end

#set_custom_events_directories(directories) ⇒ EngineConfig

Set custom event directories (replaces the default list)

Since dry-struct types are immutable, this returns a new instance.

Parameters:

  • directories (Array<String>)

    Directories to search for events

Returns:



119
120
121
# File 'lib/tasker/types/engine_config.rb', line 119

def set_custom_events_directories(directories)
  self.class.new(to_h.merge(custom_events_directories: directories.flatten))
end