Sha256: e0355b59da32fd8603e4e14391e00e4a0f4119ce9f40eeef3bf37ddba4041e08

Contents?: true

Size: 1.69 KB

Versions: 11

Compression:

Stored size: 1.69 KB

Contents

# -*- coding: utf-8 -*-
module Gemirro
  ##
  # The VersionCollection class contains a collection of ::Gem::Version
  #
  # @!attribute [r] gems
  #  @return [Array]
  # @!attribute [r] grouped
  #  @return [Array]
  #
  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
    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.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
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
gemirro-0.10.5 lib/gemirro/gem_version_collection.rb
gemirro-0.10.4 lib/gemirro/gem_version_collection.rb
gemirro-0.10.3 lib/gemirro/gem_version_collection.rb
gemirro-0.10.2 lib/gemirro/gem_version_collection.rb
gemirro-0.10.1 lib/gemirro/gem_version_collection.rb
gemirro-0.10.0 lib/gemirro/gem_version_collection.rb
gemirro-0.9.1 lib/gemirro/gem_version_collection.rb
gemirro-0.9.0 lib/gemirro/gem_version_collection.rb
gemirro-0.8.1 lib/gemirro/gem_version_collection.rb
gemirro-0.8.0 lib/gemirro/gem_version_collection.rb
gemirro-0.7.0 lib/gemirro/gem_version_collection.rb