Sha256: 09165dc0788367af7440935631de7a50afa7c20e51f278cc56388e0e45e5629f

Contents?: true

Size: 2 KB

Versions: 4

Compression:

Stored size: 2 KB

Contents

module Lumber

  module InheritanceRegistry
    extend MonitorMixin
    extend self

    @mapping = {}

    def []=(class_name, logger_fullname)
      synchronize do
        @mapping[class_name] = logger_fullname
      end
    end

    def [](class_name)
      synchronize do
        @mapping[class_name]
      end
    end

    def clear
      synchronize do
        @mapping.clear
      end
    end

    def find_registered_logger(clazz)
      synchronize do
        return nil unless clazz
        logger_name = self[clazz.name]
        logger_name || find_registered_logger(clazz.superclass)
      end
    end

    def remove_inheritance_handler
      synchronize do

        return unless defined?(Object.inherited_with_lumber_registry)

        Object.class_eval do
          class << self
            remove_method :inherited_with_lumber_registry
            remove_method :inherited
            alias_method :inherited, :inherited_without_lumber_registry
          end
        end

      end
    end

    # Adds a inheritance handler to Object so we can add loggers for registered classes
    def register_inheritance_handler
      synchronize do

        return if defined?(Object.inherited_with_lumber_registry)

        Object.class_eval do

          class << self

            def inherited_with_lumber_registry(subclass)
              inherited_without_lumber_registry(subclass)

              # Add a logger to 'subclass' if it is directly in the registry
              # No need to check full inheritance chain LoggerSupport handles it
              # Also prevent rails from subsequently overriding our logger when rails
              # is loaded after registering logger inheritance
              if Lumber::InheritanceRegistry[subclass.name]
                subclass.send(:include, Lumber::LoggerSupport)
                subclass.send(:include, Lumber::PreventRailsOverride)
              end
            end

            alias_method_chain :inherited, :lumber_registry

          end

        end

      end
    end

  end

end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
lumber-1.1.3 lib/lumber/inheritance_registry.rb
lumber-1.1.2 lib/lumber/inheritance_registry.rb
lumber-1.1.1 lib/lumber/inheritance_registry.rb
lumber-1.1.0 lib/lumber/inheritance_registry.rb