Class: Console::Resolver
- Inherits:
-
Object
- Object
- Console::Resolver
- Defined in:
- lib/console/resolver.rb
Class Method Summary collapse
-
.default_resolver(logger, env = ENV) ⇒ Object
You can change the log level for different classes using CONSOLE_<LEVEL> env vars.
Instance Method Summary collapse
- #bind(names, &block) ⇒ Object
-
#initialize ⇒ Resolver
constructor
A new instance of Resolver.
- #resolve(trace_point) ⇒ Object
- #waiting? ⇒ Boolean
Constructor Details
#initialize ⇒ Resolver
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
77 78 79 |
# File 'lib/console/resolver.rb', line 77 def waiting? @trace_point.enabled? end |