class Lapidarius::Gem

Constants

DEFAULT_VER
INVALID_VER_CHARS
VALID_CHARS

Attributes

deps[R]
dev_count[RW]
name[R]
version[R]

Public Class Methods

factory(token) click to toggle source
# File lib/lapidarius/gem.rb, line 17
def self.factory(token)
  token.match(/^No gems found matching/) do |m|
    fail NotInstalledError, token.gsub(/\/|\^|\$/, '')
  end
  token.match(/Gem ([#{VALID_CHARS}]+)-(.+)/) do |m|
    return new(name: m[1], version: m[2])
  end
  token.match(/([#{VALID_CHARS}]+) \((.+)\)/) do |m|
    return new(name: m[1], version: m[2])
  end
  fail KindError, "no gem can be created from #{token}"
end
new(name:, version:, deps: []) click to toggle source
# File lib/lapidarius/gem.rb, line 33
def initialize(name:, version:, deps: [])
  @name = name
  @version = version
  @deps = deps
end

Public Instance Methods

<<(dep) click to toggle source
# File lib/lapidarius/gem.rb, line 39
def <<(dep)
  fail KindError, "#{dep.inspect} is not a valid gem" unless gem?(dep)
  @deps << dep
end
==(gem) click to toggle source
# File lib/lapidarius/gem.rb, line 44
def ==(gem)
  return false unless gem?(gem)
  gem.name == name && gem.version == version
end
count() click to toggle source
# File lib/lapidarius/gem.rb, line 53
def count
  @count ||= flatten_deps!.size
end
to_s() click to toggle source
# File lib/lapidarius/gem.rb, line 49
def to_s
  "#{name} (#{@version})"
end

Protected Instance Methods

flatten_deps!() click to toggle source
# File lib/lapidarius/gem.rb, line 57
          def flatten_deps!
  deps.reduce(deps) { |acc, dep| acc.concat dep.flatten_deps! }.tap do |deps|
    deps.flatten!
    deps.uniq!(&:name)
  end
end

Private Instance Methods

gem?(gem) click to toggle source
# File lib/lapidarius/gem.rb, line 64
        def gem?(gem)
  %i{name version deps}.all? { |msg| gem.respond_to?(msg) }
end