General
You can create custom versioning schemes by subclassing Versionian::VersionScheme or using declarative YAML configuration.
Declarative YAML approach
For most custom schemes, the declarative YAML approach is recommended:
. Example scheme defined at `my_scheme.yaml`name: my_yaml_scheme
type: declarative
description: My custom version scheme
components:
- name: major
type: integer
separator: "."
- name: minor
type: integer
separator: "."
- name: patch
type: integerscheme = Versionian::SchemeLoader.from_yaml_file('my_scheme.yaml')
Versionian.register_scheme(:my_scheme, scheme)
version = scheme.parse("1.2.3")
puts version.major # => 1
puts version.minor # => 2Ruby class approach
For complex versioning schemes, you can create custom scheme classes in Ruby.
class FloatVerScheme < Versionian::VersionScheme
def initialize(name: :floatver, description: "Float-based versioning")
super
end
def parse(version_string)
float_value = Float(version_string)
Versionian::VersionIdentifier.new(
raw_string: version_string,
scheme: self,
components: [],
comparable_array: [float_value]
)
end
def compare_arrays(a, b)
a.first <=> b.first # Direct float comparison
end
def render(version)
version.raw_string
end
end
# Register and use
Versionian.register_scheme(:floatver, FloatVerScheme.new)