aboutsummaryrefslogtreecommitdiff
path: root/src/guff
diff options
context:
space:
mode:
Diffstat (limited to 'src/guff')
-rw-r--r--src/guff/config.cr98
-rw-r--r--src/guff/version.cr3
2 files changed, 101 insertions, 0 deletions
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