versionian 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.rspec +3 -0
- data/.rubocop.yml +8 -0
- data/CODE_OF_CONDUCT.md +132 -0
- data/README.adoc +874 -0
- data/Rakefile +12 -0
- data/docs/Gemfile +8 -0
- data/docs/_guides/custom-schemes.adoc +110 -0
- data/docs/_guides/index.adoc +12 -0
- data/docs/_pages/component-types.adoc +151 -0
- data/docs/_pages/declarative-schemes.adoc +260 -0
- data/docs/_pages/index.adoc +15 -0
- data/docs/_pages/range-matching.adoc +102 -0
- data/docs/_pages/schemes.adoc +68 -0
- data/docs/_references/api.adoc +251 -0
- data/docs/_references/index.adoc +13 -0
- data/docs/_references/schemes.adoc +410 -0
- data/docs/_tutorials/getting-started.adoc +119 -0
- data/docs/_tutorials/index.adoc +11 -0
- data/docs/index.adoc +287 -0
- data/lib/versionian/component_definition.rb +71 -0
- data/lib/versionian/component_types/base.rb +19 -0
- data/lib/versionian/component_types/date_part.rb +41 -0
- data/lib/versionian/component_types/enum.rb +32 -0
- data/lib/versionian/component_types/float.rb +23 -0
- data/lib/versionian/component_types/hash.rb +21 -0
- data/lib/versionian/component_types/integer.rb +23 -0
- data/lib/versionian/component_types/postfix.rb +51 -0
- data/lib/versionian/component_types/prerelease.rb +70 -0
- data/lib/versionian/component_types/registry.rb +35 -0
- data/lib/versionian/component_types/string.rb +21 -0
- data/lib/versionian/errors/invalid_scheme_error.rb +7 -0
- data/lib/versionian/errors/invalid_version_error.rb +7 -0
- data/lib/versionian/errors/parse_error.rb +7 -0
- data/lib/versionian/parsers/declarative.rb +214 -0
- data/lib/versionian/scheme_loader.rb +102 -0
- data/lib/versionian/scheme_registry.rb +34 -0
- data/lib/versionian/schemes/calver.rb +94 -0
- data/lib/versionian/schemes/composite.rb +82 -0
- data/lib/versionian/schemes/declarative.rb +138 -0
- data/lib/versionian/schemes/pattern.rb +236 -0
- data/lib/versionian/schemes/semantic.rb +136 -0
- data/lib/versionian/schemes/solover.rb +121 -0
- data/lib/versionian/schemes/wendtver.rb +141 -0
- data/lib/versionian/version.rb +6 -0
- data/lib/versionian/version_component.rb +28 -0
- data/lib/versionian/version_identifier.rb +121 -0
- data/lib/versionian/version_range.rb +61 -0
- data/lib/versionian/version_scheme.rb +68 -0
- data/lib/versionian.rb +64 -0
- data/lib/versius.rb +5 -0
- data/sig/versius.rbs +4 -0
- metadata +157 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: default
|
|
3
|
+
title: Version Schemes
|
|
4
|
+
nav_order: 1
|
|
5
|
+
parent: Core Topics
|
|
6
|
+
has_children: true
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
= Version Schemes
|
|
10
|
+
|
|
11
|
+
== Overview
|
|
12
|
+
|
|
13
|
+
Versionian supports a wide variety of versioning schemes, from well-established standards like
|
|
14
|
+
Semantic Versioning to specialized schemes like Calendar Versioning and SoloVer. This section
|
|
15
|
+
covers the built-in schemes and how to use them.
|
|
16
|
+
|
|
17
|
+
== Built-in Schemes
|
|
18
|
+
|
|
19
|
+
[cols="2,3,2"]
|
|
20
|
+
|===
|
|
21
|
+
|Name |Format |Status
|
|
22
|
+
|
|
23
|
+
| SemVer
|
|
24
|
+
| MAJOR.MINOR.PATCH[-PRERELEASE][+BUILD]
|
|
25
|
+
| Built-in
|
|
26
|
+
|
|
27
|
+
| CalVer
|
|
28
|
+
| YYYY.MM.DD, YYYY.MM, YY.MM.DD
|
|
29
|
+
| Built-in
|
|
30
|
+
|
|
31
|
+
| SoloVer
|
|
32
|
+
| N[+-postfix]
|
|
33
|
+
| Built-in
|
|
34
|
+
|
|
35
|
+
| WendtVer
|
|
36
|
+
| MAJOR.MINOR.PATCH
|
|
37
|
+
| Built-in
|
|
38
|
+
|
|
39
|
+
| Pattern
|
|
40
|
+
| Custom via YAML
|
|
41
|
+
| Built-in
|
|
42
|
+
|
|
43
|
+
| Composite
|
|
44
|
+
| Multiple formats
|
|
45
|
+
| Built-in
|
|
46
|
+
|
|
47
|
+
|===
|
|
48
|
+
|
|
49
|
+
== Usage
|
|
50
|
+
|
|
51
|
+
[source,ruby]
|
|
52
|
+
----
|
|
53
|
+
# Get a built-in scheme
|
|
54
|
+
scheme = Versionian.get_scheme(:semantic)
|
|
55
|
+
|
|
56
|
+
# Parse a version string
|
|
57
|
+
version = scheme.parse("1.12.0")
|
|
58
|
+
|
|
59
|
+
# Compare two versions
|
|
60
|
+
result = scheme.compare("1.12.0", "2.0.0") # => -1
|
|
61
|
+
|
|
62
|
+
# Build a version programmatically
|
|
63
|
+
version = scheme.build(major: 1, minor: 12, patch: 0)
|
|
64
|
+
----
|
|
65
|
+
|
|
66
|
+
== See Also
|
|
67
|
+
|
|
68
|
+
* link:../references/schemes.html[Scheme Reference] - Detailed documentation for all supported schemes
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: default
|
|
3
|
+
title: API Reference
|
|
4
|
+
nav_order: 2
|
|
5
|
+
parent: Reference
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
= API Reference
|
|
9
|
+
|
|
10
|
+
== Versionian Module
|
|
11
|
+
|
|
12
|
+
=== Module Methods
|
|
13
|
+
|
|
14
|
+
[cols="2,3"]
|
|
15
|
+
|===
|
|
16
|
+
|Method |Description
|
|
17
|
+
|
|
18
|
+
|#get_scheme(name)
|
|
19
|
+
|Get a registered scheme by name
|
|
20
|
+
|
|
21
|
+
|#register_scheme(name, scheme)
|
|
22
|
+
|Register a custom scheme
|
|
23
|
+
|
|
24
|
+
|#detect_scheme(version_string)
|
|
25
|
+
|Auto-detect scheme from version string
|
|
26
|
+
|===
|
|
27
|
+
|
|
28
|
+
=== Usage Example
|
|
29
|
+
|
|
30
|
+
[source,ruby]
|
|
31
|
+
----
|
|
32
|
+
# Get built-in scheme
|
|
33
|
+
scheme = Versionian.get_scheme(:semantic)
|
|
34
|
+
|
|
35
|
+
# Register custom scheme
|
|
36
|
+
Versionian.register_scheme(:custom, MyCustomScheme.new)
|
|
37
|
+
|
|
38
|
+
# Auto-detect
|
|
39
|
+
scheme = Versionian.detect_scheme("1.2.3")
|
|
40
|
+
----
|
|
41
|
+
|
|
42
|
+
== VersionIdentifier
|
|
43
|
+
|
|
44
|
+
The core model representing a version identifier.
|
|
45
|
+
|
|
46
|
+
=== Attributes
|
|
47
|
+
|
|
48
|
+
[cols="2,3"]
|
|
49
|
+
|===
|
|
50
|
+
|Attribute |Description
|
|
51
|
+
|
|
52
|
+
|#raw_string
|
|
53
|
+
|Original version string
|
|
54
|
+
|
|
55
|
+
|#scheme
|
|
56
|
+
|The scheme that parsed/built this version
|
|
57
|
+
|
|
58
|
+
|#components
|
|
59
|
+
|Array of VersionComponent objects
|
|
60
|
+
|
|
61
|
+
|#comparable_array
|
|
62
|
+
|Array used for comparison
|
|
63
|
+
|===
|
|
64
|
+
|
|
65
|
+
=== Methods
|
|
66
|
+
|
|
67
|
+
[cols="2,3"]
|
|
68
|
+
|===
|
|
69
|
+
|Method |Description
|
|
70
|
+
|
|
71
|
+
|#component(name)
|
|
72
|
+
|Get a component by name
|
|
73
|
+
|
|
74
|
+
|#matches_range?(range)
|
|
75
|
+
|Check if version matches a range
|
|
76
|
+
|
|
77
|
+
|#to_s
|
|
78
|
+
|Render version as string
|
|
79
|
+
|===
|
|
80
|
+
|
|
81
|
+
=== Class Methods
|
|
82
|
+
|
|
83
|
+
[cols="2,3"]
|
|
84
|
+
|===
|
|
85
|
+
|Method |Description
|
|
86
|
+
|
|
87
|
+
|#build(scheme:, components:)
|
|
88
|
+
|Build a version programmatically
|
|
89
|
+
|===
|
|
90
|
+
|
|
91
|
+
== VersionScheme
|
|
92
|
+
|
|
93
|
+
Abstract base class for all version schemes.
|
|
94
|
+
|
|
95
|
+
=== Instance Methods
|
|
96
|
+
|
|
97
|
+
[cols="2,3"]
|
|
98
|
+
|===
|
|
99
|
+
|Method |Description
|
|
100
|
+
|
|
101
|
+
|#parse(version_string)
|
|
102
|
+
|Parse a string into VersionIdentifier (abstract)
|
|
103
|
+
|
|
104
|
+
|#render(version)
|
|
105
|
+
|Render version to string (default: returns raw_string)
|
|
106
|
+
|
|
107
|
+
|#compare_arrays(a, b)
|
|
108
|
+
|Compare two comparable arrays
|
|
109
|
+
|
|
110
|
+
|#compare(a, b)
|
|
111
|
+
|Compare two version strings
|
|
112
|
+
|
|
113
|
+
|#valid?(version_string)
|
|
114
|
+
|Check if string is valid for this scheme
|
|
115
|
+
|
|
116
|
+
|#build(**components)
|
|
117
|
+
|Build a version from component values
|
|
118
|
+
|===
|
|
119
|
+
|
|
120
|
+
=== Subclassing Guidelines
|
|
121
|
+
|
|
122
|
+
When creating a custom scheme, you must:
|
|
123
|
+
|
|
124
|
+
. Implement `#parse(version_string)`
|
|
125
|
+
. Optionally override `#compare_arrays(a, b)` for custom comparison logic
|
|
126
|
+
. Optionally override `#render(version)` for custom rendering
|
|
127
|
+
|
|
128
|
+
== VersionComponent
|
|
129
|
+
|
|
130
|
+
Represents a single component in a version.
|
|
131
|
+
|
|
132
|
+
=== Attributes
|
|
133
|
+
|
|
134
|
+
[cols="2,3"]
|
|
135
|
+
|===
|
|
136
|
+
|Attribute |Description
|
|
137
|
+
|
|
138
|
+
|#name
|
|
139
|
+
|Symbol identifying the component
|
|
140
|
+
|
|
141
|
+
|#type
|
|
142
|
+
|Component type (integer, string, enum, etc.)
|
|
143
|
+
|
|
144
|
+
|#value
|
|
145
|
+
|The parsed value
|
|
146
|
+
|
|
147
|
+
|#weight
|
|
148
|
+
|Numeric weight for comparison
|
|
149
|
+
|
|
150
|
+
|#values
|
|
151
|
+
|For enum: allowed values
|
|
152
|
+
|
|
153
|
+
|#order
|
|
154
|
+
|For enum: sort order
|
|
155
|
+
|
|
156
|
+
|#definition
|
|
157
|
+
|ComponentDefinition reference
|
|
158
|
+
|===
|
|
159
|
+
|
|
160
|
+
== VersionRange
|
|
161
|
+
|
|
162
|
+
Represents a version range for matching.
|
|
163
|
+
|
|
164
|
+
=== Constructor
|
|
165
|
+
|
|
166
|
+
[source,ruby]
|
|
167
|
+
----
|
|
168
|
+
# Types:
|
|
169
|
+
# :equals - Match exact version
|
|
170
|
+
# :before - Less than boundary
|
|
171
|
+
# :after - Greater than or equal to boundary
|
|
172
|
+
# :between - Inclusive range
|
|
173
|
+
|
|
174
|
+
range = Versionian::VersionRange.new(:after, scheme, version: "1.0.0")
|
|
175
|
+
----
|
|
176
|
+
|
|
177
|
+
=== Methods
|
|
178
|
+
|
|
179
|
+
[cols="2,3"]
|
|
180
|
+
|===
|
|
181
|
+
|Method |Description
|
|
182
|
+
|
|
183
|
+
|#matches?(version_string)
|
|
184
|
+
|Check if version string matches the range
|
|
185
|
+
|
|
186
|
+
|#includes?(version)
|
|
187
|
+
|Check if VersionIdentifier matches the range
|
|
188
|
+
|===
|
|
189
|
+
|
|
190
|
+
== SchemeLoader
|
|
191
|
+
|
|
192
|
+
Load schemes from YAML configuration.
|
|
193
|
+
|
|
194
|
+
=== Class Methods
|
|
195
|
+
|
|
196
|
+
[cols="2,3"]
|
|
197
|
+
|===
|
|
198
|
+
|Method |Description
|
|
199
|
+
|
|
200
|
+
|#from_yaml_file(path)
|
|
201
|
+
|Load scheme from YAML file
|
|
202
|
+
|
|
203
|
+
|#from_yaml_string(yaml_string)
|
|
204
|
+
|Load scheme from YAML string
|
|
205
|
+
|
|
206
|
+
|#from_hash(data)
|
|
207
|
+
|Load scheme from Hash
|
|
208
|
+
|===
|
|
209
|
+
|
|
210
|
+
=== YAML Schema
|
|
211
|
+
|
|
212
|
+
[source,yaml]
|
|
213
|
+
----
|
|
214
|
+
name: scheme_name
|
|
215
|
+
type: pattern
|
|
216
|
+
pattern: '^(\\d+)\\.(\\d+)$'
|
|
217
|
+
format_template: '{major}.{minor}'
|
|
218
|
+
components:
|
|
219
|
+
- name: major
|
|
220
|
+
type: integer
|
|
221
|
+
- name: minor
|
|
222
|
+
type: integer
|
|
223
|
+
----
|
|
224
|
+
|
|
225
|
+
== Component Types Registry
|
|
226
|
+
|
|
227
|
+
Register and resolve component types.
|
|
228
|
+
|
|
229
|
+
=== Module Methods
|
|
230
|
+
|
|
231
|
+
[cols="2,3"]
|
|
232
|
+
|===
|
|
233
|
+
|Method |Description
|
|
234
|
+
|
|
235
|
+
|#register(name, type_class)
|
|
236
|
+
|Register a component type
|
|
237
|
+
|
|
238
|
+
|#resolve(type)
|
|
239
|
+
|Resolve type symbol to class
|
|
240
|
+
|===
|
|
241
|
+
|
|
242
|
+
=== Built-in Types
|
|
243
|
+
|
|
244
|
+
* `:integer` - Versionian::ComponentTypes::Integer
|
|
245
|
+
* `:float` - Versionian::ComponentTypes::Float
|
|
246
|
+
* `:enum` - Versionian::ComponentTypes::Enum
|
|
247
|
+
* `:string` - Versionian::ComponentTypes::String
|
|
248
|
+
* `:date_part` - Versionian::ComponentTypes::DatePart
|
|
249
|
+
* `:prerelease` - Versionian::ComponentTypes::Prerelease
|
|
250
|
+
* `:postfix` - Versionian::ComponentTypes::Postfix
|
|
251
|
+
* `:hash` - Versionian::ComponentTypes::Hash
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: default
|
|
3
|
+
title: Overview
|
|
4
|
+
nav_order: 1
|
|
5
|
+
has_children: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
= Reference
|
|
9
|
+
|
|
10
|
+
Detailed technical documentation and API references.
|
|
11
|
+
|
|
12
|
+
* link:schemes.html[Versioning Schemes] - Complete documentation for all supported schemes
|
|
13
|
+
* link:api.html[API Reference] - Complete API documentation
|