Class: Gemirro::GemVersionCollection

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/gemirro/gem_version_collection.rb

Overview

The VersionCollection class contains a collection of ::Gem::Version

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(gems = []) ⇒ GemVersionCollection

Returns a new instance of GemVersionCollection.

Parameters:

  • gems (Array) (defaults to: [])


19
20
21
22
23
24
25
26
27
28
29
# File 'lib/gemirro/gem_version_collection.rb', line 19

def initialize(gems = [])
  @gems = gems.map do |object|
    if object.is_a?(GemVersion)
      object
    else
      GemVersion.new(*object)
    end
  end

  @gems.sort_by!(&:version)
end

Instance Attribute Details

#gemsArray (readonly)

Returns:

  • (Array)


10
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/gemirro/gem_version_collection.rb', line 10

class GemVersionCollection
  include Enumerable

  attr_reader :gems
  attr_reader :grouped

  ##
  # @param [Array] gems
  #
  def initialize(gems = [])
    @gems = gems.map do |object|
      if object.is_a?(GemVersion)
        object
      else
        GemVersion.new(*object)
      end
    end

    @gems.sort_by!(&:version)
  end

  ##
  # Return oldest version of a gem
  #
  # @return [GemVersion]
  #
  def oldest
    @gems.first
  end

  ##
  # Return newest version of a gem
  #
  # @return [GemVersion]
  #
  def newest
    @gems.last
  end

  ##
  # Return size of a gem
  #
  # @return [Integer]
  #
  def size
    @gems.size
  end

  ##
  # Each method
  #
  def each(&block)
    @gems.each(&block)
  end

  ##
  # Group gems by name
  #
  # @param [Proc] block
  # @return [Array]
  #
  def by_name(&block)
    if @grouped.nil?
      @grouped = @gems.group_by(&:name).map do |name, collection|
        [name, GemVersionCollection.new(collection)]
      end

      @grouped.reject! do |name, _collection|
        name.nil?
      end

      @grouped.sort_by! do |name, _collection|
        name.downcase
      end
    end

    if block_given?
      @grouped.each(&block)
    else
      @grouped
    end
  end

  ##
  # Find gem by name
  #
  # @param [String] gemname
  # @return [Array]
  #
  def find_by_name(gemname)
    gem = by_name.select do |name, _collection|
      name == gemname
    end

    gem.first.last if gem.any?
  end
end

#groupedArray (readonly)

Returns:

  • (Array)


10
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/gemirro/gem_version_collection.rb', line 10

class GemVersionCollection
  include Enumerable

  attr_reader :gems
  attr_reader :grouped

  ##
  # @param [Array] gems
  #
  def initialize(gems = [])
    @gems = gems.map do |object|
      if object.is_a?(GemVersion)
        object
      else
        GemVersion.new(*object)
      end
    end

    @gems.sort_by!(&:version)
  end

  ##
  # Return oldest version of a gem
  #
  # @return [GemVersion]
  #
  def oldest
    @gems.first
  end

  ##
  # Return newest version of a gem
  #
  # @return [GemVersion]
  #
  def newest
    @gems.last
  end

  ##
  # Return size of a gem
  #
  # @return [Integer]
  #
  def size
    @gems.size
  end

  ##
  # Each method
  #
  def each(&block)
    @gems.each(&block)
  end

  ##
  # Group gems by name
  #
  # @param [Proc] block
  # @return [Array]
  #
  def by_name(&block)
    if @grouped.nil?
      @grouped = @gems.group_by(&:name).map do |name, collection|
        [name, GemVersionCollection.new(collection)]
      end

      @grouped.reject! do |name, _collection|
        name.nil?
      end

      @grouped.sort_by! do |name, _collection|
        name.downcase
      end
    end

    if block_given?
      @grouped.each(&block)
    else
      @grouped
    end
  end

  ##
  # Find gem by name
  #
  # @param [String] gemname
  # @return [Array]
  #
  def find_by_name(gemname)
    gem = by_name.select do |name, _collection|
      name == gemname
    end

    gem.first.last if gem.any?
  end
end

Instance Method Details

#by_name(&block) ⇒ Array

Group gems by name

Parameters:

  • block (Proc)

Returns:

  • (Array)


71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/gemirro/gem_version_collection.rb', line 71

def by_name(&block)
  if @grouped.nil?
    @grouped = @gems.group_by(&:name).map do |name, collection|
      [name, GemVersionCollection.new(collection)]
    end

    @grouped.reject! do |name, _collection|
      name.nil?
    end

    @grouped.sort_by! do |name, _collection|
      name.downcase
    end
  end

  if block_given?
    @grouped.each(&block)
  else
    @grouped
  end
end

#each(&block) ⇒ Object

Each method



61
62
63
# File 'lib/gemirro/gem_version_collection.rb', line 61

def each(&block)
  @gems.each(&block)
end

#find_by_name(gemname) ⇒ Array

Find gem by name

Parameters:

  • gemname (String)

Returns:

  • (Array)


99
100
101
102
103
104
105
# File 'lib/gemirro/gem_version_collection.rb', line 99

def find_by_name(gemname)
  gem = by_name.select do |name, _collection|
    name == gemname
  end

  gem.first.last if gem.any?
end

#newestGemVersion

Return newest version of a gem

Returns:



45
46
47
# File 'lib/gemirro/gem_version_collection.rb', line 45

def newest
  @gems.last
end

#oldestGemVersion

Return oldest version of a gem

Returns:



36
37
38
# File 'lib/gemirro/gem_version_collection.rb', line 36

def oldest
  @gems.first
end

#sizeInteger

Return size of a gem

Returns:

  • (Integer)


54
55
56
# File 'lib/gemirro/gem_version_collection.rb', line 54

def size
  @gems.size
end