Class: Console::Filter

Inherits:
Object
  • Object
show all
Defined in:
lib/console/filter.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(output, verbose: true, level: self.class::DEFAULT_LEVEL, enabled: nil, **options) ⇒ Filter

Returns a new instance of Filter.


57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/console/filter.rb', line 57

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

Instance Attribute Details

#levelObject

Returns the value of attribute level


81
82
83
# File 'lib/console/filter.rb', line 81

def level
  @level
end

#optionsObject

Returns the value of attribute options


85
86
87
# File 'lib/console/filter.rb', line 85

def options
  @options
end

#outputObject

Returns the value of attribute output


79
80
81
# File 'lib/console/filter.rb', line 79

def output
  @output
end

#subjectsObject (readonly)

Returns the value of attribute subjects


83
84
85
# File 'lib/console/filter.rb', line 83

def subjects
  @subjects
end

#verboseObject (readonly)

Returns the value of attribute verbose


80
81
82
# File 'lib/console/filter.rb', line 80

def verbose
  @verbose
end

Class Method Details

.[](**levels) ⇒ Object


27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/console/filter.rb', line 27

def self.[] **levels
	klass = Class.new(self)
	
	klass.instance_exec do
		const_set(:LEVELS, levels)
		const_set(:MINIMUM_LEVEL, levels.values.min)
		const_set(:MAXIMUM_LEVEL, levels.values.max)
		
		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

Instance Method Details

#all!Object


104
105
106
# File 'lib/console/filter.rb', line 104

def all!
	@level = -1
end

#call(*arguments, **options, &block) ⇒ Object


140
141
142
# File 'lib/console/filter.rb', line 140

def call(*arguments, **options, &block)
	@output.call(*arguments, **options, &block)
end

#disable(subject) ⇒ Object

Disable specific logging for the specific class.

Parameters:

  • name (String, Class)

    The class to disable.


132
133
134
135
136
137
138
# File 'lib/console/filter.rb', line 132

def disable(subject)
	unless subject.is_a? Class
		subject = subject.class
	end
	
	@subjects.delete(subject)
end

#enable(subject, level = self.class::MINIMUM_LEVEL) ⇒ Object

Enable specific log level for the given class.

Parameters:

  • name (String, Class)

    The class to enable.


122
123
124
125
126
127
128
# File 'lib/console/filter.rb', line 122

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) ⇒ Boolean

You can enable and disable logging for classes. This function checks if logging for a given subject is enabled.

Parameters:

  • subject (Object)

    the subject to check.

Returns:

  • (Boolean)

110
111
112
113
114
115
116
117
118
# File 'lib/console/filter.rb', line 110

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

#off!Object


100
101
102
# File 'lib/console/filter.rb', line 100

def off!
	@level = self.class::MAXIMUM_LEVEL + 1
end

#verbose!(value = true) ⇒ Object


95
96
97
98
# File 'lib/console/filter.rb', line 95

def verbose!(value = true)
	@verbose = value
	@output.verbose!(value)
end

#with(level: @level, verbose: @verbose, **options) ⇒ Object


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

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