class Lita::DefaultConfiguration

Builds the configuration object that is stored in each {Lita::Registry}. @since 4.0.0 @api private

Constants

LOG_LEVELS

Valid levels for Lita's logger.

Attributes

registry[R]

A {Registry} to extract configuration for plugins from. @return [Lita::Registry] The registry.

root[R]

The top-level {Lita::ConfigurationBuilder} attribute. @return [Lita::Configuration] The root attribute.

Public Class Methods

new(registry) click to toggle source

@param registry [Lita::Registry] The registry to build a default configuration object from.

# File lib/lita/default_configuration.rb, line 18
def initialize(registry)
  @registry = registry
  @root = ConfigurationBuilder.new

  adapters_config
  handlers_config
  http_config
  redis_config
  robot_config
end

Public Instance Methods

build() click to toggle source

Processes the {Lita::ConfigurationBuilder} object to return a {Lita::Configuration}. @return [Lita::Configuration] The built configuration object.

# File lib/lita/default_configuration.rb, line 31
def build
  final_config = root.build
  add_adapter_attribute(final_config)
  add_struct_access_to_redis(final_config.redis)
  final_config
end

Private Instance Methods

[](key) click to toggle source
Calls superclass method
# File lib/lita/default_configuration.rb, line 61
def [](key)
  deprecation_warning

  super
end
[]=(key, value) click to toggle source
Calls superclass method
# File lib/lita/default_configuration.rb, line 55
def []=(key, value)
  deprecation_warning

  super
end
adapters_config() click to toggle source

Builds config.adapters

# File lib/lita/default_configuration.rb, line 41
def adapters_config
  adapters = registry.adapters

  root.config :adapters do
    adapters.each do |key, adapter|
      combine(key, adapter.configuration_builder)
    end
  end
end
add_adapter_attribute(config) click to toggle source

Builds config.adapter

# File lib/lita/default_configuration.rb, line 52
def add_adapter_attribute(config)
  config.singleton_class.class_exec { attr_accessor :adapter }
  config.adapter = Class.new(Config) do
    def []=(key, value)
      deprecation_warning

      super
    end

    def [](key)
      deprecation_warning

      super
    end

    def method_missing(name, *args)
      deprecation_warning

      super
    end

    def deprecation_warning
      Lita.logger.warn(I18n.t("lita.config.adapter_deprecated"))
    end
    private :deprecation_warning
  end.new
end
add_struct_access_to_redis(redis) click to toggle source

Allow config.redis to be accessed as a struct, for backwards compatibility.

# File lib/lita/default_configuration.rb, line 81
def add_struct_access_to_redis(redis)
  def redis.method_missing(name, *args)
    Lita.logger.warn(I18n.t("lita.config.redis_struct_access_deprecated"))
    name_string = name.to_s
    if name_string.chomp!("=")
      self[name_string.to_sym] = args.first
    else
      self[name_string.to_sym]
    end
  end
end
deprecation_warning() click to toggle source
# File lib/lita/default_configuration.rb, line 73
def deprecation_warning
  Lita.logger.warn(I18n.t("lita.config.adapter_deprecated"))
end
handlers_config() click to toggle source

Builds config.handlers

# File lib/lita/default_configuration.rb, line 94
def handlers_config
  handlers = registry.handlers

  root.config :handlers do
    handlers.each do |handler|
      if handler.configuration_builder.children?
        combine(handler.namespace, handler.configuration_builder)
      elsif handler.respond_to?(:default_config)
        old_config = Config.new
        handler.default_config(old_config)
        config(handler.namespace, default: old_config)
      end
    end
  end
end
http_config() click to toggle source

Builds config.http

# File lib/lita/default_configuration.rb, line 111
def http_config
  root.config :http do
    config :host, type: String, default: "0.0.0.0"
    config :port, type: [Integer, String], default: 8080
    config :min_threads, type: [Integer, String], default: 0
    config :max_threads, type: [Integer, String], default: 16
    config :middleware, type: MiddlewareRegistry, default: MiddlewareRegistry.new
  end
end
method_missing(name, *args) click to toggle source
Calls superclass method
# File lib/lita/default_configuration.rb, line 67
def method_missing(name, *args)
  deprecation_warning

  super
end
redis_config() click to toggle source

Builds config.redis

# File lib/lita/default_configuration.rb, line 122
def redis_config
  root.config :redis, type: Hash, default: {}
end
robot_config() click to toggle source

Builds config.robot

# File lib/lita/default_configuration.rb, line 127
def robot_config
  root.config :robot do
    config :name, type: String, default: "Lita"
    config :mention_name, type: String
    config :alias, type: String
    config :adapter, types: [String, Symbol], default: :shell
    config :locale, types: [String, Symbol], default: I18n.locale
    config :default_locale, types: [String, Symbol], default: I18n.default_locale
    config :log_level, types: [String, Symbol], default: :info do
      validate do |value|
        unless LOG_LEVELS.include?(value.to_s.downcase.strip)
          "must be one of: #{LOG_LEVELS.join(', ')}"
        end
      end
    end
    config :log_formatter, type: Proc, default: (lambda do |severity, datetime, _progname, msg|
      "[#{datetime.utc}] #{severity}: #{msg}\n"
    end)
    config :admins
    config :error_handler, default: -> (_error) {} do
      validate do |value|
        "must respond to #call" unless value.respond_to?(:call)
      end
    end
  end
end