class Geminabox::GemVersionCollection

This class represents a sorted collection of Geminabox::GemVersion objects. It it used widely throughout the system for displaying and filtering gems.

Public Class Methods

new(initial_gems=[]) click to toggle source

Array of Geminabox::GemVersion objects, or an array of [name, version, platform] triples.

# File lib/geminabox/gem_version_collection.rb, line 10
def initialize(initial_gems=[])
  @gems = initial_gems.map{|object|
    coerce_to_gem_version(object)
  }.sort
end

Public Instance Methods

by_name(&block) click to toggle source

The collection can contain gems of different names, this method groups them by name, and then sorts the different version of each name by version and platform.

yields 'foo_gem', version_collection

# File lib/geminabox/gem_version_collection.rb, line 41
def by_name(&block)
  @grouped ||= @gems.group_by(&:name).map{|name, collection|
    [name, Geminabox::GemVersionCollection.new(collection)]
  }.sort_by{|name, collection|
    name.downcase
  }

  if block_given?
    @grouped.each(&block)
  else
    @grouped
  end
end
each(&block) click to toggle source
# File lib/geminabox/gem_version_collection.rb, line 32
def each(&block)
  @gems.each(&block)
end
newest() click to toggle source

FIXME: Terminology makes no sense when the version are not all of the same name

# File lib/geminabox/gem_version_collection.rb, line 24
def newest
  @gems.last
end
oldest() click to toggle source

FIXME: Terminology makes no sense when the version are not all of the same name

# File lib/geminabox/gem_version_collection.rb, line 18
def oldest
  @gems.first
end
size() click to toggle source
# File lib/geminabox/gem_version_collection.rb, line 28
def size
  @gems.size
end

Private Instance Methods

coerce_to_gem_version(object) click to toggle source
# File lib/geminabox/gem_version_collection.rb, line 56
def coerce_to_gem_version(object)
  if object.is_a?(Geminabox::GemVersion)
    object
  else
    Geminabox::GemVersion.new(*object)
  end
end