Sha256: e6902657a8a513faa08cf9e37673c65e147138ad0a190519a8318b6e09a9c067

Contents?: true

Size: 1.28 KB

Versions: 6

Compression:

Stored size: 1.28 KB

Contents

require "lapidarius/gem"
require "lapidarius/command"
require "rubygems/requirement"

module Lapidarius
  class Cutter
    DEVELOPMENT = "development"

    attr_reader :version, :remote

    def initialize(name:, cmd_klass: Command, version: nil, remote: nil)
      @name = name
      @cmd = cmd_klass.new
      @version = version
      @remote = remote
      @dev_deps = []
    end

    def call
      recurse.tap do |gem|
        gem.dev_count = dev_count if gem
      end
    end

    private def recurse(name: @name, gem: nil, version: @version, remote: @remote)
      tokens = tokenize(name, version, remote)
      token = tokens.shift
      gem ||= Gem.factory(token)
      tokens.each do |t|
        next unless dep = Gem.factory(t)
        gem << dep
        recurse(name: dep.name, gem: dep, version: nil, remote: remote)
      end
      gem
    end

    def dev_count
      @dev_deps.map { |e| e.split(" ").first }.uniq.count
    end

    private def tokenize(name, version, remote)
      src = @cmd.call(name, version, remote)
      data = normalize(src)
      dev, tokens = data.partition { |token| token.match(/#{DEVELOPMENT}/) }
      @dev_deps.concat(dev)
      tokens
    end

    private def normalize(src)
      src.split(/\n\n/).map!(&:strip).first.split("\n").map(&:strip)
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
lapidarius-4.3.0 lib/lapidarius/cutter.rb
lapidarius-4.2.1 lib/lapidarius/cutter.rb
lapidarius-4.2.0 lib/lapidarius/cutter.rb
lapidarius-4.1.1 lib/lapidarius/cutter.rb
lapidarius-4.1.0 lib/lapidarius/cutter.rb
lapidarius-4.0.1 lib/lapidarius/cutter.rb