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)


35
36
37
38
# File 'lib/gem_mirror/versions_file.rb', line 35

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

Instance Attribute Details

#versionsArray (readonly)

Returns:

  • (Array)


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
64
65
# File 'lib/gem_mirror/versions_file.rb', line 13

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

    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

    hash
  end

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

#versions_hashHash (readonly)

Returns:

  • (Hash)


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
64
65
# File 'lib/gem_mirror/versions_file.rb', line 13

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

    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

    hash
  end

  ##
  # Returns an Array containing all the available versions for a Gem.
  #
  # @param [String] gem
  # @return [Array]
  #
  def versions_for(gem)
    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:



22
23
24
25
26
27
28
29
30
# File 'lib/gem_mirror/versions_file.rb', line 22

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

  reader.close

  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)


46
47
48
49
50
51
52
53
54
# File 'lib/gem_mirror/versions_file.rb', line 46

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

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

  hash
end

#versions_for(gem) ⇒ Array

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

Parameters:

  • gem (String)

Returns:

  • (Array)


62
63
64
# File 'lib/gem_mirror/versions_file.rb', line 62

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