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.
Files changed (53) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/.rubocop.yml +8 -0
  4. data/CODE_OF_CONDUCT.md +132 -0
  5. data/README.adoc +874 -0
  6. data/Rakefile +12 -0
  7. data/docs/Gemfile +8 -0
  8. data/docs/_guides/custom-schemes.adoc +110 -0
  9. data/docs/_guides/index.adoc +12 -0
  10. data/docs/_pages/component-types.adoc +151 -0
  11. data/docs/_pages/declarative-schemes.adoc +260 -0
  12. data/docs/_pages/index.adoc +15 -0
  13. data/docs/_pages/range-matching.adoc +102 -0
  14. data/docs/_pages/schemes.adoc +68 -0
  15. data/docs/_references/api.adoc +251 -0
  16. data/docs/_references/index.adoc +13 -0
  17. data/docs/_references/schemes.adoc +410 -0
  18. data/docs/_tutorials/getting-started.adoc +119 -0
  19. data/docs/_tutorials/index.adoc +11 -0
  20. data/docs/index.adoc +287 -0
  21. data/lib/versionian/component_definition.rb +71 -0
  22. data/lib/versionian/component_types/base.rb +19 -0
  23. data/lib/versionian/component_types/date_part.rb +41 -0
  24. data/lib/versionian/component_types/enum.rb +32 -0
  25. data/lib/versionian/component_types/float.rb +23 -0
  26. data/lib/versionian/component_types/hash.rb +21 -0
  27. data/lib/versionian/component_types/integer.rb +23 -0
  28. data/lib/versionian/component_types/postfix.rb +51 -0
  29. data/lib/versionian/component_types/prerelease.rb +70 -0
  30. data/lib/versionian/component_types/registry.rb +35 -0
  31. data/lib/versionian/component_types/string.rb +21 -0
  32. data/lib/versionian/errors/invalid_scheme_error.rb +7 -0
  33. data/lib/versionian/errors/invalid_version_error.rb +7 -0
  34. data/lib/versionian/errors/parse_error.rb +7 -0
  35. data/lib/versionian/parsers/declarative.rb +214 -0
  36. data/lib/versionian/scheme_loader.rb +102 -0
  37. data/lib/versionian/scheme_registry.rb +34 -0
  38. data/lib/versionian/schemes/calver.rb +94 -0
  39. data/lib/versionian/schemes/composite.rb +82 -0
  40. data/lib/versionian/schemes/declarative.rb +138 -0
  41. data/lib/versionian/schemes/pattern.rb +236 -0
  42. data/lib/versionian/schemes/semantic.rb +136 -0
  43. data/lib/versionian/schemes/solover.rb +121 -0
  44. data/lib/versionian/schemes/wendtver.rb +141 -0
  45. data/lib/versionian/version.rb +6 -0
  46. data/lib/versionian/version_component.rb +28 -0
  47. data/lib/versionian/version_identifier.rb +121 -0
  48. data/lib/versionian/version_range.rb +61 -0
  49. data/lib/versionian/version_scheme.rb +68 -0
  50. data/lib/versionian.rb +64 -0
  51. data/lib/versius.rb +5 -0
  52. data/sig/versius.rbs +4 -0
  53. 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