class SemVer
def initialize major=0, minor=0, patch=0, special=''
def initialize major=0, minor=0, patch=0, special='' 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 @major, @minor, @patch, @special = major, minor, patch, special end