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