Sha256: da55529eed1e38d6dd7cc690ac301649070de6ed3cdfaae73de37c9bebb188c0

Contents?: true

Size: 1.68 KB

Versions: 3

Compression:

Stored size: 1.68 KB

Contents

require 'checker'

module Checker
  class CLI
    class << self
      def execute
        if ARGV.size == 0
          modules = get_modules_to_check
        else
          modules = ARGV.map(&:downcase)
        end

        if modules.empty? || modules.include?('all')
          modules = available_modules
        end

        check_module_availability(modules) do |result|
          puts "Modules not available: #{result.join(", ")}.\n"
          puts "Available: all, #{available_modules.join(", ")}\n"
          puts "Check your git config checker.check\n"
          exit 1
        end

        module_instances = []
        files = modified_files
        modules.each do |mod|
          klass = "Checker::Modules::#{mod.downcase.capitalize}".constantize
          module_instances << klass.new(files.dup)
        end

        files_checked = module_instances.map(&:files_to_check).flatten.uniq
        puts "[ CHECKER #{Checker::VERSION} - #{files_checked.size} files ]".light_blue

        results = module_instances.map(&:check)
        exit (results.all_true? ? 0 : 1)
      end

      private
      def available_modules
        Checker::Modules.constants.map(&:to_s).map(&:downcase) - ['base']
      end

      def check_module_availability(modules)
        result = modules - available_modules
        unless result.empty?
          if block_given?
            yield(result)
          end
        end
      end

      def get_modules_to_check
        `git config checker.check`.chomp.split(",").map(&:strip)
      end

      def modified_files
        @modified_files ||= `git status --porcelain | egrep "^(A|M|R).*" | awk ' { if ($3 == "->") print $4; else print $2 } '`.split
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
checker-0.6.2 lib/checker/cli.rb
checker-0.6.1 lib/checker/cli.rb
checker-0.0.6 lib/checker/cli.rb