Method: LibGems::SourceIndex#latest_specs

Defined in:
lib/libgems/source_index.rb

#latest_specsObject

Returns an Array specifications for the latest released versions of each gem in this index.



165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
# File 'lib/libgems/source_index.rb', line 165

def latest_specs
  result = Hash.new { |h,k| h[k] = [] }
  latest = {}

  sort.each do |_, spec|
    name = spec.name
    curr_ver = spec.version
    prev_ver = latest.key?(name) ? latest[name].version : nil

    next if curr_ver.prerelease?
    next unless prev_ver.nil? or curr_ver >= prev_ver or
                latest[name].platform != LibGems::Platform::RUBY

    if prev_ver.nil? or
       (curr_ver > prev_ver and spec.platform == LibGems::Platform::RUBY) then
      result[name].clear
      latest[name] = spec
    end

    if spec.platform != LibGems::Platform::RUBY then
      result[name].delete_if do |result_spec|
        result_spec.platform == spec.platform
      end
    end

    result[name] << spec
  end

  # TODO: why is this a hash while @gems is an array? Seems like
  # structural similarity would be good.
  result.values.flatten
end