Module: Logg::Machine

Defined in:
lib/logg/core.rb

Overview

The Er module, when mixed-in a class, instantiates a Dispatcher and performs some simple meta-programming on this receiver to add support for the logger. It thus enable the receiver to use the logger’s default implementation and/or define custom loggers.

Defined Under Namespace

Modules: RedefInit

Constant Summary collapse

LOGGER =
Logg::Dispatcher.new
NAME =

NAME = (defined?(::Logg::LOG_METHOD) && ::Logg::LOG_METHOD) || :log

:log

Class Method Summary collapse

Class Method Details

.included(base) ⇒ Object



187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
# File 'lib/logg/core.rb', line 187

def self.included(base)
  if !base.respond_to?(NAME)
    base.instance_eval do
      # Memoized logger for the receiver's class.
      #
      # TODO: add support for defining the logger under a different name than #log,
      # this means either defining a constant before mixin, or delaying the metaprog.
      class << self; self; end.instance_eval do
        define_method(NAME) do
          @@_logg_er ||= LOGGER
        end
      end
    end
  else
    raise RuntimeError, "Cannot mixin Logg::Er as #{base}#logger, method's already defined."
  end

  # Memoized logger for the receiver.
  base.extend RedefInit
end