Method: MyPrecious::PyPackageInfo#recommended_version

Defined in:
lib/myprecious/python_packages.rb

Version number recommended based on stability criteria

May return nil if no version meets the established criteria



225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
# File 'lib/myprecious/python_packages.rb', line 225

def recommended_version
  return nil if versions_with_release.empty?
  return @recommended_version if defined? @recommended_version
  
  orig_time_horizon = time_horizon = \
    Time.now - (MIN_RELEASED_DAYS * ONE_DAY)
  horizon_versegs = nil
  versions_with_release.each do |vn, rd|
    if vn.kind_of?(Version)
      horizon_versegs = nonpatch_versegs(vn)
      break
    end
  end
  
  versions_with_release.each do |ver, released|
    next if ver.kind_of?(String) || ver.prerelease?
    return (@recommended_version = current_version) if current_version && current_version >= ver
    
    # Reset the time-horizon clock if moving back into previous patch-series
    if (nonpatch_versegs(ver) <=> horizon_versegs) < 0
      time_horizon = orig_time_horizon
    end
    
    if released < time_horizon && version_reqs.all? {|r| r.satisfied_by?(ver, strict: false)}
      return (@recommended_version = ver)
    end
    time_horizon = [time_horizon, released - (MIN_STABLE_DAYS * ONE_DAY)].min
  end
  return (@recommended_version = nil)
end