class Console::Filter

Attributes

level[R]
options[RW]
output[RW]
subjects[R]
verbose[R]

Public Class Methods

[](**levels) click to toggle source
# File lib/console/filter.rb, line 27
def self.[] **levels
        klass = Class.new(self)
        min_level, max_level = levels.values.minmax
        
        klass.instance_exec do
                const_set(:LEVELS, levels)
                const_set(:MINIMUM_LEVEL, min_level)
                const_set(:MAXIMUM_LEVEL, max_level)
                
                levels.each do |name, level|
                        const_set(name.to_s.upcase, level)
                        
                        define_method(name) do |subject = nil, *arguments, **options, &block|
                                if self.enabled?(subject, level)
                                        self.call(subject, *arguments, severity: name, **options, **@options, &block)
                                end
                        end
                        
                        define_method("#{name}!") do
                                @level = level
                        end
                        
                        define_method("#{name}?") do
                                @level <= level
                        end
                end
        end
        
        return klass
end
new(output, verbose: true, level: self.class::DEFAULT_LEVEL, enabled: nil, **options) click to toggle source
# File lib/console/filter.rb, line 58
def initialize(output, verbose: true, level: self.class::DEFAULT_LEVEL, enabled: nil, **options)
        @output = output
        @verbose = verbose
        @level = level
        
        @subjects = {}
        
        @options = options
        
        if enabled
                enabled.each{|name| enable(name)}
        end
end

Public Instance Methods

all!() click to toggle source
# File lib/console/filter.rb, line 105
def all!
        @level = self.class::MINIMUM_LEVEL - 1
end
call(*arguments, **options, &block) click to toggle source
# File lib/console/filter.rb, line 141
def call(*arguments, **options, &block)
        @output.call(*arguments, **options, &block)
end
disable(subject) click to toggle source

Disable specific logging for the specific class. @param name [String, Class] The class to disable.

# File lib/console/filter.rb, line 133
def disable(subject)
        unless subject.is_a? Class
                subject = subject.class
        end
        
        @subjects.delete(subject)
end
enable(subject, level = self.class::MINIMUM_LEVEL) click to toggle source

Enable specific log level for the given class. @param name [String, Class] The class to enable.

# File lib/console/filter.rb, line 123
def enable(subject, level = self.class::MINIMUM_LEVEL)
        unless subject.is_a?(Class)
                subject = subject.class
        end
        
        @subjects[subject] = level
end
enabled?(subject, level = self.class::MINIMUM_LEVEL) click to toggle source

You can enable and disable logging for classes. This function checks if logging for a given subject is enabled. @param subject [Object] the subject to check.

# File lib/console/filter.rb, line 111
def enabled?(subject, level = self.class::MINIMUM_LEVEL)
        if specific_level = @subjects[subject.class]
                return level >= specific_level
        end
        
        if level >= @level
                return true
        end
end
level=(level) click to toggle source
# File lib/console/filter.rb, line 88
def level= level
        if level.is_a? Symbol
                @level = self.class::LEVELS[level]
        else
                @level = level
        end
end
off!() click to toggle source
# File lib/console/filter.rb, line 101
def off!
        @level = self.class::MAXIMUM_LEVEL + 1
end
verbose!(value = true) click to toggle source
# File lib/console/filter.rb, line 96
def verbose!(value = true)
        @verbose = value
        @output.verbose!(value)
end
with(level: @level, verbose: @verbose, **options) click to toggle source
# File lib/console/filter.rb, line 72
def with(level: @level, verbose: @verbose, **options)
        dup.tap do |logger|
                logger.level = level
                logger.verbose! if verbose
                logger.options = @options.merge(options)
        end
end