#!/usr/bin/env ruby # Copyright, 2012, by Samuel G. D. Williams. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. require 'teapot/controller' require 'teapot/controller/build' require 'teapot/controller/clean' require 'teapot/controller/create' require 'teapot/controller/fetch' require 'teapot/controller/generate' require 'teapot/controller/list' require 'benchmark' require 'trollop' OPTIONS = Trollop::options do opt :only, "Only compiled direct dependencies." opt :in, "Work in the given directory.", :type => :string opt :configuration, "Specify a specific build configuration.", :type => :string, :default => Teapot::DEFAULT_CONFIGURATION_NAME end def make_controller(root = nil) root ||= OPTIONS[:in] || Dir.getwd Teapot::Controller.new(root, OPTIONS) end # It would be nice to make this code a bit simpler, perhaps moving some parts of it to lib/teapot/application/{function}.rb module Application def self.clean make_controller.clean end def self.fetch make_controller.fetch end def self.build targets = ARGV make_controller.build(targets) end def self.list make_controller.list end def self.create project_name = ARGV.shift project_directory = project_name.gsub(/\s+/, '-').downcase source = ARGV.shift packages = ARGV root = Pathname(Dir.getwd) + project_directory if root.exist? abort "#{root} already exists!".color(:red) end # Make the path: root.mkpath Dir.chdir(root) do Teapot::Commands.run("git", "init") end controller = make_controller(root) controller.create(project_name, source, packages) controller.generate('project', [project_name]) end def self.generate(arguments = ARGV) make_controller.generate(arguments) end end valid_actions = (Application.public_methods - Module.methods).collect(&:to_s) action = ARGV.shift # Check that the command was invoked correctly... unless action and valid_actions.include?(action) puts "You must specify an action from: #{valid_actions.join(', ')}".color(:red) exit -1 end time = Benchmark.measure do begin Application.send(action.to_sym) rescue Teapot::NonexistantTeapotError => error $stderr.puts error.message.color(:red) rescue Teapot::IncompatibleTeapotError => error $stderr.puts error.message.color(:red) rescue Teapot::Commands::CommandError => error $stderr.puts error.message.color(:red) end end $stdout.flush $stderr.puts time.format("Elapsed Time: %r").color(:magenta)