module CryptCheck class Logger LEVELS = %i(trace debug info warning error fatal none) def self.level=(level) @@level = level.to_sym end self.level = ENV.fetch 'LOG', :info def self.log(level, string=nil, output: $stdout, &block) return unless enabled? level output.puts(string ? string : block.call) end if Object.respond_to? :ai def self.ap(name, object) self.debug { "#{name} : #{object.ai}" } end else def self.ap(name, object) self.debug { "#{name} : #{object}" } end end LEVELS.each do |level| class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1 def self.#{level}(string=nil, output: $stdout, &block) self.log :#{level}, string, output: output, &block end RUBY_EVAL end private def self.enabled?(level) LEVELS.index(level) >= LEVELS.index(@@level) end end end