class XSemVer::SemVer
def initialize major=0, minor=0, patch=0, special='', metadata=''
def initialize major=0, minor=0, patch=0, special='', metadata='' major.kind_of? Integer or raise "invalid major: #{major}" minor.kind_of? Integer or raise "invalid minor: #{minor}" patch.kind_of? Integer or raise "invalid patch: #{patch}" unless special.empty? special =~ /[A-Za-z][0-9A-Za-z\.]+/ or raise "invalid special: #{special}" end unless metadata.empty? metadata =~ /\A[A-Za-z0-9][0-9A-Za-z\.-]*\z/ or raise "invalid metadata: #{metadata}" end @major, @minor, @patch, @special, @metadata = major, minor, patch, special, metadata end