Class: GemMirror::VersionsFile

Inherits:
Object
  • Object
show all
Defined in:
lib/gem-mirror/versions_file.rb

Overview

The VersionsFile class acts as a small Ruby wrapper around the RubyGems file that contains all Gems and their associated versions.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(versions) ⇒ VersionsFile

Returns a new instance of VersionsFile.

Parameters:

  • versions (Array)


33
34
35
36
# File 'lib/gem-mirror/versions_file.rb', line 33

def initialize(versions)
  @versions      = versions
  @versions_hash = create_versions_hash
end

Instance Attribute Details

#versionsArray (readonly)

Returns:

  • (Array)


11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/gem-mirror/versions_file.rb', line 11

class VersionsFile
  attr_reader :versions, :versions_hash

  ##
  # Reads the versions file from the specified String.
  #
  # @param [String] content
  # @return [GemMirror::VersionsFile]
  #
  def self.load(content)
    buffer   = StringIO.new(content)
    reader   = Zlib::GzipReader.new(buffer)
    instance = new(Marshal.load(reader.read))

    reader.close

    return instance
  end

  ##
  # @param [Array] versions
  #
  def initialize(versions)
    @versions      = versions
    @versions_hash = create_versions_hash
  end

  ##
  # Creates a Hash based on the Array containing all versions. This Hash is
  # used to more easily (and faster) iterate over all the gems/versions.
  #
  # @return [Hash]
  #
  def create_versions_hash
    hash = Hash.new { |h, k| h[k] = [] }

    versions.each do |version|
      hash[version[0]] << version
    end

    return hash
  end

  ##
  # Returns an Array containing all the available versions for a Gem.
  #
  # @param [String] gem
  # @return [Array]
  #
  def versions_for(gem)
    return versions_hash[gem].map { |version| version[1] }
  end
end

#versions_hashHash (readonly)

Returns:

  • (Hash)


11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/gem-mirror/versions_file.rb', line 11

class VersionsFile
  attr_reader :versions, :versions_hash

  ##
  # Reads the versions file from the specified String.
  #
  # @param [String] content
  # @return [GemMirror::VersionsFile]
  #
  def self.load(content)
    buffer   = StringIO.new(content)
    reader   = Zlib::GzipReader.new(buffer)
    instance = new(Marshal.load(reader.read))

    reader.close

    return instance
  end

  ##
  # @param [Array] versions
  #
  def initialize(versions)
    @versions      = versions
    @versions_hash = create_versions_hash
  end

  ##
  # Creates a Hash based on the Array containing all versions. This Hash is
  # used to more easily (and faster) iterate over all the gems/versions.
  #
  # @return [Hash]
  #
  def create_versions_hash
    hash = Hash.new { |h, k| h[k] = [] }

    versions.each do |version|
      hash[version[0]] << version
    end

    return hash
  end

  ##
  # Returns an Array containing all the available versions for a Gem.
  #
  # @param [String] gem
  # @return [Array]
  #
  def versions_for(gem)
    return versions_hash[gem].map { |version| version[1] }
  end
end

Class Method Details

.load(content) ⇒ GemMirror::VersionsFile

Reads the versions file from the specified String.

Parameters:

  • content (String)

Returns:



20
21
22
23
24
25
26
27
28
# File 'lib/gem-mirror/versions_file.rb', line 20

def self.load(content)
  buffer   = StringIO.new(content)
  reader   = Zlib::GzipReader.new(buffer)
  instance = new(Marshal.load(reader.read))

  reader.close

  return instance
end

Instance Method Details

#create_versions_hashHash

Creates a Hash based on the Array containing all versions. This Hash is used to more easily (and faster) iterate over all the gems/versions.

Returns:

  • (Hash)


44
45
46
47
48
49
50
51
52
# File 'lib/gem-mirror/versions_file.rb', line 44

def create_versions_hash
  hash = Hash.new { |h, k| h[k] = [] }

  versions.each do |version|
    hash[version[0]] << version
  end

  return hash
end

#versions_for(gem) ⇒ Array

Returns an Array containing all the available versions for a Gem.

Parameters:

  • gem (String)

Returns:

  • (Array)


60
61
62
# File 'lib/gem-mirror/versions_file.rb', line 60

def versions_for(gem)
  return versions_hash[gem].map { |version| version[1] }
end