versionomy 0.4.1 → 0.4.2
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.
- data/History.rdoc +4 -0
- data/Version +1 -1
- data/lib/versionomy.rb +19 -25
- data/lib/versionomy/conversion.rb +41 -41
- data/lib/versionomy/conversion/base.rb +31 -31
- data/lib/versionomy/conversion/parsing.rb +49 -49
- data/lib/versionomy/errors.rb +63 -63
- data/lib/versionomy/format.rb +51 -51
- data/lib/versionomy/format/base.rb +44 -44
- data/lib/versionomy/format/delimiter.rb +205 -205
- data/lib/versionomy/format_definitions/rubygems.rb +85 -85
- data/lib/versionomy/format_definitions/semver.rb +78 -78
- data/lib/versionomy/format_definitions/standard.rb +68 -68
- data/lib/versionomy/interface.rb +46 -46
- data/lib/versionomy/schema.rb +21 -21
- data/lib/versionomy/schema/field.rb +112 -112
- data/lib/versionomy/schema/wrapper.rb +91 -91
- data/lib/versionomy/value.rb +224 -180
- data/lib/versionomy/version.rb +9 -9
- data/test/tc_custom_format.rb +14 -14
- data/test/tc_readme_examples.rb +24 -24
- data/test/tc_rubygems_basic.rb +68 -68
- data/test/tc_rubygems_conversions.rb +46 -46
- data/test/tc_semver_basic.rb +62 -62
- data/test/tc_semver_conversions.rb +52 -52
- data/test/tc_standard_basic.rb +35 -35
- data/test/tc_standard_bump.rb +35 -35
- data/test/tc_standard_change.rb +20 -20
- data/test/tc_standard_comparison.rb +38 -38
- data/test/tc_standard_misc.rb +23 -23
- data/test/tc_standard_parse.rb +77 -77
- data/test/tc_standard_reset.rb +29 -29
- data/test/tc_version_of.rb +15 -15
- metadata +30 -34
@@ -1,15 +1,15 @@
|
|
1
1
|
# -----------------------------------------------------------------------------
|
2
|
-
#
|
2
|
+
#
|
3
3
|
# Versionomy standard format implementation
|
4
|
-
#
|
4
|
+
#
|
5
5
|
# -----------------------------------------------------------------------------
|
6
6
|
# Copyright 2008-2009 Daniel Azuma
|
7
|
-
#
|
7
|
+
#
|
8
8
|
# All rights reserved.
|
9
|
-
#
|
9
|
+
#
|
10
10
|
# Redistribution and use in source and binary forms, with or without
|
11
11
|
# modification, are permitted provided that the following conditions are met:
|
12
|
-
#
|
12
|
+
#
|
13
13
|
# * Redistributions of source code must retain the above copyright notice,
|
14
14
|
# this list of conditions and the following disclaimer.
|
15
15
|
# * Redistributions in binary form must reproduce the above copyright notice,
|
@@ -18,7 +18,7 @@
|
|
18
18
|
# * Neither the name of the copyright holder, nor the names of any other
|
19
19
|
# contributors to this software, may be used to endorse or promote products
|
20
20
|
# derived from this software without specific prior written permission.
|
21
|
-
#
|
21
|
+
#
|
22
22
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
23
23
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
24
24
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
@@ -35,55 +35,55 @@
|
|
35
35
|
|
36
36
|
|
37
37
|
module Versionomy
|
38
|
-
|
38
|
+
|
39
39
|
module Format
|
40
|
-
|
41
|
-
|
40
|
+
|
41
|
+
|
42
42
|
# Get the rubygems format.
|
43
43
|
# This is identical to calling <tt>get('rubygems')</tt>.
|
44
|
-
#
|
44
|
+
#
|
45
45
|
# The rubygems format is designed to be parse-compatible with the
|
46
46
|
# Gem::Version class used in rubygems. The only caveat is, whereas
|
47
47
|
# Gem::Version handles an arbitrary number of fields, this format is
|
48
48
|
# limited to a maximum of 8.
|
49
|
-
#
|
49
|
+
#
|
50
50
|
# For the exact annotated definition of the rubygems schema and format,
|
51
51
|
# see the source code for Versionomy::Format::Rubygems#create.
|
52
|
-
|
52
|
+
|
53
53
|
def self.rubygems
|
54
54
|
get('rubygems')
|
55
55
|
end
|
56
|
-
|
57
|
-
|
56
|
+
|
57
|
+
|
58
58
|
# This is a namespace for the implementation of the Rubygems schema
|
59
59
|
# and format.
|
60
|
-
|
60
|
+
|
61
61
|
module Rubygems
|
62
|
-
|
63
|
-
|
62
|
+
|
63
|
+
|
64
64
|
# Extra methods added to version values that use the rubygems schema.
|
65
|
-
|
65
|
+
|
66
66
|
module ExtraMethods
|
67
|
-
|
68
|
-
|
67
|
+
|
68
|
+
|
69
69
|
# Returns true if the version is a prerelease version-- that is,
|
70
70
|
# if any of the fields is non-numeric.
|
71
|
-
#
|
71
|
+
#
|
72
72
|
# This behaves the same as the Gem::Version#prerelease? method
|
73
73
|
# in rubygems.
|
74
|
-
|
74
|
+
|
75
75
|
def prerelease?
|
76
76
|
values_array.any?{ |val_| val_.kind_of?(::String) }
|
77
77
|
end
|
78
|
-
|
79
|
-
|
78
|
+
|
79
|
+
|
80
80
|
# Returns the release for this version.
|
81
81
|
# For example, converts "1.2.0.a.1" to "1.2.0".
|
82
82
|
# Non-prerelease versions return themselves.
|
83
|
-
#
|
83
|
+
#
|
84
84
|
# This behaves the same as the Gem::Version#release method
|
85
85
|
# in rubygems.
|
86
|
-
|
86
|
+
|
87
87
|
def release
|
88
88
|
values_ = []
|
89
89
|
self.each_field_object do |field_, val_|
|
@@ -92,14 +92,14 @@ module Versionomy
|
|
92
92
|
end
|
93
93
|
Value.new(values_, self.format, self.unparse_params)
|
94
94
|
end
|
95
|
-
|
96
|
-
|
95
|
+
|
96
|
+
|
97
97
|
# Returns a list of the field values, in field order, with
|
98
98
|
# trailing zeroes stripped off.
|
99
|
-
#
|
99
|
+
#
|
100
100
|
# This behaves the same as the Gem::Version#parts method
|
101
101
|
# in rubygems.
|
102
|
-
|
102
|
+
|
103
103
|
def parts
|
104
104
|
unless @parts
|
105
105
|
@parts = values_array
|
@@ -107,23 +107,23 @@ module Versionomy
|
|
107
107
|
end
|
108
108
|
@parts
|
109
109
|
end
|
110
|
-
|
111
|
-
|
110
|
+
|
111
|
+
|
112
112
|
end
|
113
|
-
|
114
|
-
|
113
|
+
|
114
|
+
|
115
115
|
# Create the rubygems format.
|
116
116
|
# This method is called internally when Versionomy loads the rubygems
|
117
117
|
# format, and you should not need to call it again. It is documented
|
118
118
|
# so that you can inspect its source code from RDoc, since the source
|
119
119
|
# contains useful examples of how to use the schema and format
|
120
120
|
# definition DSLs.
|
121
|
-
|
121
|
+
|
122
122
|
def self.create
|
123
|
-
|
123
|
+
|
124
124
|
# The following is the definition of the rubygems schema
|
125
125
|
schema_ = Schema.create do
|
126
|
-
|
126
|
+
|
127
127
|
# Global comparison function
|
128
128
|
to_compare_type(:string) do |a_, b_|
|
129
129
|
if a_.kind_of?(::Integer)
|
@@ -140,7 +140,7 @@ module Versionomy
|
|
140
140
|
end
|
141
141
|
end
|
142
142
|
end
|
143
|
-
|
143
|
+
|
144
144
|
# Global canonicalization function
|
145
145
|
to_canonicalize_type(:string) do |val_|
|
146
146
|
if val_.kind_of?(::Integer)
|
@@ -154,7 +154,7 @@ module Versionomy
|
|
154
154
|
end
|
155
155
|
end
|
156
156
|
end
|
157
|
-
|
157
|
+
|
158
158
|
# The first field has the default value of 1. All other fields
|
159
159
|
# have a default value of 0. Thus, the default version number
|
160
160
|
# overall is "1.0".
|
@@ -173,25 +173,25 @@ module Versionomy
|
|
173
173
|
end
|
174
174
|
end
|
175
175
|
end
|
176
|
-
|
176
|
+
|
177
177
|
# Some field aliases providing alternate names for major fields
|
178
178
|
alias_field(:major, :field0)
|
179
179
|
alias_field(:minor, :field1)
|
180
|
-
|
180
|
+
|
181
181
|
# Add the methods in this module to each value
|
182
182
|
add_module(Format::Rubygems::ExtraMethods)
|
183
183
|
end
|
184
|
-
|
184
|
+
|
185
185
|
# The following is the definition of the rubygems format. It
|
186
186
|
# understands the rubygems schema defined above.
|
187
187
|
format_ = Format::Delimiter.new(schema_) do
|
188
|
-
|
188
|
+
|
189
189
|
# All version number strings must start with the major version.
|
190
190
|
# Unlike other fields, it is not preceded by any delimiter.
|
191
191
|
field(:field0) do
|
192
192
|
recognize_number(:delimiter_regexp => '', :default_delimiter => '')
|
193
193
|
end
|
194
|
-
|
194
|
+
|
195
195
|
# The remainder of the version number are represented as strings
|
196
196
|
# or integers delimited by periods by default. Each is also
|
197
197
|
# dependent on the presence of the previous field, so
|
@@ -219,50 +219,50 @@ module Versionomy
|
|
219
219
|
field(:field7) do
|
220
220
|
recognize_regexp('[0-9a-zA-Z]+', :default_value_optional => true)
|
221
221
|
end
|
222
|
-
|
222
|
+
|
223
223
|
# By default, we require that at least the first two fields
|
224
224
|
# appear in an unparsed version string.
|
225
225
|
default_unparse_params(:required_fields => [:field1])
|
226
226
|
end
|
227
227
|
end
|
228
|
-
|
229
|
-
|
228
|
+
|
229
|
+
|
230
230
|
end
|
231
|
-
|
232
|
-
|
231
|
+
|
232
|
+
|
233
233
|
register('rubygems', Format::Rubygems.create, true)
|
234
|
-
|
235
|
-
|
234
|
+
|
235
|
+
|
236
236
|
end
|
237
|
-
|
238
|
-
|
237
|
+
|
238
|
+
|
239
239
|
module Conversion
|
240
|
-
|
241
|
-
|
240
|
+
|
241
|
+
|
242
242
|
# This is a namespace for the implementation of the conversion between
|
243
243
|
# the rubygems and standard formats.
|
244
|
-
|
244
|
+
|
245
245
|
module Rubygems
|
246
|
-
|
247
|
-
|
246
|
+
|
247
|
+
|
248
248
|
# Create the conversion from standard to rubygems format.
|
249
249
|
# This method is called internally when Versionomy loads the rubygems
|
250
250
|
# format, and you should not need to call it again. It is documented
|
251
251
|
# so that you can inspect its source code from RDoc, since the source
|
252
252
|
# contains useful examples of how to use the conversion DSLs.
|
253
|
-
|
253
|
+
|
254
254
|
def self.create_standard_to_rubygems
|
255
|
-
|
255
|
+
|
256
256
|
# We'll use a parsing conversion.
|
257
257
|
Conversion::Parsing.new do
|
258
|
-
|
258
|
+
|
259
259
|
# We're going to modify how the standard format version is
|
260
260
|
# unparsed, so the rubygems format will have a better chance
|
261
261
|
# of parsing it.
|
262
262
|
to_modify_unparse_params do |params_, convert_params_|
|
263
|
-
|
263
|
+
|
264
264
|
params_ ||= {}
|
265
|
-
|
265
|
+
|
266
266
|
# If the standard format version has a prerelease notation,
|
267
267
|
# make sure it is set off using a delimiter that the rubygems
|
268
268
|
# format can recognize. So instead of "1.0b2", we force the
|
@@ -273,49 +273,49 @@ module Versionomy
|
|
273
273
|
params_[:beta_version_delim] = '.'
|
274
274
|
params_[:release_candidate_version_delim] = '.'
|
275
275
|
params_[:preview_version_delim] = '.'
|
276
|
-
|
276
|
+
|
277
277
|
# If the standard format version has a patchlevel notation,
|
278
278
|
# force it to use the default number rather than letter style.
|
279
279
|
# So instead of "1.2c", we force the unparsing to generate
|
280
280
|
# "1.2-3".
|
281
281
|
params_[:patchlevel_style] = nil
|
282
|
-
|
282
|
+
|
283
283
|
# If the standard format version has a patchlevel notation,
|
284
284
|
# force it to use the default delimiter of "-" so the rubygems
|
285
285
|
# format will recognize it. So instead of "1.9.1p243", we force
|
286
286
|
# the unparsing to generate "1.9.1-243".
|
287
287
|
params_[:patchlevel_delim] = nil
|
288
|
-
|
288
|
+
|
289
289
|
# If the standard format version includes a "v" prefix, strip
|
290
290
|
# it because rubygems doesn't like it.
|
291
291
|
params_[:major_delim] = nil
|
292
|
-
|
292
|
+
|
293
293
|
params_
|
294
294
|
end
|
295
|
-
|
295
|
+
|
296
296
|
# Standard formats sometimes allow hyphens and spaces in field
|
297
297
|
# delimiters, but the rubygems format requires periods. So modify
|
298
298
|
# the unparsed string to conform to rubygems's expectations.
|
299
299
|
to_modify_string do |str_, convert_params_|
|
300
300
|
str_.gsub(/[\.\s-]+/, '.')
|
301
301
|
end
|
302
|
-
|
302
|
+
|
303
303
|
end
|
304
|
-
|
304
|
+
|
305
305
|
end
|
306
|
-
|
307
|
-
|
306
|
+
|
307
|
+
|
308
308
|
# Create the conversion from rubygems to standard format.
|
309
309
|
# This method is called internally when Versionomy loads the rubygems
|
310
310
|
# format, and you should not need to call it again. It is documented
|
311
311
|
# so that you can inspect its source code from RDoc, since the source
|
312
312
|
# contains useful examples of how to use the conversion DSLs.
|
313
|
-
|
313
|
+
|
314
314
|
def self.create_rubygems_to_standard
|
315
|
-
|
315
|
+
|
316
316
|
# We'll use a parsing conversion.
|
317
317
|
Conversion::Parsing.new do
|
318
|
-
|
318
|
+
|
319
319
|
# Handle the case where the rubygems version ends with a string
|
320
320
|
# field, e.g. "1.0.b". We want to treat this like "1.0b0" rather
|
321
321
|
# than "1.0-2" since the rubygems semantic states that this is a
|
@@ -324,20 +324,20 @@ module Versionomy
|
|
324
324
|
to_modify_string do |str_, convert_params_|
|
325
325
|
str_.gsub(/([[:alpha:]])\z/, '\10')
|
326
326
|
end
|
327
|
-
|
327
|
+
|
328
328
|
end
|
329
|
-
|
329
|
+
|
330
330
|
end
|
331
|
-
|
332
|
-
|
331
|
+
|
332
|
+
|
333
333
|
end
|
334
|
-
|
335
|
-
|
334
|
+
|
335
|
+
|
336
336
|
register(:standard, :rubygems, Conversion::Rubygems.create_standard_to_rubygems, true)
|
337
337
|
register(:rubygems, :standard, Conversion::Rubygems.create_rubygems_to_standard, true)
|
338
|
-
|
339
|
-
|
338
|
+
|
339
|
+
|
340
340
|
end
|
341
|
-
|
342
|
-
|
341
|
+
|
342
|
+
|
343
343
|
end
|
@@ -1,15 +1,15 @@
|
|
1
1
|
# -----------------------------------------------------------------------------
|
2
|
-
#
|
2
|
+
#
|
3
3
|
# Versionomy semver format implementation
|
4
|
-
#
|
4
|
+
#
|
5
5
|
# -----------------------------------------------------------------------------
|
6
6
|
# Copyright 2010 Daniel Azuma
|
7
|
-
#
|
7
|
+
#
|
8
8
|
# All rights reserved.
|
9
|
-
#
|
9
|
+
#
|
10
10
|
# Redistribution and use in source and binary forms, with or without
|
11
11
|
# modification, are permitted provided that the following conditions are met:
|
12
|
-
#
|
12
|
+
#
|
13
13
|
# * Redistributions of source code must retain the above copyright notice,
|
14
14
|
# this list of conditions and the following disclaimer.
|
15
15
|
# * Redistributions in binary form must reproduce the above copyright notice,
|
@@ -18,7 +18,7 @@
|
|
18
18
|
# * Neither the name of the copyright holder, nor the names of any other
|
19
19
|
# contributors to this software, may be used to endorse or promote products
|
20
20
|
# derived from this software without specific prior written permission.
|
21
|
-
#
|
21
|
+
#
|
22
22
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
23
23
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
24
24
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
@@ -35,78 +35,78 @@
|
|
35
35
|
|
36
36
|
|
37
37
|
module Versionomy
|
38
|
-
|
38
|
+
|
39
39
|
module Format
|
40
|
-
|
41
|
-
|
40
|
+
|
41
|
+
|
42
42
|
# Get the semver format.
|
43
43
|
# This is identical to calling <tt>get('semver')</tt>.
|
44
|
-
#
|
44
|
+
#
|
45
45
|
# The semver format is designed to conform to the Semantic Versioning
|
46
46
|
# spec by Tom Preston-Warner. See http://semver.org/
|
47
|
-
#
|
47
|
+
#
|
48
48
|
# For the exact annotated definition of the semver schema and format,
|
49
49
|
# see the source code for Versionomy::Format::Semver#create.
|
50
|
-
|
50
|
+
|
51
51
|
def self.semver
|
52
52
|
get('semver')
|
53
53
|
end
|
54
|
-
|
55
|
-
|
54
|
+
|
55
|
+
|
56
56
|
# This is a namespace for the implementation of the semver schema
|
57
57
|
# and format.
|
58
|
-
|
58
|
+
|
59
59
|
module Semver
|
60
|
-
|
61
|
-
|
60
|
+
|
61
|
+
|
62
62
|
# Extra methods added to version values that use the semver schema.
|
63
|
-
|
63
|
+
|
64
64
|
module ExtraMethods
|
65
|
-
|
66
|
-
|
65
|
+
|
66
|
+
|
67
67
|
# Returns true if the version is a prerelease version-- that is,
|
68
68
|
# if the prerelease_suffix is nonempty.
|
69
|
-
|
69
|
+
|
70
70
|
def prerelease?
|
71
71
|
prerelease_suffix.length > 0
|
72
72
|
end
|
73
|
-
|
74
|
-
|
73
|
+
|
74
|
+
|
75
75
|
# Returns the release for this version.
|
76
76
|
# For example, converts "1.2.0a1" to "1.2.0".
|
77
77
|
# Non-prerelease versions return themselves unchanged.
|
78
|
-
|
78
|
+
|
79
79
|
def release
|
80
80
|
prerelease? ? self.change(:prerelease_suffix => '') : self
|
81
81
|
end
|
82
|
-
|
83
|
-
|
82
|
+
|
83
|
+
|
84
84
|
# Returns true if this version is compatible with the given version,
|
85
85
|
# according to the Semantic Versioning specification.
|
86
86
|
# For example, 1.1.0 is compatible with 1.0.0 but not vice versa,
|
87
87
|
# 1.1.1 and 1.1.0 are compatible with each other, while 1.0.0 and
|
88
88
|
# 2.0.0 are mutually incompatible.
|
89
|
-
|
89
|
+
|
90
90
|
def compatible_with?(version_)
|
91
91
|
self.major == version_.major ? self.minor >= version_.minor : false
|
92
92
|
end
|
93
|
-
|
94
|
-
|
93
|
+
|
94
|
+
|
95
95
|
end
|
96
|
-
|
97
|
-
|
96
|
+
|
97
|
+
|
98
98
|
# Create the semver format.
|
99
99
|
# This method is called internally when Versionomy loads the semver
|
100
100
|
# format, and you should not need to call it again. It is documented
|
101
101
|
# so that you can inspect its source code from RDoc, since the source
|
102
102
|
# contains useful examples of how to use the schema and format
|
103
103
|
# definition DSLs.
|
104
|
-
|
104
|
+
|
105
105
|
def self.create
|
106
|
-
|
106
|
+
|
107
107
|
# The following is the definition of the semver schema
|
108
108
|
schema_ = Schema.create do
|
109
|
-
|
109
|
+
|
110
110
|
# The first field has the default value of 1. All other fields
|
111
111
|
# have a default value of 0. Thus, the default version number
|
112
112
|
# overall is "1.0".
|
@@ -121,25 +121,25 @@ module Versionomy
|
|
121
121
|
end
|
122
122
|
end
|
123
123
|
end
|
124
|
-
|
124
|
+
|
125
125
|
# An alias
|
126
126
|
alias_field(:special_suffix, :prerelease_suffix)
|
127
|
-
|
127
|
+
|
128
128
|
# Add the methods in this module to each value
|
129
129
|
add_module(Format::Semver::ExtraMethods)
|
130
130
|
end
|
131
|
-
|
131
|
+
|
132
132
|
# The following is the definition of the standard format. It
|
133
133
|
# understands the standard schema defined above.
|
134
134
|
format_ = Format::Delimiter.new(schema_) do
|
135
|
-
|
135
|
+
|
136
136
|
# All version number strings must start with the major version.
|
137
137
|
# Unlike other fields, it is not preceded by the usual "dot"
|
138
138
|
# delimiter, but it can be preceded by a "v" indicator.
|
139
139
|
field(:major) do
|
140
140
|
recognize_number(:delimiter_regexp => 'v?', :default_delimiter => '')
|
141
141
|
end
|
142
|
-
|
142
|
+
|
143
143
|
# The remainder of the core version number are represented as
|
144
144
|
# integers delimited by periods. These fields are required.
|
145
145
|
field(:minor) do
|
@@ -148,7 +148,7 @@ module Versionomy
|
|
148
148
|
field(:patch) do
|
149
149
|
recognize_number
|
150
150
|
end
|
151
|
-
|
151
|
+
|
152
152
|
# The optional prerelease field is represented as a string
|
153
153
|
# beginning with an alphabetic character.
|
154
154
|
field(:prerelease_suffix) do
|
@@ -157,37 +157,37 @@ module Versionomy
|
|
157
157
|
end
|
158
158
|
end
|
159
159
|
end
|
160
|
-
|
161
|
-
|
160
|
+
|
161
|
+
|
162
162
|
end
|
163
|
-
|
164
|
-
|
163
|
+
|
164
|
+
|
165
165
|
register('semver', Format::Semver.create, true)
|
166
|
-
|
167
|
-
|
166
|
+
|
167
|
+
|
168
168
|
end
|
169
|
-
|
170
|
-
|
169
|
+
|
170
|
+
|
171
171
|
module Conversion
|
172
|
-
|
173
|
-
|
172
|
+
|
173
|
+
|
174
174
|
# This is a namespace for the implementation of the conversion between
|
175
175
|
# the semver and standard formats.
|
176
|
-
|
176
|
+
|
177
177
|
module Semver
|
178
|
-
|
179
|
-
|
178
|
+
|
179
|
+
|
180
180
|
# Create the conversion from standard to semver format.
|
181
181
|
# This method is called internally when Versionomy loads the semver
|
182
182
|
# format, and you should not need to call it again. It is documented
|
183
183
|
# so that you can inspect its source code from RDoc, since the source
|
184
184
|
# contains useful examples of how to use the conversion DSLs.
|
185
|
-
|
185
|
+
|
186
186
|
def self.create_standard_to_semver
|
187
|
-
|
187
|
+
|
188
188
|
# We'll use a parsing conversion.
|
189
189
|
Conversion::Parsing.new do
|
190
|
-
|
190
|
+
|
191
191
|
# Sanity check the original value and make sure it doesn't
|
192
192
|
# include fields that we don't support.
|
193
193
|
to_modify_original_value do |value_, convert_params_|
|
@@ -199,16 +199,16 @@ module Versionomy
|
|
199
199
|
end
|
200
200
|
value_
|
201
201
|
end
|
202
|
-
|
202
|
+
|
203
203
|
# We're going to modify how the standard format version is
|
204
204
|
# unparsed, so the semver format will have a better chance
|
205
205
|
# of parsing it.
|
206
206
|
to_modify_unparse_params do |params_, convert_params_|
|
207
|
-
|
207
|
+
|
208
208
|
# All three fields are required
|
209
209
|
params_[:minor_required] = true
|
210
210
|
params_[:tiny_required] = true
|
211
|
-
|
211
|
+
|
212
212
|
# If the standard format version has a prerelease notation,
|
213
213
|
# make sure it isn't set off using a delimiter.
|
214
214
|
params_[:release_type_delim] = ''
|
@@ -222,29 +222,29 @@ module Versionomy
|
|
222
222
|
params_[:release_candidate_minor_delim] = '-'
|
223
223
|
params_[:preview_version_delim] = ''
|
224
224
|
params_[:preview_minor_delim] = '-'
|
225
|
-
|
225
|
+
|
226
226
|
# If the standard format version includes a "v" prefix, strip it
|
227
227
|
params_[:major_delim] = nil
|
228
|
-
|
228
|
+
|
229
229
|
params_
|
230
230
|
end
|
231
|
-
|
231
|
+
|
232
232
|
end
|
233
|
-
|
233
|
+
|
234
234
|
end
|
235
|
-
|
236
|
-
|
235
|
+
|
236
|
+
|
237
237
|
# Create the conversion from semver to standard format.
|
238
238
|
# This method is called internally when Versionomy loads the semver
|
239
239
|
# format, and you should not need to call it again. It is documented
|
240
240
|
# so that you can inspect its source code from RDoc, since the source
|
241
241
|
# contains useful examples of how to use the conversion DSLs.
|
242
|
-
|
242
|
+
|
243
243
|
def self.create_semver_to_standard
|
244
|
-
|
244
|
+
|
245
245
|
# We'll use a parsing conversion.
|
246
246
|
Conversion::Parsing.new do
|
247
|
-
|
247
|
+
|
248
248
|
# Handle the case where the semver version ends with a string
|
249
249
|
# field, e.g. "1.0b". We want to treat this like "1.0b0" rather
|
250
250
|
# than "1.0-2" since the semver semantic states that this is a
|
@@ -253,20 +253,20 @@ module Versionomy
|
|
253
253
|
to_modify_string do |str_, convert_params_|
|
254
254
|
str_.gsub(/([[:alpha:]])\z/, '\10')
|
255
255
|
end
|
256
|
-
|
256
|
+
|
257
257
|
end
|
258
|
-
|
258
|
+
|
259
259
|
end
|
260
|
-
|
261
|
-
|
260
|
+
|
261
|
+
|
262
262
|
end
|
263
|
-
|
264
|
-
|
263
|
+
|
264
|
+
|
265
265
|
register(:standard, :semver, Conversion::Semver.create_standard_to_semver, true)
|
266
266
|
register(:semver, :standard, Conversion::Semver.create_semver_to_standard, true)
|
267
|
-
|
268
|
-
|
267
|
+
|
268
|
+
|
269
269
|
end
|
270
|
-
|
271
|
-
|
270
|
+
|
271
|
+
|
272
272
|
end
|