Sha256: fa5a06c16582e55eae8eabf7389169d1662d87d4e531da91cfcc652910d40a57

Contents?: true

Size: 1.35 KB

Versions: 1

Compression:

Stored size: 1.35 KB

Contents

require 'rubygems'
require 'rubygems/package'

module Verdi
  class Runner
    def initialize(command)
      @gem_name, *@versions = command
      @platform = Gem.platforms.last

      @versions ||= [Gem.requirement.default]
      @names_and_versions = @versions.map {|version| "#{@gem_name}-#{version}"}
    end

    def execute
      package_paths = @names_and_versions.map do |name_with_version|
        path = fetch name_with_version
        extract path, name_with_version
        path
      end
      
      command = "git diff --color-words --no-index "+
                "#{@names_and_versions.reverse.join(" ")}"
      system(command)
      FileUtils.rm_rf(package_paths + @names_and_versions)
    end

    def fetch(name_with_version)
      dep = Gem::Dependency.new *name_with_version.split("-")

      specs_and_sources, errors =
        Gem::SpecFetcher.fetcher.spec_for_dependency dep

      if @platform then
        filtered = specs_and_sources.select { |s,| s.platform == @platform }
        specs_and_sources = filtered unless filtered.empty?
      end

      spec, source = specs_and_sources.max_by { |s,| s.version }

      if spec.nil? then
        raise GemNotFound
      end

      source.download spec
    end

    def extract(path, name_with_version)
      package = Gem::Package.new(path)
      package.extract_files name_with_version
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
verdi-0.1.0 lib/verdi/runner.rb