require 'concurrent' require 'dry-configurable' require 'virtus' require 'active_support' require 'active_support/notifications' require 'active_support/core_ext' if RUBY_VERSION.split('.').first == '2' require 'messaging/config_23' else require 'messaging/config' end require 'messaging/expected_version' require 'messaging/instrumentation' require 'messaging/meter' require 'messaging/exception_handler' require 'messaging/message' require 'messaging/message/from_json' if RUBY_VERSION.split('.').first == '2' require 'messaging/routing_23' else require 'messaging/routing' end require 'messaging/routes' require 'messaging/adapters' require 'messaging/middleware' require 'messaging/publish' require 'messaging/rails/railtie' if defined? ::Rails module Messaging def self.setup(&block) Config.setup(&block) end def self.config Config.config end def self.logger Config.logger end def self.consumer_adapter Adapters[Config.consumer.adapter] end def self.dispatcher Adapters::Dispatcher.default end def self.message_store Adapters::Store.default end def self.[](adapter) Adapters[adapter] end def self.routes @routes ||= Routes.new end def self.inline!(&block) routes.inline!(&block) end def self.without_dispatch(&block) current_dispatcher = Config.dispatcher.adapter Config.dispatcher.adapter = :null_adapter result = block.call ensure Config.dispatcher.adapter = current_dispatcher result end # Access the stream categories in the current message store # # @example Creating a new category # Messaging.categories.create('customer') # # @return [Messaging::Adapters::Test::Categories] when using the test adapter # @return [Messaging::Adapters::Postgres::Categories] when using the postgres adapter def self.categories message_store.categories end def self.category(name) message_store.category(name) end def self.stream(name) name = name.stream_name if name.respond_to?(:stream_name) message_store.stream(name) end def self.messages_in_streams(*streams) message_store.messages_in_streams(*streams) end def self.all_messages message_store.messages end def self.defined_messages ObjectSpace.each_object(Class).select { |c| c.included_modules.include? Messaging::Message } end def self.in_consumer_mode? File.basename($PROGRAM_NAME) == 'messaging' end end