module CryptCheck class Logger LEVELS = %i(trace debug info warning error fatal none) @@level = :info def self.level=(level) @@level = level end def self.log(level, string=nil, output: $stdout, &block) return unless enabled? level output.puts(string ? string : block.call) 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