# File lib/versionomy/format_definitions/semver.rb, line 105 def self.create # The following is the definition of the semver schema schema_ = Schema.create do # The first field has the default value of 1. All other fields # have a default value of 0. Thus, the default version number # overall is "1.0". field(:major, :type => :integer, :default_value => 1) do field(:minor, :type => :integer) do field(:patch, :type => :integer) do field(:prerelease_suffix, :type => :string) do to_compare do |a_, b_| a_.length == 0 ? (b_.length == 0 ? 0 : 1) : (b_.length == 0 ? -1 : a_ <=> b_) end end end end end # An alias alias_field(:special_suffix, :prerelease_suffix) # Add the methods in this module to each value add_module(Format::Semver::ExtraMethods) end # The following is the definition of the standard format. It # understands the standard schema defined above. Format::Delimiter.new(schema_) do # All version number strings must start with the major version. # Unlike other fields, it is not preceded by the usual "dot" # delimiter, but it can be preceded by a "v" indicator. field(:major) do recognize_number(:delimiter_regexp => 'v?', :default_delimiter => '') end # The remainder of the core version number are represented as # integers delimited by periods. These fields are required. field(:minor) do recognize_number end field(:patch) do recognize_number end # The optional prerelease field is represented as a string # beginning with an alphabetic character. field(:prerelease_suffix) do recognize_regexp('[a-zA-Z][0-9a-zA-Z-]*', :default_value_optional => true, :delimiter_regexp => '', :default_delimiter => '') end end end