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)



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)



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

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

#identity_strategySymbol (readonly)



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

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

#identity_strategy_classString? (readonly)



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

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

#task_config_directoryString (readonly)



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

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

#task_handler_directoryString (readonly)



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



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.



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

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.



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