Class: Console::Resolver

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

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeResolver

Returns a new instance of Resolver.



55
56
57
58
59
# File 'lib/console/resolver.rb', line 55

def initialize
	@names = {}
	
	@trace_point = TracePoint.new(:class, &self.method(:resolve))
end

Class Method Details

.default_resolver(logger, env = ENV) ⇒ Object

You can change the log level for different classes using CONSOLE_<LEVEL> env vars.

e.g. ‘CONSOLE_WARN=Acorn,Banana CONSOLE_DEBUG=Cat` will set the log level for the classes Acorn and Banana to warn and Cat to debug. This overrides the default log level.



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/console/resolver.rb', line 34

def self.default_resolver(logger, env = ENV)
	# Find all CONSOLE_<LEVEL> variables from environment:
	levels = Logger::LEVELS
		.map{|label, level| [level, env["CONSOLE_#{label.upcase}"]&.split(',')]}
		.to_h
		.compact
	
	# If we have any levels, then create a class resolver, and each time a class is resolved, set the log level for that class to the specified level:
	if levels.any?
		resolver = Resolver.new
		
		levels.each do |level, names|
			resolver.bind(names) do |klass|
				logger.enable(klass, level)
			end
		end
		
		return resolver
	end
end

Instance Method Details

#bind(names, &block) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/console/resolver.rb', line 61

def bind(names, &block)
	names.each do |name|
		if klass = Object.const_get(name) rescue nil
			yield klass
		else
			@names[name] = block
		end
	end
	
	if @names.any?
		@trace_point.enable
	else
		@trace_point.disable
	end
end

#resolve(trace_point) ⇒ Object



81
82
83
84
85
86
87
88
89
# File 'lib/console/resolver.rb', line 81

def resolve(trace_point)
	if block = @names.delete(trace_point.self.to_s)
		block.call(trace_point.self)
	end
	
	if @names.empty?
		@trace_point.disable
	end
end

#waiting?Boolean

Returns:

  • (Boolean)


77
78
79
# File 'lib/console/resolver.rb', line 77

def waiting?
	@trace_point.enabled?
end