versioneye/naturalsorter

View on GitHub
lib/version_tag_recognizer.rb

Summary

Maintainability
F
3 days
Test Coverage
class VersionTagRecognizer

  A_STABILITY_STABLE = "stable"
  A_STABILITY_PRE = "pre"
  A_STABILITY_RC = "RC"
  A_STABILITY_BETA = "beta"
  A_STABILITY_ALPHA = "alpha"
  A_STABILITY_SNAPSHOT = "SNAPSHOT"
  A_STABILITY_DEV = "dev"
  A_STABILITY_BUILD = "BUILD"
  A_STABILITY_PATCH = "patch"
  A_STABILITY_PREVIEW = "preview"


  def self.value_for( value )
    return 0  if self.dev? value
    return 2  if self.snapshot? value
    return 3  if self.alpha? value
    return 4  if self.beta? value
    return 5  if self.rc? value
    return 6  if self.pre? value
    return 10 if self.stable? value
    return 11 if self.patch? value
    return 1
  end

  def self.value_for_key( value )
    return 0  if A_STABILITY_DEV.eql? value
    return 2  if A_STABILITY_SNAPSHOT.eql? value
    return 3  if A_STABILITY_ALPHA.eql? value
    return 4  if A_STABILITY_BETA.eql? value
    return 5  if A_STABILITY_RC.eql? value
    return 6  if A_STABILITY_PRE.eql? value
    return 10 if A_STABILITY_STABLE.eql? value
    return 11 if A_STABILITY_PATCH.eql? value
    return 1
  end

  def self.compare_tags( a, b)
    a_val = self.value_for a
    b_val = self.value_for b
    return -1 if a_val < b_val
    return  1 if a_val > b_val
    return  0
  end

  def self.tagged? value
    return true if self.patch?(value)
    return true if self.alpha?(value)
    return true if self.beta?(value)
    return true if self.dev?(value)
    return true if self.rc?(value)
    return true if self.snapshot?(value)
    return true if self.pre?(value)
    return true if self.jbossorg?(value)
    return false
  end

  def self.remove_tag value
    if self.patch? value
      return value.gsub(/\.patch.*$/i, "")
    elsif self.alpha? value
      new_value = value.gsub(/\.[\w-]*alpha.*$/i, "")
      return new_value.gsub(/\.[\w-]*a.*$/i, "")
    elsif self.beta? value
      new_value = value.gsub(/\.[\w-]*beta.*$/i, "")
      return new_value.gsub(/\.[\w-]*b.*$/i, "")
    elsif self.rc? value
      return value.gsub(/\.[\w-]*rc.*$/i, "")
    elsif self.pre? value
      return value.gsub(/\.[\w-]*pre.*$/i, "")
    elsif self.jbossorg? value
      return value.gsub(/\.jbossorg.*$/i, "")
    elsif self.snapshot? value
      return value.gsub(/\.snapshot.*$/i, "")
    end
    return value
  end

  def self.remove_minimum_stability val
    val.gsub!(/@.*$/, "") if val.to_s.match(/@.*$/)
  end


  def self.does_it_fit_stability?( version_number, stability )
    patch = self.patch?( version_number )
    return true if (stability.casecmp( A_STABILITY_PATCH ) == 0) && patch

    stable = self.stable?( version_number )
    return true if (stability.casecmp( A_STABILITY_STABLE ) == 0) && stable

    pre = stable || self.pre?( version_number )
    return true if (stability.casecmp( A_STABILITY_PRE ) == 0) && pre

    rc = stable || self.rc?( version_number )
    return true if (stability.casecmp( A_STABILITY_RC ) == 0) && rc

    beta = rc || self.beta?( version_number )
    return true if (stability.casecmp( A_STABILITY_BETA ) == 0) && beta

    alpha = beta || self.alpha?( version_number )
    return true if (stability.casecmp( A_STABILITY_ALPHA ) == 0) && alpha

    snapshot = alpha || self.pre?( version_number ) || self.snapshot?( version_number )
    return true if (stability.casecmp( A_STABILITY_SNAPSHOT ) == 0) && snapshot
    return true if (stability.casecmp( A_STABILITY_DEV )      == 0)
    
    return false
  end


  def self.stability_tag_for( version )
    if version.to_s.match(/@.*$/)
      spliti = version.split("@")
      return spliti[1]
    else
      return A_STABILITY_DEV if version.to_s.match(/\Adev-/i) || version.to_s.match(/-dev\z/i)

      if self.stable? version
        return A_STABILITY_STABLE
      elsif self.patch? version
        return A_STABILITY_PATCH
      elsif self.pre? version
        return A_STABILITY_PRE
      elsif self.rc? version
        return A_STABILITY_RC
      elsif self.beta? version
        return A_STABILITY_BETA
      elsif self.alpha? version
        return A_STABILITY_ALPHA
      elsif self.snapshot? version
        return A_STABILITY_SNAPSHOT
      else
        return A_STABILITY_DEV
      end
    end
  end

  def self.release? value
    self.stable? value
  end

  def self.stable? value
    return true if value.to_s.empty?
    return false if value.to_s.match(/\Adev-/i) || value.to_s.match(/-dev\z/i)
    return false if self.preview?( value )

    return true if value.to_s.match(/.+RELEASE.*/i)
    return true if value.to_s.match(/.+FINAL.*/i)
    return true if value.to_s.match(/.+SP.*/i)
    return true if value.to_s.match(/.+GA.*/i)
    return true if value.to_s.match(/.*patch.*/i)

    !self.alpha?(value)    and !self.beta?(value)       and
    !self.dev?(value)      and !self.pre?(value)        and
    !self.rc?(value)       and !value.to_s.match(/.+SEC.*/i) and
    !self.snapshot?(value) and !value.to_s.match(/.+M.+/i)   and
    !self.build?(value)
  end

  def self.patch? value
    value.to_s.match(/.*patch.*/i)
  end

  def self.alpha? value
    return false if self.beta? value
    value.to_s.match(/.*alpha.*/i) or value.to_s.match(/.+a.*/i)
  end

  def self.beta? value
    value.to_s.match(/.*beta.*/i) or value.to_s.match(/.+b.*/i)
  end

  def self.dev? value
    value.to_s.match(/.*dev.*/i)
  end

  def self.rc? value
    value.to_s.match(/.*rc.*/i) || value.to_s.match(/.*cr.*/i)
  end

  def self.snapshot? value
    value.to_s.match(/.+SNAPSHOT.*/i)
  end

  def self.build? value
    value.to_s.match(/.+build.*/i)
  end

  def self.pre? value
    value.to_s.match(/.*pre.*$/i) || value.to_s.match(/.*insiders.*$/i)
  end

  def self.jbossorg? value
    value.to_s.match(/.*jbossorg.*$/i)
  end

  def self.preview? value
    value.to_s.match(/-preview\d+-/i) || value.to_s.match(/-preview-/i)
  end

end