Sha256: 4c9e0a35aa797cd97936b0244e47f26d6a41a57f9da1caf872d866fd941417f8

Contents?: true

Size: 1.56 KB

Versions: 1

Compression:

Stored size: 1.56 KB

Contents

require "bundler/grep/version"
require 'bundler'
require 'optparse'

module Bundler
  module Grep
    def self.start!(argv)
      Bundler::Grep::Command.new(argv).start!
    end

    class Command
      def initialize(argv)
        @gems        = []
        @ignore_gems = []

        parse_argument!(argv)
      end

      def start!
        Kernel.exec(*grep_command, @argv[0], *selected_gem_paths)
      end

      private

      def parse_argument!(argv)
        opt = OptionParser.new
        opt.on('-g name1[,name2..]', '--gems name1[,name2..]', 'select target gems') do |gems|
          @gems = gems.split(',')
        end
        opt.on('--ingore-gems name1[,name2..]', 'ignore grep gems') do |gems|
          @ignore_gems = gems.split(',')
        end
        opt.version = Bundler::Grep::VERSION

        opt.parse!(argv)
        @argv = argv
      end

      def grep_command
        if ENV['BUNDLER_GREP_CMD']
          ENV['BUNDLER_GREP_CMD'].split(/ /).reject {|w| w == '' }
        else
          %w(grep -R)
        end
      end

      def selected_gem_paths
        selected_gem_specs.map(&:full_gem_path)
      end

      def selected_gem_specs
        return Bundler.load.specs if @gems.empty? && @ignore_gems.empty?

        Bundler.load.specs.find_all {|spec|
          collected_gem?(spec.name) && not_ignored_gem?(spec.name)
        }
      end

      def collected_gem?(gem_name)
        @gems.empty? || @gems.include?(gem_name)
      end

      def not_ignored_gem?(gem_name)
        @ignore_gems.empty? || !@ignore_gems.include?(gem_name)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
bundler-grep-0.4.0 lib/bundler/grep.rb