versionomy 0.4.1 → 0.4.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
data/lib/versionomy/errors.rb
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
# -----------------------------------------------------------------------------
|
2
|
-
#
|
2
|
+
#
|
3
3
|
# Versionomy exceptions
|
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,126 +35,126 @@
|
|
35
35
|
|
36
36
|
|
37
37
|
module Versionomy
|
38
|
-
|
39
|
-
|
38
|
+
|
39
|
+
|
40
40
|
# This is a namespace for errors that can be thrown by Versionomy.
|
41
|
-
|
41
|
+
|
42
42
|
module Errors
|
43
|
-
|
44
|
-
|
43
|
+
|
44
|
+
|
45
45
|
# Base class for all Versionomy exceptions
|
46
|
-
|
46
|
+
|
47
47
|
class VersionomyError < ::RuntimeError
|
48
48
|
end
|
49
|
-
|
50
|
-
|
49
|
+
|
50
|
+
|
51
51
|
# This exception is raised if parsing failed.
|
52
|
-
|
52
|
+
|
53
53
|
class ParseError < VersionomyError
|
54
54
|
end
|
55
|
-
|
56
|
-
|
55
|
+
|
56
|
+
|
57
57
|
# This exception is raised if unparsing failed.
|
58
|
-
|
58
|
+
|
59
59
|
class UnparseError < VersionomyError
|
60
60
|
end
|
61
|
-
|
62
|
-
|
61
|
+
|
62
|
+
|
63
63
|
# This exception is raised if you try to set a value that is not
|
64
64
|
# allowed by the schema.
|
65
|
-
|
65
|
+
|
66
66
|
class IllegalValueError < VersionomyError
|
67
67
|
end
|
68
|
-
|
69
|
-
|
68
|
+
|
69
|
+
|
70
70
|
# This exception is raised if you try to perform a comparison
|
71
71
|
# between incompatible schemas.
|
72
|
-
|
72
|
+
|
73
73
|
class SchemaMismatchError < VersionomyError
|
74
74
|
end
|
75
|
-
|
76
|
-
|
75
|
+
|
76
|
+
|
77
77
|
# Base class for all Versionomy schema creation exceptions
|
78
|
-
|
78
|
+
|
79
79
|
class SchemaCreationError < VersionomyError
|
80
80
|
end
|
81
|
-
|
82
|
-
|
81
|
+
|
82
|
+
|
83
83
|
# This exception is raised during schema creation if you try to add
|
84
84
|
# the same symbol twice to the same symbolic field.
|
85
|
-
|
85
|
+
|
86
86
|
class SymbolRedefinedError < SchemaCreationError
|
87
87
|
end
|
88
|
-
|
89
|
-
|
88
|
+
|
89
|
+
|
90
90
|
# This exception is raised during schema creation if you try to
|
91
91
|
# create two fields covering overlapping ranges.
|
92
|
-
|
92
|
+
|
93
93
|
class RangeOverlapError < SchemaCreationError
|
94
94
|
end
|
95
|
-
|
96
|
-
|
95
|
+
|
96
|
+
|
97
97
|
# This exception is raised during schema creation if the range
|
98
98
|
# specification cannot be interpreted.
|
99
|
-
|
99
|
+
|
100
100
|
class RangeSpecificationError < SchemaCreationError
|
101
101
|
end
|
102
|
-
|
103
|
-
|
102
|
+
|
103
|
+
|
104
104
|
# This exception is raised during schema creation if you try to
|
105
105
|
# add a symbol to a non-symbolic schema.
|
106
|
-
|
106
|
+
|
107
107
|
class TypeMismatchError < SchemaCreationError
|
108
108
|
end
|
109
|
-
|
110
|
-
|
109
|
+
|
110
|
+
|
111
111
|
# This exception is raised during schema creation if you try to
|
112
112
|
# create a circular graph.
|
113
|
-
|
113
|
+
|
114
114
|
class CircularDescendantError < SchemaCreationError
|
115
115
|
end
|
116
|
-
|
117
|
-
|
116
|
+
|
117
|
+
|
118
118
|
# Base class for all Versionomy format creation exceptions.
|
119
|
-
|
119
|
+
|
120
120
|
class FormatCreationError < VersionomyError
|
121
121
|
end
|
122
|
-
|
123
|
-
|
122
|
+
|
123
|
+
|
124
124
|
# This exception is raised if you try to register a format
|
125
125
|
# with a name that has already been used.
|
126
|
-
|
126
|
+
|
127
127
|
class FormatRedefinedError < VersionomyError
|
128
128
|
end
|
129
|
-
|
130
|
-
|
129
|
+
|
130
|
+
|
131
131
|
# Raised by the Format registry if you try to retrieve a format with
|
132
132
|
# an unrecognized name in strict mode.
|
133
|
-
|
133
|
+
|
134
134
|
class UnknownFormatError < VersionomyError
|
135
135
|
end
|
136
|
-
|
137
|
-
|
136
|
+
|
137
|
+
|
138
138
|
# Raised when a conversion fails.
|
139
|
-
|
139
|
+
|
140
140
|
class ConversionError < VersionomyError
|
141
141
|
end
|
142
|
-
|
143
|
-
|
142
|
+
|
143
|
+
|
144
144
|
# Raised when a conversion fails because no conversion implementation
|
145
145
|
# was found.
|
146
|
-
|
146
|
+
|
147
147
|
class UnknownConversionError < ConversionError
|
148
148
|
end
|
149
|
-
|
150
|
-
|
149
|
+
|
150
|
+
|
151
151
|
# Raised when you try to register a conversion when one already
|
152
152
|
# exists for its schemas.
|
153
|
-
|
153
|
+
|
154
154
|
class ConversionRedefinedError < VersionomyError
|
155
155
|
end
|
156
|
-
|
157
|
-
|
156
|
+
|
157
|
+
|
158
158
|
end
|
159
|
-
|
159
|
+
|
160
160
|
end
|
data/lib/versionomy/format.rb
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
# -----------------------------------------------------------------------------
|
2
|
-
#
|
2
|
+
#
|
3
3
|
# Versionomy format namespace
|
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
|
@@ -39,30 +39,30 @@ require 'monitor'
|
|
39
39
|
|
40
40
|
|
41
41
|
module Versionomy
|
42
|
-
|
43
|
-
|
42
|
+
|
43
|
+
|
44
44
|
# === Version number format.
|
45
|
-
#
|
45
|
+
#
|
46
46
|
# A format controls the parsing and unparsing of a version number.
|
47
47
|
# Any time a version number is parsed from a string, a format is provided
|
48
48
|
# to parse it. Similarly, every version number value references a format
|
49
49
|
# that is used to unparse it back into a string.
|
50
|
-
#
|
50
|
+
#
|
51
51
|
# A format is always tied to a particular schema and knows how to parse
|
52
52
|
# only that schema's version numbers.
|
53
|
-
#
|
53
|
+
#
|
54
54
|
# Under many circumstances, you should use the standard format, which
|
55
55
|
# can be retrieved by calling Versionomy::Format#standard. This format
|
56
56
|
# understands most common version numbers, including prerelease
|
57
57
|
# (e.g. alpha, beta, release candidate, etc.) forms and patchlevels.
|
58
|
-
#
|
58
|
+
#
|
59
59
|
# You may also create your own formats, either by implementing the
|
60
60
|
# format contract (see Versionomy::Format::Base), or by using the
|
61
61
|
# Versionomy::Format::Delimiter tool, which can be used to construct
|
62
62
|
# parsers for many version number formats.
|
63
|
-
#
|
63
|
+
#
|
64
64
|
# === Format registry
|
65
|
-
#
|
65
|
+
#
|
66
66
|
# Formats may be registered with Versionomy and given a name using the
|
67
67
|
# methods of this module. This allows version numbers to be serialized
|
68
68
|
# with their format. When a version number is serialized, its format
|
@@ -70,14 +70,14 @@ module Versionomy
|
|
70
70
|
# representation. When the version number is reconstructed, its format
|
71
71
|
# is looked up by name so versionomy can determine how to parse the
|
72
72
|
# string.
|
73
|
-
#
|
73
|
+
#
|
74
74
|
# Format names are strings that may include letters, numerals, dashes,
|
75
75
|
# underscores, and periods. By convention, periods are used as namespace
|
76
76
|
# delimiters. Format names without a namespace (that is, with no periods)
|
77
77
|
# are considered reserved for standard versionomy formats. If you define
|
78
78
|
# your own format, you should use a name that includes a namespace (e.g.
|
79
79
|
# "mycompany.LibraryVersion") to reduce the chance of name collisions.
|
80
|
-
#
|
80
|
+
#
|
81
81
|
# You may register formats directly using the register method, or set it
|
82
82
|
# up to be autoloaded on demand. When a format is requested, if it has
|
83
83
|
# not been registered explicitly, Versionomy looks for a format definition
|
@@ -91,27 +91,27 @@ module Versionomy
|
|
91
91
|
# that defines the format and registers it using the correct name. See
|
92
92
|
# the files in the "lib/versionomy/format_definitions/" directory for
|
93
93
|
# examples.
|
94
|
-
|
94
|
+
|
95
95
|
module Format
|
96
|
-
|
96
|
+
|
97
97
|
@mutex = ::Mutex.new
|
98
98
|
@load_mutex = ::Monitor.new
|
99
99
|
@directories = [::File.expand_path(::File.dirname(__FILE__)+'/format_definitions')]
|
100
100
|
@names_to_formats = {}
|
101
101
|
@formats_to_names = {}
|
102
|
-
|
102
|
+
|
103
103
|
class << self
|
104
|
-
|
105
|
-
|
104
|
+
|
105
|
+
|
106
106
|
# Add a directory to the format path.
|
107
|
-
#
|
107
|
+
#
|
108
108
|
# The format path is an array of directory paths. These directories
|
109
109
|
# are searched for format definitions if a format name that has not
|
110
110
|
# been registered is requested.
|
111
|
-
#
|
111
|
+
#
|
112
112
|
# If high_priority_ is set to true, the directory is added to the
|
113
113
|
# front of the lookup path; otherwise it is added to the back.
|
114
|
-
|
114
|
+
|
115
115
|
def add_directory(path_, high_priority_=false)
|
116
116
|
path_ = ::File.expand_path(path_)
|
117
117
|
@mutex.synchronize do
|
@@ -124,18 +124,18 @@ module Versionomy
|
|
124
124
|
end
|
125
125
|
end
|
126
126
|
end
|
127
|
-
|
128
|
-
|
127
|
+
|
128
|
+
|
129
129
|
# Get the format with the given name.
|
130
|
-
#
|
130
|
+
#
|
131
131
|
# If the given name has not been defined, attempts to autoload it from
|
132
132
|
# a format definition file. See the description of the Format module
|
133
133
|
# for details on this procedure.
|
134
|
-
#
|
134
|
+
#
|
135
135
|
# If the given name still cannot be resolved, and strict is set to
|
136
136
|
# true, raises Versionomy::Errors::UnknownFormatError. If strict is
|
137
137
|
# set to false, returns nil if the given name cannot be resolved.
|
138
|
-
|
138
|
+
|
139
139
|
def get(name_, strict_=false)
|
140
140
|
name_ = _check_name(name_)
|
141
141
|
format_ = @mutex.synchronize{ @names_to_formats[name_] }
|
@@ -156,25 +156,25 @@ module Versionomy
|
|
156
156
|
end
|
157
157
|
format_
|
158
158
|
end
|
159
|
-
|
160
|
-
|
159
|
+
|
160
|
+
|
161
161
|
# Determines whether a format with the given name has been registered
|
162
162
|
# explicitly. Does not attempt to autoload the format.
|
163
|
-
|
163
|
+
|
164
164
|
def registered?(name_)
|
165
165
|
name_ = _check_name(name_)
|
166
166
|
@mutex.synchronize{ @names_to_formats.include?(name_) }
|
167
167
|
end
|
168
|
-
|
169
|
-
|
168
|
+
|
169
|
+
|
170
170
|
# Register the given format under the given name.
|
171
|
-
#
|
171
|
+
#
|
172
172
|
# Valid names may contain only letters, digits, underscores, dashes,
|
173
173
|
# and periods.
|
174
|
-
#
|
174
|
+
#
|
175
175
|
# Raises Versionomy::Errors::FormatRedefinedError if the name has
|
176
176
|
# already been defined.
|
177
|
-
|
177
|
+
|
178
178
|
def register(name_, format_, silent_=false)
|
179
179
|
name_ = _check_name(name_)
|
180
180
|
@mutex.synchronize do
|
@@ -188,15 +188,15 @@ module Versionomy
|
|
188
188
|
end
|
189
189
|
end
|
190
190
|
end
|
191
|
-
|
192
|
-
|
191
|
+
|
192
|
+
|
193
193
|
# Get the canonical name for the given format, as a string.
|
194
194
|
# This is the first name the format was registered under.
|
195
|
-
#
|
195
|
+
#
|
196
196
|
# If the given format was never registered, and strict is set to true,
|
197
197
|
# raises Versionomy::Errors::UnknownFormatError. If strict is set to
|
198
198
|
# false, returns nil if the given format was never registered.
|
199
|
-
|
199
|
+
|
200
200
|
def canonical_name_for(format_, strict_=false)
|
201
201
|
name_ = @mutex.synchronize{ @formats_to_names[format_.object_id] }
|
202
202
|
if name_.nil? && strict_
|
@@ -204,10 +204,10 @@ module Versionomy
|
|
204
204
|
end
|
205
205
|
name_
|
206
206
|
end
|
207
|
-
|
208
|
-
|
207
|
+
|
208
|
+
|
209
209
|
private
|
210
|
-
|
210
|
+
|
211
211
|
def _check_name(name_) # :nodoc:
|
212
212
|
name_ = name_.to_s
|
213
213
|
unless name_ =~ /\A[\w.-]+\z/
|
@@ -215,17 +215,17 @@ module Versionomy
|
|
215
215
|
end
|
216
216
|
name_
|
217
217
|
end
|
218
|
-
|
219
|
-
|
218
|
+
|
219
|
+
|
220
220
|
end
|
221
|
-
|
221
|
+
|
222
222
|
end
|
223
|
-
|
224
|
-
|
223
|
+
|
224
|
+
|
225
225
|
# Versionomy::Formats is an alias for Versionomy::Format, for backward
|
226
226
|
# compatibility with version 0.1.0 code. It is deprecated; use
|
227
227
|
# Versionomy::Format instead.
|
228
228
|
Formats = Format
|
229
|
-
|
230
|
-
|
229
|
+
|
230
|
+
|
231
231
|
end
|
@@ -1,15 +1,15 @@
|
|
1
1
|
# -----------------------------------------------------------------------------
|
2
|
-
#
|
2
|
+
#
|
3
3
|
# Versionomy format base class
|
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,74 +35,74 @@
|
|
35
35
|
|
36
36
|
|
37
37
|
module Versionomy
|
38
|
-
|
39
|
-
|
38
|
+
|
39
|
+
|
40
40
|
module Format
|
41
|
-
|
42
|
-
|
41
|
+
|
42
|
+
|
43
43
|
# The base format.
|
44
|
-
#
|
44
|
+
#
|
45
45
|
# This format doesn't actually do anything useful. It causes all strings
|
46
46
|
# to parse to the schema's default value, and unparses all values to the
|
47
47
|
# empty string. Instead, the purpose here is to define the API for a
|
48
48
|
# format.
|
49
|
-
#
|
49
|
+
#
|
50
50
|
# All formats must define the methods +schema+, +parse+, and +unparse+.
|
51
51
|
# It is also recommended that formats define the <tt>===</tt> method,
|
52
52
|
# though this is not strictly required. Finally, formats may optionally
|
53
53
|
# implement <tt>uparse_for_serialize</tt>.
|
54
|
-
#
|
54
|
+
#
|
55
55
|
# Formats need not extend this base class, as long as they duck-type
|
56
56
|
# these methods.
|
57
|
-
|
57
|
+
|
58
58
|
class Base
|
59
|
-
|
60
|
-
|
59
|
+
|
60
|
+
|
61
61
|
# Create an instance of this base format, with the given schema.
|
62
|
-
|
62
|
+
|
63
63
|
def initialize(schema_)
|
64
64
|
@_schema = schema_
|
65
65
|
end
|
66
|
-
|
67
|
-
|
66
|
+
|
67
|
+
|
68
68
|
def inspect # :nodoc:
|
69
69
|
"#<#{self.class}:0x#{object_id.to_s(16)} schema=#{@_schema.inspect}>"
|
70
70
|
end
|
71
|
-
|
71
|
+
|
72
72
|
def to_s # :nodoc:
|
73
73
|
inspect
|
74
74
|
end
|
75
|
-
|
76
|
-
|
75
|
+
|
76
|
+
|
77
77
|
# Returns the schema understood by this format.
|
78
|
-
|
78
|
+
|
79
79
|
def schema
|
80
80
|
@_schema
|
81
81
|
end
|
82
|
-
|
83
|
-
|
82
|
+
|
83
|
+
|
84
84
|
# Parse the given string and return a value.
|
85
|
-
#
|
85
|
+
#
|
86
86
|
# The optional parameter hash can be used to pass parameters to the
|
87
87
|
# parser to affect its behavior. The exact parameters supported are
|
88
88
|
# defined by the format.
|
89
|
-
|
89
|
+
|
90
90
|
def parse(string_, params_=nil)
|
91
91
|
Value.new([], self)
|
92
92
|
end
|
93
|
-
|
94
|
-
|
93
|
+
|
94
|
+
|
95
95
|
# Unparse the given value and return a string.
|
96
|
-
#
|
96
|
+
#
|
97
97
|
# The optional parameter hash can be used to pass parameters to the
|
98
98
|
# unparser to affect its behavior. The exact parameters supported
|
99
99
|
# are defined by the format.
|
100
|
-
|
100
|
+
|
101
101
|
def unparse(value_, params_=nil)
|
102
102
|
''
|
103
103
|
end
|
104
|
-
|
105
|
-
|
104
|
+
|
105
|
+
|
106
106
|
# An optional method that does unparsing especially for serialization.
|
107
107
|
# Implement this if normal unparsing is "lossy" and doesn't guarantee
|
108
108
|
# reconstruction of the version number. This method should attempt to
|
@@ -110,7 +110,7 @@ module Versionomy
|
|
110
110
|
# reconstructed from the unparsed string. Serialization routines will
|
111
111
|
# first attempt to call this method to unparse for serialization. If
|
112
112
|
# this method is not present, the normal unparse method will be used.
|
113
|
-
#
|
113
|
+
#
|
114
114
|
# Return either the unparsed string, or an array consisting of the
|
115
115
|
# unparsed string and a hash of parse params to pass to the parser
|
116
116
|
# when the string is to be reconstructed. You may also either return
|
@@ -118,17 +118,17 @@ module Versionomy
|
|
118
118
|
# cannot be done satisfactorily for serialization. In this case,
|
119
119
|
# serialization will be done using the raw value data rather than an
|
120
120
|
# unparsed string.
|
121
|
-
#
|
121
|
+
#
|
122
122
|
# This default implementation just turns around and calls unparse.
|
123
123
|
# Thus it is equivalent to the method not being present at all.
|
124
|
-
|
124
|
+
|
125
125
|
def unparse_for_serialization(value_)
|
126
126
|
unparse(value_)
|
127
127
|
end
|
128
|
-
|
129
|
-
|
128
|
+
|
129
|
+
|
130
130
|
# Determine whether the given value uses this format.
|
131
|
-
|
131
|
+
|
132
132
|
def ===(obj_)
|
133
133
|
if obj_.kind_of?(Value)
|
134
134
|
obj_.format == self
|
@@ -136,11 +136,11 @@ module Versionomy
|
|
136
136
|
obj_ == self
|
137
137
|
end
|
138
138
|
end
|
139
|
-
|
140
|
-
|
139
|
+
|
140
|
+
|
141
141
|
end
|
142
|
-
|
143
|
-
|
142
|
+
|
143
|
+
|
144
144
|
end
|
145
|
-
|
145
|
+
|
146
146
|
end
|