require "colorize" require "yaml" class Baguette::Context class_property verbosity = 1 end class Baguette::Configuration class Base include YAML::Serializable # Check for provided file first, # then $XDG_CONFIG_HOME/.yml, # then /etc/baguette/.yml. def self.get(file : String?) filename = "/" + (self.name.downcase.gsub /baguette::configuration::/, "") + ".yml" directory = "/baguette" suffix = "#{directory}#{filename}" user_configuration = (ENV["XDG_CONFIG_HOME"]? || "~/.config") + suffix system_configuration = "/etc#{suffix}" if ! file.nil? && ! File.exists? file.not_nil! Baguette::Log.warning "Provided configuration file does not exist: #{file}" end if ! file.nil? && File.exists? file.not_nil! Baguette::Log.info "Using configuration file: #{file}" self.from_yaml File.read(file.not_nil!) elsif File.exists? user_configuration Baguette::Log.info "Using user configuration: #{user_configuration}" self.from_yaml File.read(user_configuration) elsif File.exists? user_configuration Baguette::Log.info "Using system configuration: #{system_configuration}" self.from_yaml File.read(system_configuration) else Baguette::Log.warning "No configuration found" nil end end end end class Baguette::Log # FIXME: Use log files. # FIXME: def log(), that puts stuff as-is in the logs. def self.debug(text) return unless Baguette::Context.verbosity > 2 STDERR.puts ":: #{text}".colorize(:cyan) STDERR.flush end def self.info(text) return unless Baguette::Context.verbosity > 1 STDOUT .<<(":: ".colorize(:blue)) .<<(text.colorize(:white)) .<<("\n") STDOUT.flush end def self.title(text) return unless Baguette::Context.verbosity > 1 STDOUT .<<("|> ".colorize(:blue).bright) .<<(text.colorize(:white).bright) .<<("\n") STDOUT.flush end def self.warning(text) return unless Baguette::Context.verbosity > 0 STDERR.puts ":: #{text}".colorize(:yellow) STDERR.flush end def self.error(text) return unless Baguette::Context.verbosity > 0 STDERR.puts "!! #{text}".colorize(:red) STDERR.flush end end