brunobatista25/RubyGene

View on GitHub
bin/rubygene

Summary

Maintainability
Test Coverage
#!/usr/bin/env ruby

require 'thor'
require 'thor/group'
require 'i18n'
require 'json'
require 'yaml'
require 'tempfile'

require File.join(File.dirname(__FILE__),
                  '../lib/generate_ruby_tests/generate_ruby_test_helper')
require_relative '../lib/generate_ruby_tests/version.rb'

module GeneCapybara
  # Definicao de todos os geradores de gemas
  class Generate < Thor
    include Thor::Actions

    desc 'feature [RESOURCE_NAME]', 'Generates a feature'
    option :lang,
           banner: 'any of the gherkin supported languages',
           default: :en
    def feature(name)
      I18n.config.default_locale = options[:lang]
      in_root_project_folder?
      create_feature_file(name)
    end

    desc 'step [RESOURCE_NAME]', 'Generates a step'
    option :lang,
           banner: 'any of the gherkin supported languages',
           default: :en
    def step(name)
      I18n.config.default_locale = options[:lang]
      in_root_project_folder?
      create_steps_file name
    end

    desc 'spec [RESOURCE_NAME]', 'Generates a spec'
    option :lang,
           banner: 'any of the gherkin supported languages',
           default: :en
    def spec(name)
      I18n.config.default_locale = options[:lang]
      in_root_project_folder_rspec?
      create_spec_file name
    end

    desc 'page [RESOURCE_NAME]', 'Generates pages'
    option :lang,
           banner: 'any of the gherkin supported languages',
           default: :en
    def page(name)
      I18n.config.default_locale = options[:lang]
      in_root_project_folder?
      create_page_file name
    end

    desc 'spec [RESOURCE_NAME]', 'Generates a spec'
    option :lang,
           banner: 'any of the gherkin supported languages',
           default: :en
    def rspec_page(name)
      I18n.config.default_locale = options[:lang]
      in_root_project_folder_rspec?
      create_page_rspec_file name
    end

    desc 'screens [RESOURCE_NAME]', 'Generates screens'
    option :lang,
           banner: 'any of the gherkin supported languages',
           default: :en
    def screen(name)
      I18n.config.default_locale = options[:lang]
      in_root_project_folder?
      create_screens_file name
    end

    desc 'services [RESOURCE_NAME]', 'Generates services'
    option :lang,
           banner: 'any of the gherkin supported languages',
           default: :en
    def service(name)
      I18n.config.default_locale = options[:lang]
      in_root_project_folder?
      create_service_file name
    end

    desc 'services [RESOURCE_NAME]', 'Generates services'
    option :lang,
           banner: 'any of the gherkin supported languages',
           default: :en
    def rspec_service(name)
      I18n.config.default_locale = options[:lang]
      in_root_project_folder_rspec?
      create_service_rspec_file name
    end

    desc 'all_web [RESOURCE_NAME]', 'Generates features, steps and pages'
    option :lang,
           banner: 'any of the gherkin supported languages',
           default: :en
    def all_web(name)
      I18n.config.default_locale = options[:lang]
      in_root_project_folder?
      create_feature_file name
      create_steps_file name
      create_page_file name
    end

    desc 'all_mobile [RESOURCE_NAME]', 'Generates features, steps and screens'
    option :lang,
           banner: 'any of the gherkin supported languages',
           default: :en
    def all_mobile(name)
      I18n.config.default_locale = options[:lang]
      in_root_project_folder?
      create_feature_file name
      create_steps_file name
      create_screens_file name
    end

    desc 'all_api [RESOURCE_NAME]', 'Generates feature and steps'
    option :lang,
           banner: 'any of the gherkin supported languages',
           default: :en
    def all_api(name)
      I18n.config.default_locale = options[:lang]
      in_root_project_folder?
      create_feature_file name
      create_steps_file name
      create_service_file name
    end

    desc 'all_api [RESOURCE_NAME]', 'Generates feature and steps'
    option :lang,
           banner: 'any of the gherkin supported languages',
           default: :en
    def all_api_rspec(name)
      I18n.config.default_locale = options[:lang]
      in_root_project_folder_rspec?
      create_service_rspec_file name
      create_spec_file name
    end

    desc 'all_web [RESOURCE_NAME]', 'Generates features, steps and pages'
    option :lang,
           banner: 'any of the gherkin supported languages',
           default: :en
    def all_web_rspec(name)
      I18n.config.default_locale = options[:lang]
      in_root_project_folder_rspec?
      create_page_rspec_file name
      create_spec_file name
    end

    def self.source_root
      File.join(File.dirname(__FILE__), '../lib/templates')
    end
  end
end

module GeneCapybara
  # Definição dos grupos geradores
  class GeneCapybaraRunner < Thor
    include Thor::Actions

    map %w[-v --version] => :version

    default_task :help

    register GeneCapybara::Generate, 'generate',
             'generate [GENERATOR] [RESOURCE_NAME]',
             'Generates various resources'
    register GeneCapybara::Generate, 'g',
             'g [GENERATOR] [RESOURCE_NAME]',
             'Generates various resources'

    desc 'new web PROJECT_NAME',
         'Generates the structure of a new project that uses '\
         'Capybara, SitePrism, Selenium and Cucumber'
    option :lang,
           banner: 'any of the gherkin supported languages',
           default: :en
    def new_web(name)
      I18n.config.default_locale = options[:lang]
      # Thor sera responsavel por procurar
      # arquivos e possiveis conflitos
      directory File.join(File.dirname(__FILE__),
                          '../lib/SkeletonWeb'), name
    end

    desc 'new api PROJECT_NAME',
         'Generates the structure of api'
    option :lang,
           banner: 'any of the gherkin supported languages',
           default: :en
    def new_api(name)
      I18n.config.default_locale = options[:lang]
      # Thor sera responsavel por procurar
      # arquivos e possiveis conflitos
      directory File.join(File.dirname(__FILE__),
                          '../lib/SkeletonApi'), name
    end

    desc 'new mobile PROJECT_NAME',
         'Generates the structure of mobile'
    option :lang,
           banner: 'any of the gherkin supported languages',
           default: :en
    def new_mobile(name)
      I18n.config.default_locale = options[:lang]
      # Thor sera responsavel por procurar
      # arquivos e possiveis conflitos
      directory File.join(File.dirname(__FILE__),
                          '../lib/SkeletonMobile'), name
    end

    desc 'new_rspec_web PROJECT_NAME',
         'Generates the structure of a new project that uses '\
         'Capybara, SitePrism, Selenium and Rspec'
    option :lang,
           banner: 'any of the gherkin supported languages',
           default: :en
    def new_rspec_web(name)
      I18n.config.default_locale = options[:lang]
      # Thor sera responsavel por procurar
      # arquivos e possiveis conflitos
      directory File.join(File.dirname(__FILE__),
                          '../lib/SkeletonRspecWeb'), name
    end

    desc 'new_rspec_api PROJECT_NAME',
         'Generates the structure of a new project that uses '\
         'Capybara, SitePrism, Selenium and Rspec'
    option :lang,
           banner: 'any of the gherkin supported languages',
           default: :en
    def new_rspec_api(name)
      I18n.config.default_locale = options[:lang]
      # Thor sera responsavel por procurar
      # arquivos e possiveis conflitos
      directory File.join(File.dirname(__FILE__),
                          '../lib/SkeletonRspecApi'), name
    end

    desc 'version', 'Shows the gem version'
    def version
      puts "GeneCapybara Version #{GenerateRubyTests::VERSION}"
    end

    def self.source_root
      File.join(File.dirname(__FILE__), '../lib/templates')
    end

    # Substituindo o metodo initialize para carregar todos os
    # traducoes suportadas pelo cucumber gem
    def initialize(*args)
      super
      locales_folder_path = File.join(File.dirname(__FILE__),
                                      '../lib/locales')
      I18n.load_path = Dir[File.join(locales_folder_path, '*.yml')]
      I18n.backend.load_translations
      I18n.config.enforce_available_locales = true
    end
  end
end

GeneCapybara::GeneCapybaraRunner.start