class Lapidarius::Cutter

Constants

DEVELOPMENT

Attributes

remote[R]
version[R]

Public Class Methods

new(name:, cmd_klass: Command, version: nil, remote: nil) click to toggle source
# File lib/lapidarius/cutter.rb, line 10
def initialize(name:, cmd_klass: Command, version: nil, remote: nil)
  @name = name
  @cmd = cmd_klass.new
  @version = version
  @remote = remote
  @dev_deps = []
  @cache = {}
end

Public Instance Methods

call() click to toggle source
# File lib/lapidarius/cutter.rb, line 19
def call
  recurse.tap do |gem|
    gem.dev_count = dev_count if gem
  end
end
dev_count() click to toggle source
# File lib/lapidarius/cutter.rb, line 34
def dev_count
  @dev_deps.map { |e| e.split(" ").first }.uniq.count
end

Private Instance Methods

dependency(token) click to toggle source
# File lib/lapidarius/cutter.rb, line 38
        def dependency(token)
  @cache.fetch(token) do
    Gem.factory(token).tap do |dep|
      recurse(name: dep.name, gem: dep, version: dep.version)
      @cache[token] = dep
    end
  end
end
latest_match(src) click to toggle source
# File lib/lapidarius/cutter.rb, line 55
        def latest_match(src)
  src.split(/\n\n/).map!(&:strip).last.split("\n").map(&:strip)
end
recurse(name: @name, gem: nil, version: @version) click to toggle source
# File lib/lapidarius/cutter.rb, line 25
        def recurse(name: @name, gem: nil, version: @version)
  tokens = tokenize(name, version, @remote)
  parent = tokens.shift
  gem ||= Gem.factory(parent)
  tokens.reduce(gem) do |acc, token|
    acc << dependency(token); acc
  end
end
tokenize(name, version, remote) click to toggle source
# File lib/lapidarius/cutter.rb, line 47
        def tokenize(name, version, remote)
  src = @cmd.call(name, version, remote)
  data = latest_match(src)
  dev, tokens = data.partition { |token| token.match(/#{DEVELOPMENT}/) }
  @dev_deps.concat(dev)
  tokens
end