From 06dc228fc086de158800d6db3afd6567cae5c901 Mon Sep 17 00:00:00 2001 From: Dag Odenhall Date: Sun, 4 May 2008 03:27:15 +0200 Subject: [PATCH] Configuration scaffolding --- lib/amazing/cli.rb | 1 + lib/amazing/cli/commands.rb | 72 +++++++++++++++++++++++++++++++++++++++++++++ lib/amazing/options.rb | 4 +++ 3 files changed, 77 insertions(+) diff --git a/lib/amazing/cli.rb b/lib/amazing/cli.rb index c715dd9..37ba276 100644 --- a/lib/amazing/cli.rb +++ b/lib/amazing/cli.rb @@ -46,6 +46,7 @@ module Amazing def run parse_options cmd_show_help + cmd_scaffold set_loglevel cmd_stop_process load_scripts diff --git a/lib/amazing/cli/commands.rb b/lib/amazing/cli/commands.rb index 525a54f..e48ee6f 100644 --- a/lib/amazing/cli/commands.rb +++ b/lib/amazing/cli/commands.rb @@ -24,6 +24,78 @@ module Amazing end end + def cmd_scaffold + if @options[:scaffold] + list = {} + screen, statusbar = nil, nil + + File.readlines(@options[:scaffold]).each do |line| + case line + + when /^\s*screen .*(\d+)/ + screen = $1.to_i + list[screen] = {} + + when /^\s*statusbar[" ]*([^"\n ]+)/ + statusbar = $1 + list[screen][statusbar] = [] + + when /^\s*(graph|iconbox|progressbar|textbox)[" ]*([^"\n ]+)/ + list[screen][statusbar] << [$1, $2] + + when /^\s*data[" ]*([^"\n ]+)/ + list[screen][statusbar][-1] << $1 + + end + end + + list.each do |screen, statusbars| + statusbars.each do |statusbar, widgets| + + puts "awesome {" + puts "#{'# ' if screen == 0} set :screen => %s" % screen + puts "#{'# ' if statusbar == "mystatusbar"} set :statusbar => %s" % statusbar.inspect + puts + + widgets.each do |widget| + type, name, datas = widget[0], widget[1], widget[2..-1] + noop = !Amazing::Widgets.constants.include?(name.camel_case) + + puts " widget(%s) {" % name.inspect + puts " set :module => :noop" if noop + puts "# set :module => %s" % name.to_sym.inspect unless noop + puts ' set :property => "image"' if type == "iconbox" + puts '# set :property => "text"' if type == "textbox" + puts " set :property => \"data %s\"" % datas[0] if datas.size == 1 + puts " set :interval => 1" + + Amazing::Widgets.const_get(name.camel_case).options.each do |option, data| + puts "# set %s => %s" % [option.inspect, data[:default].inspect] + end unless noop + + if datas.size > 1 + puts + datas.each do |data| + puts " property(\"data %s\") {" % data + puts " @default" + puts " }" + puts unless data == datas.last + end + end + + puts " }" + puts unless name == widgets.last[1] + end + + puts "}" + puts + end + end + + exit + end + end + def cmd_stop_process if @options[:stop] stop_process(false) diff --git a/lib/amazing/options.rb b/lib/amazing/options.rb index 0c4175c..3bf5509 100644 --- a/lib/amazing/options.rb +++ b/lib/amazing/options.rb @@ -48,6 +48,10 @@ module Amazing self[:config] = config end + opts.on("-g", "--scaffold [AWESOMERC]", "Generate a scaffold config") do |awesomerc| + self[:scaffold] = awesomerc || File.expand_path("~/.awesomerc") + end + opts.on("-l", "--log-level LEVEL", "Severity threshold (info)") do |level| self[:loglevel] = level end -- 2.11.4.GIT