Class: Logbert::LevelManager

Inherits:
Module
  • Object
show all
Defined in:
lib/logbert/levels.rb

Overview

This class doubles as a mixin. Bazinga!

Instance Method Summary collapse

Constructor Details

#initializeLevelManager

Returns a new instance of LevelManager.



33
34
35
36
37
38
39
40
# File 'lib/logbert/levels.rb', line 33

def initialize
  @level_to_aliases = {}

  @quick_lookup   = {}
  
  Logbert::DefaultLevels.each{|name, value| self.define_level(name, value)}
  self.alias_level :warn, :warning
end

Instance Method Details

#alias_level(alias_name, level) ⇒ Object

Raises:

  • (ArgumentError)


73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/logbert/levels.rb', line 73

def alias_level(alias_name, level)
  raise ArgumentError, "The Level alias must implement #to_sym: #{alias_name}" unless alias_name.respond_to? :to_sym
  
  alias_name = alias_name.to_sym
  
  preexisting_level = @quick_lookup[alias_name]
  if preexisting_level
    raise KeyError, "The alias is already taken: #{alias_name} -> #{preexisting_level}"
  end
  
  level = self.level_for!(level, false)

  @level_to_aliases[level] << alias_name
  @quick_lookup[alias_name] = level
  
  alias_method alias_name, level.name
  alias_method "#{alias_name}?", "#{level.name}?"
  
  return level
end

#aliases_for(level) ⇒ Object



47
48
49
50
# File 'lib/logbert/levels.rb', line 47

def aliases_for(level)
  level = self.level_for(level)
  @level_to_aliases.fetch(level)
end

#define_level(name, value) ⇒ Object

Raises:

  • (ArgumentError)


52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/logbert/levels.rb', line 52

def define_level(name, value)
  raise ArgumentError, "The Level's name must implement #to_sym" unless name.respond_to? :to_sym
  raise ArgumentError, "The Level's value must be an Integer" unless value.is_a? Integer
  
  name = name.to_sym
  
  raise KeyError, "A Level with that name is already defined:  #{name}"  if @quick_lookup.has_key? name
  raise KeyError, "A Level with that value is already defined: #{value}" if @quick_lookup.has_key? value
  
  level = Level.new(name, value)

  @quick_lookup[name] = @quick_lookup[value] = @quick_lookup[level] = level
  @level_to_aliases[level] = [name]
  
  self.create_logging_method(name)
  self.create_predicate_method(name, value)
  
  return level
end

#level_for(x, allow_virtual_levels = true) ⇒ Object Also known as: []



95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/logbert/levels.rb', line 95

def level_for(x, allow_virtual_levels = true)
  @quick_lookup[x] or begin
    if x.is_a? Integer
      return Logbert::Level.new("LEVEL_#{x}".to_sym, x) if allow_virtual_levels
    elsif x.respond_to? :to_sym
      level = @quick_lookup[x.to_sym]
      return level if level
    end

    nil
  end
end

#level_for!(x, allow_virtual_levels = true) ⇒ Object



108
109
110
# File 'lib/logbert/levels.rb', line 108

def level_for!(x, allow_virtual_levels = true)
  self.level_for(x, allow_virtual_levels) or raise KeyError, "No Level could be found for input: #{x}"
end

#levelsObject



43
44
45
# File 'lib/logbert/levels.rb', line 43

def levels
  @level_to_aliases.keys
end