Class: Gaskit::Configuration

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

Overview

Gaskit::Configuration holds global configuration for the Gaskit gem.

It allows customization of logging behavior, including:

  • Log level (‘log_level`)

  • Custom logger (‘logger`)

  • Disabling logging entirely (‘disable_logging`)

  • Structured or custom log formatting (‘log_formatter`)

  • Debug mode (‘debug`)

Examples:

Configuring Gaskit in an initializer

Gaskit.config do |c|
  c.debug = true
  c.disable_logging = false

  c.context_provider = -> {
    {
      tenant_id: Current.tenant_id,
      user_id: Current.user_id
    }
  }

  # Optionally replace the logger
  custom_logger = Logger.new("log/gaskit.log")
  c.setup_logger(custom_logger, level: :info, formatter: ->(severity, time, _progname, msg) {
    message, context = msg.is_a?(Array) ? msg : [msg, {}]
    "[#{time.strftime('%Y-%m-%d %H:%M:%S')} #{severity}] #{message} (#{context.inspect})\n"
  })
end

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfiguration

Initializes the configuration with default settings.

The configuration includes:

  • Default environment set to ‘“development”`

  • Debug mode disabled

  • Logging to stdout

  • Default log level set to ::Logger::DEBUG

  • An empty base context hash

  • A new ‘ContractRegistry` instance for contract management



59
60
61
62
63
64
65
66
67
# File 'lib/gaskit/configuration.rb', line 59

def initialize
  @debug = false
  @disable_logging = false
  @context_provider = -> { {} }
  @contract_registry = ContractRegistry.new
  @hook_registry = HookRegistry.new

  setup_logger
end

Instance Attribute Details

#context_providerObject

@return A callable to apply a global context used for all log entries.



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

def context_provider
  @context_provider
end

#debugBoolean

Returns Whether debug mode is enabled.

Returns:

  • (Boolean)

    Whether debug mode is enabled.



39
40
41
# File 'lib/gaskit/configuration.rb', line 39

def debug
  @debug
end

#disable_loggingBoolean

Returns Whether to completely suppress log output.

Returns:

  • (Boolean)

    Whether to completely suppress log output.



42
43
44
# File 'lib/gaskit/configuration.rb', line 42

def disable_logging
  @disable_logging
end

#loggerLogger (readonly)

Returns The logger instance used internally by Gaskit.

Returns:

  • (Logger)

    The logger instance used internally by Gaskit.



45
46
47
# File 'lib/gaskit/configuration.rb', line 45

def logger
  @logger
end

Instance Method Details

#contractsGaskit::ContractRegistry

Returns the ContractRegistry instance.

Returns:



114
115
116
# File 'lib/gaskit/configuration.rb', line 114

def contracts
  @contract_registry
end

#hooksGaskit::HookRegistry

Returns the HookRegistry instance.

Returns:



121
122
123
# File 'lib/gaskit/configuration.rb', line 121

def hooks
  @hook_registry
end

#log_formatter=(formatter) ⇒ Object

Sets a custom log formatter.

Parameters:

  • formatter (#call)

    A callable object that receives log arguments (severity, time, progname, msg).

Raises:

  • (ArgumentError)

    If the provided formatter is not callable.



95
96
97
98
99
# File 'lib/gaskit/configuration.rb', line 95

def log_formatter=(formatter)
  raise ArgumentError, "Formatter must be callable" unless formatter.respond_to?(:call)

  @logger.formatter = formatter
end

#log_level=(level) ⇒ Object

Sets the logging level.

Parameters:

  • level (Symbol, Integer)

    The log level (e.g., :info, :debug, or Logger::WARN).

Raises:

  • (NameError)

    If the provided level is a symbol, and it does not map to a valid Logger constant.



86
87
88
89
# File 'lib/gaskit/configuration.rb', line 86

def log_level=(level)
  level = ::Logger.const_get(level.upcase) if level.is_a?(Symbol)
  @logger.level = level
end

#setup_logger(custom_logger = nil, level: :debug, formatter: nil) ⇒ Object

Sets the logger, formatter, and level in one go.

Parameters:

  • custom_logger (::Logger, nil) (defaults to: nil)

    An optional custom logger.

  • level (Symbol, Integer) (defaults to: :debug)

    Log level (e.g., :debug, Logger::WARN)

  • formatter (Proc) (defaults to: nil)

    Custom formatter for log entries.



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

def setup_logger(custom_logger = nil, level: :debug, formatter: nil)
  @logger = custom_logger || ::Logger.new($stdout)

  effective_formatter = formatter || @logger&.formatter || Gaskit::Logger.formatter(:pretty)
  self.log_formatter = effective_formatter if effective_formatter.respond_to?(:call)
  self.log_level = level
end