baguette-crystal-base/src/baguette-crystal-base.cr

81 lines
2.1 KiB
Crystal

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/<class>.yml,
# then /etc/baguette/<class>.yml.
def self.get(file : String? = nil)
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