lib/lita.rb in lita-3.3.1 vs lib/lita.rb in lita-4.0.0.rc1
- old
+ new
@@ -12,156 +12,104 @@
require "multi_json"
require "puma"
require "rack"
require "redis-namespace"
+require_relative "lita/registry"
+
# The main namespace for Lita. Provides a global registry of adapters and
# handlers, as well as global configuration, logger, and Redis store.
module Lita
# The base Redis namespace for all Lita data.
REDIS_NAMESPACE = "lita"
class << self
- # The global registry of adapters.
- # @return [Hash] A map of adapter keys to adapter classes.
- def adapters
- @adapters ||= {}
- end
+ include Registry::Mixins
- # The global configuration object. Provides user settings for the robot.
- # @return [Lita::Config] The Lita configuration object.
- def config
- @config ||= Config.default_config
- end
+ # A special mode to ensure that tests written for Lita 3 plugins continue to work.
+ # @return [Boolean] Whether or not version 3 compatibility mode is active.
+ # @since 4.0.0
+ attr_accessor :version_3_compatibility_mode
+ alias_method :version_3_compatibility_mode?, :version_3_compatibility_mode
- # Yields the global configuration object. Called by the user in a
- # lita_config.rb file.
- # @yieldparam [Lita::Configuration] config The global configuration object.
- # @return [void]
- def configure
- yield config
- end
+ # A mode that makes minor changes to the Lita runtime to improve testability.
+ # @return [Boolean] Whether or not test mode is active.
+ # @since 4.0.0
+ attr_accessor :test_mode
+ alias_method :test_mode?, :test_mode
- # The global registry of handlers.
- # @return [Set] The set of handlers.
- def handlers
- @handlers ||= Set.new
- end
-
- # The global registry of hook handler objects.
- # @return [Hash] A hash mapping hook names to sets of objects that handle them.
- # @since 3.2.0
- def hooks
- @hooks ||= Hash.new { |h, k| h[k] = Set.new }
- end
-
# The global Logger object.
# @return [::Logger] The global Logger object.
def logger
- @logger ||= Logger.get_logger(Lita.config.robot.log_level)
+ @logger ||= Logger.get_logger(config.robot.log_level)
end
# The root Redis object.
# @return [Redis::Namespace] The root Redis object.
def redis
@redis ||= begin
redis = Redis.new(config.redis)
- Redis::Namespace.new(REDIS_NAMESPACE, redis: redis)
+ Redis::Namespace.new(REDIS_NAMESPACE, redis: redis).tap do |client|
+ begin
+ client.ping
+ rescue Redis::BaseError => e
+ Lita.logger.fatal I18n.t(
+ "lita.redis.exception",
+ message: e.message,
+ backtrace: e.backtrace.join("\n")
+ )
+ abort
+ end
+ end
end
end
- # Adds an adapter to the global registry under the provided key.
- # @param key [String, Symbol] The key that identifies the adapter.
- # @param adapter [Lita::Adapter] The adapter class.
- # @return [void]
- def register_adapter(key, adapter)
- adapters[key.to_sym] = adapter
- end
-
- # Adds a handler to the global registry.
- # @param handler [Lita::Handler] The handler class.
- # @return [void]
- def register_handler(handler)
- handlers << handler
- end
-
- # Adds a hook handler object to the global registry for the given hook.
- # @return [void]
- # @since 3.2.0
- def register_hook(name, hook)
- hooks[name.to_s.downcase.strip.to_sym] << hook
- end
-
- # Clears the global configuration object and the global adapter, handler, and hook registries.
- # @return [void]
- # @since 3.2.0
- def reset
- reset_adapters
- reset_config
- reset_handlers
- reset_hooks
- end
-
- # Resets the global adapter registry, removing all registered adapters.
- # @return [void]
- # @since 3.2.0
- def reset_adapters
- @adapters = nil
- end
-
- # Resets the global configuration object. The next call to {Lita.config}
- # will create a fresh config object.
- # @return [void]
- def reset_config
- @config = nil
- end
- alias_method :clear_config, :reset_config
-
- # Resets the global handler registry, removing all registered handlers.
- # @return [void]
- # @since 3.2.0
- def reset_handlers
- @handlers = nil
- end
-
- # Resets the global hooks registry, removing all registered hook handlers.
- # @return [void]
- # @since 3.2.0
- def reset_hooks
- @hooks = nil
- end
-
# Loads user configuration and starts the robot.
# @param config_path [String] The path to the user configuration file.
# @return [void]
def run(config_path = nil)
hooks[:before_run].each { |hook| hook.call(config_path: config_path) }
- Config.load_user_config(config_path)
- Lita.config.finalize
- self.locale = Lita.config.robot.locale
+ Configuration.load_user_config(config_path)
+ Configuration.freeze_config(config)
+ ConfigurationValidator.new(self).call
+ self.locale = config.robot.locale
Robot.new.run
end
end
end
require_relative "lita/version"
require_relative "lita/common"
+require_relative "lita/errors"
require_relative "lita/config"
+require_relative "lita/configuration"
+require_relative "lita/default_configuration"
+require_relative "lita/configuration_validator"
require_relative "lita/util"
require_relative "lita/logger"
+require_relative "lita/callback"
+require_relative "lita/configurable"
+require_relative "lita/namespace"
+require_relative "lita/handler/common"
+require_relative "lita/handler/chat_router"
+require_relative "lita/handler/http_router"
+require_relative "lita/handler/event_router"
+require_relative "lita/handler"
require_relative "lita/user"
require_relative "lita/source"
require_relative "lita/authorization"
require_relative "lita/message"
require_relative "lita/response"
+require_relative "lita/http_callback"
require_relative "lita/http_route"
require_relative "lita/rack_app"
require_relative "lita/timer"
require_relative "lita/robot"
require_relative "lita/adapter"
require_relative "lita/adapters/shell"
-require_relative "lita/handler"
+require_relative "lita/builder"
require_relative "lita/route_validator"
require_relative "lita/handlers/authorization"
require_relative "lita/handlers/help"
require_relative "lita/handlers/info"
require_relative "lita/handlers/room"
+require_relative "lita/handlers/deprecation_check"