#!/usr/bin/env ruby require 'gli' require_relative '../lib/howitzer/version' module HowitzerCli extend GLI::App synopsis_format :compact program_desc 'Ruby based framework for acceptance testing' version Howitzer::VERSION desc 'Generate new project' arg_name '' command :new do |c| c.desc 'Integrate Cucumber' c.switch [:c, :cucumber] , negatable: false c.desc 'Integrate Rspec' c.switch [:r, :rspec], negatable: false c.action do |global_options, options, args| if args.size > 0 validate_options(options) load_generators path_to_dir = File.join(Dir.pwd, args.first) puts " * New project directory creation ..." Dir.mkdir(path_to_dir) puts " Created new './#{args.first}' folder" Dir.chdir(path_to_dir) Howitzer::ConfigGenerator.new Howitzer::PagesGenerator.new Howitzer::TasksGenerator.new Howitzer::EmailsGenerator.new Howitzer::RootGenerator.new Howitzer::CucumberGenerator.new if options['cucumber'] Howitzer::RspecGenerator.new if options['rspec'] puts "[WARN] Extra parameters were skipped" if args.size > 1 elsif args.size.zero? exit_now!("Please specify ", 64) end end end desc 'Upgrade existing project' command :update do |c| c.action do check_project_presence load_generators Howitzer::ConfigGenerator.new Howitzer::RootGenerator.new Howitzer::CucumberGenerator.new if cucumber_integrated? Howitzer::RspecGenerator.new if rspec_integrated? end end #helpers class << self private def validate_options(options) if !options['cucumber'] && !options['rspec'] exit_now!("Provide --cucumber and/or --rspec option", 64) end end def check_project_presence exit_now!('Current directory is not Howitzer project', 126) unless howitzer_project? end def howitzer_project? Dir.exists?('pages') && Dir.exists?('config') && File.exists?('boot.rb') end def load_generators Dir[File.join(File.dirname(__FILE__), '..', 'generators', '**', '*_generator.rb')].each{ |f| require File.expand_path(f) } end def cucumber_integrated? Dir.exists?('features') end def rspec_integrated? Dir.exists?('spec') end end end unless ENV['TEST_MODE'] exit(HowitzerCli.run(ARGV)) end