Class: Gemvault::GemReference

Inherits:
Object
  • Object
show all
Defined in:
lib/gemvault/gem_reference.rb,
lib/gemvault/gem_reference/any_version.rb,
lib/gemvault/gem_reference/specific_version.rb

Overview

A reference to a gem in a vault. Abstract base class for two concrete kinds: AnyVersion (no version constraint) and SpecificVersion (an exact Gem::Version). Not instantiable directly. .parse is the factory that turns raw CLI input into one of the two subclasses.

Defined Under Namespace

Classes: AnyVersion, NonExactVersionError, SpecificVersion

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name:) ⇒ GemReference

Returns a new instance of GemReference.

Raises:

  • (NotImplementedError)


34
35
36
37
38
# File 'lib/gemvault/gem_reference.rb', line 34

def initialize(name:)
  raise NotImplementedError, "abstract base use AnyVersion or SpecificVersion" if instance_of?(GemReference)

  @name = name
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



32
33
34
# File 'lib/gemvault/gem_reference.rb', line 32

def name
  @name
end

Class Method Details

.parse(input, version: nil) ⇒ Object



13
14
15
16
17
18
19
20
21
22
# File 'lib/gemvault/gem_reference.rb', line 13

def self.parse(input, version: nil)
  base_name, embedded = split_name_version(input)
  version_string = version || embedded
  return AnyVersion.new(name: base_name) if version_string.nil?
  unless Gem::Version.correct?(version_string)
    raise NonExactVersionError, "Version must be an exact version (got: #{version_string.inspect})"
  end

  SpecificVersion.new(name: base_name, version: Gem::Version.new(version_string))
end

Instance Method Details

#==(other) ⇒ Object Also known as: eql?



40
41
42
# File 'lib/gemvault/gem_reference.rb', line 40

def ==(other)
  self.class == other.class && name == other.name
end

#deconstruct_keys(keys) ⇒ Object



49
50
51
52
# File 'lib/gemvault/gem_reference.rb', line 49

def deconstruct_keys(keys)
  data = { name: name }
  keys.nil? ? data : data.slice(*keys)
end

#hashObject



45
46
47
# File 'lib/gemvault/gem_reference.rb', line 45

def hash
  [self.class, name].hash
end