From 36bba1cacd2353d97f26ade5aeeca01a3ce9a4cb Mon Sep 17 00:00:00 2001 From: Paul Duncan Date: Sat, 5 Mar 2016 18:39:03 -0500 Subject: initial commit --- src/guff/config.cr | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/guff/version.cr | 3 ++ 2 files changed, 101 insertions(+) create mode 100644 src/guff/config.cr create mode 100644 src/guff/version.cr (limited to 'src/guff') diff --git a/src/guff/config.cr b/src/guff/config.cr new file mode 100644 index 0000000..6021c63 --- /dev/null +++ b/src/guff/config.cr @@ -0,0 +1,98 @@ +require "option_parser" + +module Guff + class Config + DEFAULTS = { + "host": "localhost", + "port": "8989", + "data": "./data", + "public": "./public", + "environment": "development", + } + + DIRS = %w{ + data + public + } + + def initialize(app, args) + @data = defaults + parse_args(app, args) + end + + def [](key : String) : String + @data[key] + end + + def []=(key : String, val : String | Nil) : String + @data[key] = val + end + + private def defaults : Hash(String, String) + DEFAULTS.merge(DEFAULTS.keys.reduce({} of String => String) do |r, key| + env_key = "GUFF_" + key.upcase + r[key] = ENV[env_key] if ENV.has_key?(env_key) + r + end) + end + + private def parse_args(app, args) + OptionParser.parse(args) do |p| + p.on( + "-h HOST", + "--host HOST", + "Host (defaults to \"localhost\")." + ) do |host| + self["host"] = host + end + + p.on( + "-p PORT", + "--port PORT", + "Port (defaults to 8989)." + ) do |port| + self["port"] = port + end + + p.on( + "-d PATH", + "--data-dir PATH", + "Path to data directory (defaults to \"./data\")." + ) do |path| + self["data"] = path + end + + p.on( + "-u PATH", + "--public-dir PATH", + "Path to public directory (defaults to \"./public\")." + ) do |path| + self["public"] = path + end + + p.on( + "-e ENV", + "--environment ENV", + "Environment (defaults to \"development\")." + ) do |path| + self["public"] = path + end + + + p.on( + "--help", + "Print usage" + ) do + puts p.to_s + end + end + + # expand output directory paths and create them + %w{data public}.each do |key| + self[key] = File.expand_path(File.join(File.dirname(app), self[key])) + # puts "DEBUG: %s: %s" % [key, self[key]] + Dir.mkdir(self[key], 0o770) unless File.directory?(self[key]) + end + end + end +end diff --git a/src/guff/version.cr b/src/guff/version.cr new file mode 100644 index 0000000..898a0d6 --- /dev/null +++ b/src/guff/version.cr @@ -0,0 +1,3 @@ +module Guff + VERSION = "0.1.0" +end -- cgit v1.2.3