module Stack class Runner attr_accessor :configuration attr_accessor :command attr_accessor :arguments attr_accessor :generator def initialize(argv) @argv = argv @options = { } parse! end # Parse options, command and arguments def parse! options = Stack::parse! @argv @configuration = Stack::Configuration.new(options) @command = @argv.shift @arguments = @argv end # Run stack! def run! if @command.nil? @command = "generate" end if Stack::COMMANDS.include?(@command) run_command else abort "Unknown command: #{@command}. Use one of #{Stack::COMMANDS.join(", ")}." end end # Runs the specified command def run_command @generator = Stack::Generator.new(Stack::runner.configuration.source, Stack::runner.configuration.target) case self.command when /(generate|gen)/ @generator.transform! when /(server)/ # make a watcher if Stack::runner.configuration.server_watch watcher = Stack::Watcher.new(@generator) watcher.keep_alive = false watcher.observe end # and a server server = Stack::Server.new(@generator) server.observe when /(watch)/ # setup a watcher watcher = Stack::Watcher.new(@generator) watcher.observe when /(create)/ File.open("#{Stack::runner.configuration.source}/_stack.yml", "w") { |file| YAML.dump(Stack::runner.configuration.to_hash, file) } puts "Created configuration file at '#{Stack::runner.configuration.source}/_stack.yml'" end end end end