Class: Fractor::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/fractor/configuration.rb

Overview

Central configuration management for Fractor. Provides a unified way to configure all Fractor components.

Examples:

Basic configuration

Fractor.configure do |config|
  config.logger = Logger.new(STDOUT)
  config.debug = true
  config.default_worker_timeout = 30
end

Loading from YAML file

Fractor.configure_from_file("config/fractor.yml")

Environment variable support

# Set FRACTOR_DEBUG=true to enable debug mode
Fractor.config.debug # => true

Constant Summary collapse

DEFAULTS =

Default configuration values

{
  debug: false,
  log_level: Logger::INFO,
  default_worker_timeout: 120,
  default_max_retries: 3,
  default_retry_delay: 1,
  enable_performance_monitoring: false,
  enable_error_reporting: false,
  ractor_pool_size: nil, # nil = auto-detect (CPU count)
  workflow_validation_strict: true,
  thread_safe: true,
}.freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfiguration

Initialize a new configuration with default values.



201
202
203
# File 'lib/fractor/configuration.rb', line 201

def initialize
  apply_defaults
end

Instance Attribute Details

#debugObject

Other configuration attributes



60
61
62
# File 'lib/fractor/configuration.rb', line 60

def debug
  @debug
end

#default_max_retriesObject

Other configuration attributes



60
61
62
# File 'lib/fractor/configuration.rb', line 60

def default_max_retries
  @default_max_retries
end

#default_retry_delayObject

Other configuration attributes



60
61
62
# File 'lib/fractor/configuration.rb', line 60

def default_retry_delay
  @default_retry_delay
end

#default_worker_timeoutObject

Other configuration attributes



60
61
62
# File 'lib/fractor/configuration.rb', line 60

def default_worker_timeout
  @default_worker_timeout
end

#enable_error_reportingObject

Other configuration attributes



60
61
62
# File 'lib/fractor/configuration.rb', line 60

def enable_error_reporting
  @enable_error_reporting
end

#enable_performance_monitoringObject

Other configuration attributes



60
61
62
# File 'lib/fractor/configuration.rb', line 60

def enable_performance_monitoring
  @enable_performance_monitoring
end

#log_levelObject

Other configuration attributes



60
61
62
# File 'lib/fractor/configuration.rb', line 60

def log_level
  @log_level
end

#ractor_pool_sizeObject

Other configuration attributes



60
61
62
# File 'lib/fractor/configuration.rb', line 60

def ractor_pool_size
  @ractor_pool_size
end

#thread_safeObject

Other configuration attributes



60
61
62
# File 'lib/fractor/configuration.rb', line 60

def thread_safe
  @thread_safe
end

#workflow_validation_strictObject

Other configuration attributes



60
61
62
# File 'lib/fractor/configuration.rb', line 60

def workflow_validation_strict
  @workflow_validation_strict
end

Class Method Details

.apply_config(config_hash) ⇒ Object

Load configuration from a hash.

Parameters:

  • config_hash (Hash)

    Configuration options



120
121
122
123
124
125
126
127
128
129
130
131
# File 'lib/fractor/configuration.rb', line 120

def apply_config(config_hash)
  return if config_hash.nil? || config_hash.empty?

  config_hash.each do |key, value|
    setter = "#{key}="
    if instance.respond_to?(setter)
      instance.public_send(setter, value)
    else
      warn "Unknown configuration option: #{key}"
    end
  end
end

.configObject

Access configuration properties directly on Fractor.



172
173
174
# File 'lib/fractor/configuration.rb', line 172

def config
  instance
end

.configure {|Configuration| ... } ⇒ Object

Configure Fractor with a block.

Examples:

Fractor.configure do |config|
  config.debug = true
  config.logger = custom_logger
end

Yields:



90
91
92
93
# File 'lib/fractor/configuration.rb', line 90

def configure
  yield instance if block_given?
  instance
end

.configure_from_envObject

Load configuration from environment variables. Environment variables should be prefixed with FRACTOR_.

Examples:

# Set environment variable
# export FRACTOR_DEBUG=true
# export FRACTOR_DEFAULT_WORKER_TIMEOUT=60

Fractor.configure_from_env


142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
# File 'lib/fractor/configuration.rb', line 142

def configure_from_env
  env_config = {}

  ENV.each do |key, value|
    next unless key.start_with?("FRACTOR_")

    config_key = key.sub(/^FRACTOR_/, "").downcase
    config_key = underscore_to_camelcase(config_key)

    # Convert string values to appropriate types
    typed_value = parse_env_value(value)
    env_config[config_key] = typed_value
  end

  apply_config(env_config)
end

.configure_from_file(file_path) ⇒ Object

Load configuration from a YAML file.

Examples:

# config/fractor.yml
debug: true
log_level: DEBUG
default_worker_timeout: 60

Fractor.configure_from_file("config/fractor.yml")

Parameters:

  • file_path (String)

    Path to the YAML configuration file

Raises:



108
109
110
111
112
113
114
115
# File 'lib/fractor/configuration.rb', line 108

def configure_from_file(file_path)
  unless File.exist?(file_path)
    raise ArgumentError, "Configuration file not found: #{file_path}"
  end

  config_data = YAML.load_file(file_path)
  apply_config(config_data)
end

.instanceConfiguration

Get the global configuration instance.

Returns:



73
74
75
76
77
78
79
# File 'lib/fractor/configuration.rb', line 73

def instance
  return @instance if @instance

  @mutex.synchronize do
    @instance ||= new
  end
end

.reset!Object

Reset configuration to defaults. Useful for testing.



161
162
163
164
165
# File 'lib/fractor/configuration.rb', line 161

def reset!
  @mutex.synchronize do
    @instance = new
  end
end

Instance Method Details

#[](key) ⇒ Object

Get a configuration value by key.

Parameters:

  • key (Symbol)

    The configuration key

Returns:

  • (Object)

    The configuration value



209
210
211
# File 'lib/fractor/configuration.rb', line 209

def [](key)
  public_send(key) if respond_to?(key)
end

#[]=(key, value) ⇒ Object

Set a configuration value by key.

Parameters:

  • key (Symbol)

    The configuration key

  • value (Object)

    The value to set



217
218
219
220
# File 'lib/fractor/configuration.rb', line 217

def []=(key, value)
  setter = "#{key}="
  public_send(setter, value) if respond_to?(setter)
end

#debug_enabled?Boolean

Check if debug logging is enabled.

Returns:

  • (Boolean)

    true if debug is enabled



55
56
57
# File 'lib/fractor/configuration.rb', line 55

def debug_enabled?
  debug && logger&.debug?
end

#loggerLogger

Get the logger instance (creates default if not set).

Returns:

  • (Logger)

    The logger instance



41
42
43
# File 'lib/fractor/configuration.rb', line 41

def logger
  @logger ||= create_default_logger
end

#logger=(logger_instance) ⇒ Object

Set the logger instance.

Parameters:

  • logger_instance (Logger)

    The logger to use



48
49
50
# File 'lib/fractor/configuration.rb', line 48

def logger=(logger_instance)
  @logger = logger_instance
end

#to_hHash

Export configuration as hash.

Returns:

  • (Hash)

    Configuration as hash



225
226
227
228
229
230
231
232
233
234
235
236
237
238
# File 'lib/fractor/configuration.rb', line 225

def to_h
  {
    debug: @debug,
    log_level: @log_level,
    default_worker_timeout: @default_worker_timeout,
    default_max_retries: @default_max_retries,
    default_retry_delay: @default_retry_delay,
    enable_performance_monitoring: @enable_performance_monitoring,
    enable_error_reporting: @enable_error_reporting,
    ractor_pool_size: @ractor_pool_size,
    workflow_validation_strict: @workflow_validation_strict,
    thread_safe: @thread_safe,
  }
end

#validate!Boolean

Validate configuration.

Returns:

  • (Boolean)

    true if valid

Raises:



244
245
246
247
248
249
# File 'lib/fractor/configuration.rb', line 244

def validate!
  validate_timeouts!
  validate_retries!
  validate_pool_size!
  true
end