Class: ExtendedLogger::Registry

Inherits:
Module
  • Object
show all
Defined in:
lib/extended_logger/registry.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(logger_class, sink, attr_name) ⇒ Registry

Returns a new instance of Registry.



7
8
9
10
11
# File 'lib/extended_logger/registry.rb', line 7

def initialize logger_class, sink, attr_name
  @attr_name = attr_name
  @logger_class = logger_class
  @sink = sink
end

Instance Attribute Details

#attr_nameObject (readonly)

Returns the value of attribute attr_name.



3
4
5
# File 'lib/extended_logger/registry.rb', line 3

def attr_name
  @attr_name
end

#logger_classObject (readonly)

Returns the value of attribute logger_class.



4
5
6
# File 'lib/extended_logger/registry.rb', line 4

def logger_class
  @logger_class
end

#sinkObject (readonly)

Returns the value of attribute sink.



5
6
7
# File 'lib/extended_logger/registry.rb', line 5

def sink
  @sink
end

Class Method Details

.build(logger_class, attr_name: nil, **sink_arguments) ⇒ Object



13
14
15
16
17
18
19
20
21
# File 'lib/extended_logger/registry.rb', line 13

def self.build logger_class, attr_name: nil, **sink_arguments
  attr_name ||= :logger

  sink = logger_class.sink **sink_arguments

  instance = new logger_class, sink, attr_name
  instance.send :const_set, :Logger, logger_class
  instance
end

Instance Method Details

#build_logger(key) ⇒ Object



23
24
25
26
27
# File 'lib/extended_logger/registry.rb', line 23

def build_logger key
  logger = logger_class.new sink
  logger.label = key.name
  logger
end

#cacheObject



29
30
31
32
33
# File 'lib/extended_logger/registry.rb', line 29

def cache
  @cache ||= Hash.new do |cache, key|
    cache[key] = build_logger key
  end
end

#clearObject



35
36
37
# File 'lib/extended_logger/registry.rb', line 35

def clear
  cache.clear
end

#extended(object) ⇒ Object



67
68
69
# File 'lib/extended_logger/registry.rb', line 67

def extended object
  included object.singleton_class
end

#get(receiver = nil) ⇒ Object



71
72
73
74
75
76
77
# File 'lib/extended_logger/registry.rb', line 71

def get receiver=nil
  receiver ||= TOPLEVEL_BINDING.receiver

  key = self.key receiver

  cache[key]
end

#included(cls) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/extended_logger/registry.rb', line 39

def included cls
  cls.class_exec self do |registry|
    ivar_name = "@#{registry.attr_name}"
    cvar_name = "@@#{registry.attr_name}"

    attr_writer registry.attr_name

    define_method registry.attr_name do
      if instance_variable_defined? ivar_name
        return instance_variable_get ivar_name
      end

      if self.is_a? Module
        target = self
      else
        target = self.class
      end

      if target.class_variable_defined? cvar_name
        return target.class_variable_get cvar_name
      end

      logger = registry.get self
      self.class.class_variable_set cvar_name, logger
    end
  end
end

#key(receiver) ⇒ Object



79
80
81
82
83
84
85
# File 'lib/extended_logger/registry.rb', line 79

def key receiver
  if receiver.is_a? Module
    receiver
  else
    receiver.class
  end
end

#levelObject



87
88
89
# File 'lib/extended_logger/registry.rb', line 87

def level
  sink.level
end

#level=(reference) ⇒ Object



91
92
93
# File 'lib/extended_logger/registry.rb', line 91

def level= reference
  sink.level = levels.resolve reference
end

#levelsObject



95
96
97
# File 'lib/extended_logger/registry.rb', line 95

def levels
  sink.levels
end

#lower_verbosityObject



99
100
101
# File 'lib/extended_logger/registry.rb', line 99

def lower_verbosity
  sink.lower_verbosity
end

#raise_verbosityObject



103
104
105
# File 'lib/extended_logger/registry.rb', line 103

def raise_verbosity
  sink.raise_verbosity
end

#set(receiver, value) ⇒ Object



107
108
109
110
111
# File 'lib/extended_logger/registry.rb', line 107

def set receiver, value
  key = self.key receiver

  cache[key] = value
end