Module: Beaker::Shared::Semvar
- Included in:
 - Beaker::Shared
 
- Defined in:
 - lib/beaker/shared/semvar.rb
 
Instance Method Summary collapse
- 
  
    
      #max_version(versions, default = nil)  ⇒ String? 
    
    
  
  
  
  
  
  
  
  
  
    
Gets the max semver version from a list of them.
 - 
  
    
      #version_is_less(a, b)  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    
Is semver-ish version a less than semver-ish version b.
 
Instance Method Details
#max_version(versions, default = nil) ⇒ String?
    Note:
    
  
  nil values will be skipped
    Note:
    
  
versions parameter will be copied so that the original won’t be tampered with
Gets the max semver version from a list of them
      76 77 78 79 80 81 82 83 84 85 86 87  | 
    
      # File 'lib/beaker/shared/semvar.rb', line 76 def max_version(versions, default = nil) return default if !versions || versions.empty? versions_copy = versions.dup highest = versions_copy.shift versions_copy.each do |version| next if !version highest = version if version_is_less(highest, version) end highest end  | 
  
#version_is_less(a, b) ⇒ Boolean
    Note:
    
  
  This has been updated for our current versioning scheme.
    Note:
    
  
  2019.5.0 is greater than 2019.5.0-rc0
    Note:
    
  
  2019.5.0-rc0-1-gabc1234 is greater than 2019.5.0-rc0
    Note:
    
  
  2019.5.0-rc1 is greater than 2019.5.0-rc0-1-gabc1234
    Note:
    
  
2019.5.0-1-gabc1234 is greater than 2019.5.0
Is semver-ish version a less than semver-ish version b
      14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64  | 
    
      # File 'lib/beaker/shared/semvar.rb', line 14 def version_is_less a, b a_nums = a.split('-')[0].split('.') b_nums = b.split('-')[0].split('.') (0...a_nums.length).each do |i| return false unless i < b_nums.length if a_nums[i].to_i < b_nums[i].to_i return true elsif a_nums[i].to_i > b_nums[i].to_i return false end end # checks all dots, they are equal so examine the rest a_rest = a.split('-').drop(1) a_is_release = a_rest.empty? a_is_rc = !a_is_release && /rc\d+/.match?(a_rest[0]) b_rest = b.split('-').drop(1) b_is_release = b_rest.empty? b_is_rc = !b_is_release && /rc\d+/.match?(b_rest[0]) if a_is_release && b_is_release # They are equal return false elsif !a_is_release && !b_is_release a_next = a_rest.shift b_next = b_rest.shift return a_is_rc unless a_is_rc && b_is_rc a_rc = a_next.gsub('rc', '').to_i b_rc = b_next.gsub('rc', '').to_i if a_rc < b_rc return true elsif a_rc > b_rc return false else a_next = a_rest.shift b_next = b_rest.shift return a_next.to_i < b_next.to_i if a_next && b_next # If a has nothing after -rc#, it is a tagged RC and # b must be a later build after this tag. return a_next.nil? end # If one of them is not an rc (and also not a release), # that one is a post-release build. So if a is the RC, it is less. else return (b_is_release && a_is_rc) || (a_is_release && !b_is_rc) end end  |