romikoops/howitzer

View on GitHub
bin/howitzer

Summary

Maintainability
Test Coverage
#!/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 '<PROJECT 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 <PROJECT NAME>", 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