Method: LibGems::SourceIndex#latest_specs
- Defined in:
- lib/libgems/source_index.rb
#latest_specs ⇒ Object
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 |