Class: Logbert::LevelManager
- Inherits:
-
Module
- Object
- Module
- Logbert::LevelManager
- Defined in:
- lib/logbert/levels.rb
Overview
This class doubles as a mixin. Bazinga!
Instance Method Summary collapse
- #alias_level(alias_name, level) ⇒ Object
- #aliases_for(level) ⇒ Object
- #define_level(name, value) ⇒ Object
-
#initialize ⇒ LevelManager
constructor
A new instance of LevelManager.
- #level_for(x, allow_virtual_levels = true) ⇒ Object (also: #[])
- #level_for!(x, allow_virtual_levels = true) ⇒ Object
- #levels ⇒ Object
Constructor Details
#initialize ⇒ LevelManager
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
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
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 |
#levels ⇒ Object
43 44 45 |
# File 'lib/logbert/levels.rb', line 43 def levels @level_to_aliases.keys end |