lib/smallcage/application.rb in smallcage-0.1.7 vs lib/smallcage/application.rb in smallcage-0.1.8
- old
+ new
@@ -1,12 +1,8 @@
-
-VERSION_NOTE = "SmallCage #{SmallCage::VERSION::STRING} - Lightweight CMS Package."
-OPTIONS = {}
-OPTIONS[:original_argv] = ARGV.clone
-
class SmallCage::Application
require 'optparse'
+ VERSION_NOTE = "SmallCage #{SmallCage::VERSION::STRING} - Lightweight CMS Package."
@@signal_handlers = nil
def self.init_signal_handlers
@@signal_handlers = {
@@ -29,16 +25,27 @@
@@signal_handlers[s] << handler
end
end
def self.execute
+ STDOUT.sync = true
+ self.new.execute
+ end
-STDOUT.sync = true
+ def execute
+ @options = {}
+ @parser = create_main_parser
+ parse_main_options
+ @command_parsers = create_command_parsers
+ parse_command
+ parse_command_options
+ SmallCage::Runner.run(@options)
+ end
-OptionParser.new do |opts|
-
- opts.banner =<<BANNER
+ def create_main_parser
+ parser = OptionParser.new
+ parser.banner =<<BANNER
Usage: #{File.basename($0)} <subcommand> [options]
#{VERSION_NOTE}
Subcommands are:
update [path] Build smc contents.
clean [path] Remove files generated from *.smc source.
@@ -48,117 +55,110 @@
export [path] [outputpath] Export project.
manifest [path] Generate Manifest.html file.
Options are:
BANNER
-
- opts.separator ""
- opts.on("-h", "--help", "Show this help message.") do
- puts opts
- exit
+ return parser
end
- opts.on("-v", "--version", "Show version info.") do
- puts VERSION_NOTE
- exit
- end
+ private :create_main_parser
- subparsers = Hash.new do |h,k|
- $stderr.puts "no such subcommand: #{k}"
- exit 1
+ def parse_main_options
+ @parser.separator ""
+ @parser.on("-h", "--help", "Show this help message.") do
+ puts @parser
+ exit
+ end
+ @parser.on("-v", "--version", "Show version info.") do
+ puts VERSION_NOTE
+ exit
+ end
+ @parser.order!(ARGV)
end
+ private :parse_main_options
+
+ def create_command_parsers
+ parsers = Hash.new do |h,k|
+ STDERR << "no such subcommand: #{k}\n"
+ exit 1
+ end
+
+ banners = {
+ :update => "smc update [path]\n",
+ :clean => "smc clean [path]\n",
+ :server => "smc server [path] [port]\n",
+ :auto => "smc auto [path] [port]\n",
+ :import => "smc import [name|uri]",
+ :export => "smc export [path] [outputpath]",
+ :help => "smc help [command]\n",
+ }
- subparsers[:update] = OptionParser.new do |subp|
- subp.banner =<<EOT
-Usage: update [PATH]
-EOT
- end
-
- subparsers[:server] = OptionParser.new do |subp|
- subp.banner =<<EOT
-Usage: server [PATH] [PORT]
-EOT
- end
+ banners.each do |k,v|
+ parsers[k] = OptionParser.new do |cp|
+ cp.banner = "Usage: " + v
+ end
+ end
- subparsers[:auto] = OptionParser.new do |subp|
- subp.banner =<<EOT
-Usage: auto [PATH]
-EOT
+ return parsers
end
+ private :create_command_parsers
- subparsers[:generate] = OptionParser.new do |subp|
- end
- subparsers[:release] = OptionParser.new do |subp|
- end
- subparsers[:help] = OptionParser.new do |subp|
- end
- subparsers[:import] = OptionParser.new do |subp|
- end
- subparsers[:export] = OptionParser.new do |subp|
- end
- subparsers[:manifest] = OptionParser.new do |subp|
- end
- subparsers[:clean] = OptionParser.new do |subp|
- end
+ def parse_command
+ commands = Hash.new {|h,k| k}
+ commands.merge!({
+ :up => :update,
+ :sv => :server,
+ :au => :auto,
+ })
- commands = Hash.new {|h,k| k}
- commands.merge!({
- :up => :update,
- :sv => :server,
- :au => :auto,
- :gen => :generate,
- :rel => :release,
- :st => :status,
- })
+ unless ARGV.empty?
+ @options[:command] = commands[ARGV.shift.to_sym]
+ @command_parsers[@options[:command]].parse!(ARGV)
+ end
- opts.order!(ARGV)
- unless ARGV.empty?
- OPTIONS[:command] = commands[ARGV.shift.to_sym]
- subparsers[OPTIONS[:command]].parse!(ARGV)
+ if @options[:command].nil?
+ puts @parser
+ exit
+ end
end
-
- if OPTIONS[:command].nil?
- puts opts
- exit
- elsif OPTIONS[:command] == :help
- subcmd = ARGV.shift
- if subcmd.nil?
- puts opts
- else
- puts subparsers[subcmd.to_sym]
+ private :parse_command
+
+ def parse_command_options
+ if @options[:command] == :help
+ subcmd = ARGV.shift
+ if subcmd.nil?
+ puts @parser
+ else
+ puts @command_parsers[subcmd.to_sym]
+ end
+ exit
+ elsif @options[:command] == :update
+ @options[:path] = ARGV.shift
+ @options[:path] ||= "."
+ elsif @options[:command] == :server
+ @options[:path] = ARGV.shift
+ @options[:port] = ARGV.shift
+ @options[:path] ||= "."
+ @options[:port] ||= 80
+ elsif @options[:command] == :auto
+ @options[:path] = ARGV.shift
+ @options[:path] ||= "."
+ @options[:port] = ARGV.shift
+ elsif @options[:command] == :import
+ @options[:from] = ARGV.shift
+ @options[:from] ||= "default"
+ @options[:to] = ARGV.shift
+ @options[:to] ||= "."
+ elsif @options[:command] == :export
+ @options[:path] = ARGV.shift
+ @options[:path] ||= "."
+ @options[:out] = ARGV.shift
+ elsif @options[:command] == :manifest
+ @options[:path] = ARGV.shift
+ @options[:path] ||= "."
+ elsif @options[:command] == :clean
+ @options[:path] = ARGV.shift
+ @options[:path] ||= "."
end
- exit
- elsif OPTIONS[:command] == :update
- OPTIONS[:path] = ARGV.shift
- OPTIONS[:path] ||= "."
- elsif OPTIONS[:command] == :server
- OPTIONS[:path] = ARGV.shift
- OPTIONS[:port] = ARGV.shift
- OPTIONS[:path] ||= "."
- OPTIONS[:port] ||= 80
- elsif OPTIONS[:command] == :auto
- OPTIONS[:path] = ARGV.shift
- OPTIONS[:path] ||= "."
- OPTIONS[:port] = ARGV.shift
- elsif OPTIONS[:command] == :import
- OPTIONS[:from] = ARGV.shift
- OPTIONS[:from] ||= "default"
-
- OPTIONS[:to] = ARGV.shift
- OPTIONS[:to] ||= "."
- elsif OPTIONS[:command] == :export
- OPTIONS[:path] = ARGV.shift
- OPTIONS[:path] ||= "."
-
- OPTIONS[:out] = ARGV.shift
- elsif OPTIONS[:command] == :manifest
- OPTIONS[:path] = ARGV.shift
- OPTIONS[:path] ||= "."
- elsif OPTIONS[:command] == :clean
- OPTIONS[:path] = ARGV.shift
- OPTIONS[:path] ||= "."
end
-end
+ private :parse_command_options
-SmallCage::Runner.run(OPTIONS)
-
end
-end
\ No newline at end of file