1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
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
|