versionub 0.0.2.4 → 0.0.3
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/lib/versionub/type.rb +27 -19
- data/lib/versionub/types/standard.rb +91 -61
- data/lib/versionub/types/windows.rb +1 -1
- data/lib/versionub.rb +6 -0
- metadata +1 -1
data/lib/versionub/type.rb
CHANGED
@@ -23,24 +23,6 @@ module Versionub
|
|
23
23
|
|
24
24
|
class Type
|
25
25
|
class Instance
|
26
|
-
def self.parser (&block)
|
27
|
-
if block
|
28
|
-
@parser = Class.new(Parslet::Parser)
|
29
|
-
@parser.class_eval(&block)
|
30
|
-
end
|
31
|
-
|
32
|
-
@parser
|
33
|
-
end
|
34
|
-
|
35
|
-
def self.transformer (&block)
|
36
|
-
if block
|
37
|
-
@transformer = Class.new(Parslet::Transform)
|
38
|
-
@transformer.class_eval(&block)
|
39
|
-
end
|
40
|
-
|
41
|
-
@transformer
|
42
|
-
end
|
43
|
-
|
44
26
|
attr_reader :type
|
45
27
|
|
46
28
|
def initialize (type, text, data)
|
@@ -56,6 +38,28 @@ class Type
|
|
56
38
|
def to_s
|
57
39
|
@text
|
58
40
|
end
|
41
|
+
|
42
|
+
class << self
|
43
|
+
attr_accessor :parser, :transformer
|
44
|
+
|
45
|
+
def parse (&block)
|
46
|
+
if block
|
47
|
+
@parser = Class.new(Parslet::Parser)
|
48
|
+
@parser.class_eval(&block)
|
49
|
+
end
|
50
|
+
|
51
|
+
@parser
|
52
|
+
end
|
53
|
+
|
54
|
+
def transform (&block)
|
55
|
+
if block
|
56
|
+
@transformer = Class.new(Parslet::Transform)
|
57
|
+
@transformer.class_eval(&block)
|
58
|
+
end
|
59
|
+
|
60
|
+
@transformer
|
61
|
+
end
|
62
|
+
end
|
59
63
|
end
|
60
64
|
|
61
65
|
attr_reader :name
|
@@ -71,11 +75,15 @@ class Type
|
|
71
75
|
data = @instance.parser.new.parse(text)
|
72
76
|
|
73
77
|
if @instance.transformer
|
74
|
-
data = @instance.transformer.apply(data)
|
78
|
+
data = @instance.transformer.new.apply(data)
|
75
79
|
end
|
76
80
|
|
77
81
|
@instance.new(name, text, data)
|
78
82
|
end
|
83
|
+
|
84
|
+
def create (data)
|
85
|
+
@instance.new(name, nil, data)
|
86
|
+
end
|
79
87
|
end
|
80
88
|
|
81
89
|
end
|
@@ -18,23 +18,21 @@
|
|
18
18
|
#++
|
19
19
|
|
20
20
|
Versionub.register :standard do
|
21
|
-
|
21
|
+
parse do
|
22
22
|
rule(:part) { match['0-9'].repeat }
|
23
23
|
|
24
|
+
rule(:dot) { str('.') }
|
24
25
|
rule(:separator) { match['.\-_\s'] }
|
25
26
|
|
26
27
|
rule(:version) {
|
27
28
|
part.as(:major) >>
|
28
29
|
|
29
|
-
(
|
30
|
-
(
|
30
|
+
(dot >> part.as(:minor)).maybe >>
|
31
|
+
(dot >> part.as(:tiny)).maybe >>
|
31
32
|
|
32
|
-
(
|
33
|
+
(dot.maybe >> (match['a-z'] >> match['0-9a-z'].absent? | part).as(:bugfix)).maybe >>
|
33
34
|
|
34
35
|
(separator.maybe >> (
|
35
|
-
((str('patch') | str('p')) >>
|
36
|
-
(part.as(:patch) | any.as(:patch))) |
|
37
|
-
|
38
36
|
((str('development') | str('dev') | str('d')) >>
|
39
37
|
(part.as(:development) | any.as(:development))) |
|
40
38
|
|
@@ -45,128 +43,160 @@ Versionub.register :standard do
|
|
45
43
|
(part.as(:beta) | any.as(:beta))) |
|
46
44
|
|
47
45
|
((str('rc')) >>
|
48
|
-
(part.as(:rc) | any.as(:rc)))
|
46
|
+
(part.as(:rc) | any.as(:rc))) |
|
47
|
+
|
48
|
+
((str('patch') | str('p')).maybe >>
|
49
|
+
(part.as(:patch) | any.as(:patch)))
|
49
50
|
).maybe)
|
50
51
|
}
|
51
|
-
|
52
|
-
|
52
|
+
|
53
|
+
rule(:whole) {
|
54
|
+
version.as(:version)
|
55
|
+
}
|
56
|
+
|
57
|
+
root :whole
|
58
|
+
end
|
59
|
+
|
60
|
+
transform do
|
61
|
+
rule(version: subtree(:version)) {
|
62
|
+
version.dup.each {|name, value|
|
63
|
+
version[name] = case value
|
64
|
+
when Array then nil
|
65
|
+
when Parslet::Slice then value.to_s
|
66
|
+
else value
|
67
|
+
end
|
68
|
+
|
69
|
+
if !version[name]
|
70
|
+
version.delete(name)
|
71
|
+
end
|
72
|
+
}
|
73
|
+
|
74
|
+
version
|
75
|
+
}
|
53
76
|
end
|
54
77
|
|
55
78
|
def major
|
56
|
-
@data[:major].
|
79
|
+
@data[:major].to_i
|
57
80
|
end
|
58
81
|
|
59
82
|
def minor
|
60
|
-
@data[:minor].
|
83
|
+
@data[:minor].to_i
|
61
84
|
end
|
62
85
|
|
63
86
|
def tiny
|
64
|
-
@data[:tiny].
|
87
|
+
@data[:tiny].to_i
|
65
88
|
end
|
66
89
|
|
67
90
|
def bugfix
|
68
|
-
|
91
|
+
if @data[:bugfix] && @data[:bugfix].match(/[^0-9]/)
|
92
|
+
@data[:bugfix]
|
93
|
+
else
|
94
|
+
@data[:bugfix].to_i
|
95
|
+
end
|
69
96
|
end; alias tiny2 bugfix
|
70
97
|
|
71
98
|
def patch
|
72
|
-
@data[:patch].
|
73
|
-
end; alias p patch
|
99
|
+
@data[:patch].to_i
|
100
|
+
end; alias p patch; alias patchlevel patch
|
74
101
|
|
75
102
|
def release_candidate
|
76
|
-
@data[:
|
103
|
+
@data[:release_candidate].to_i if @data[:release_candidate]
|
77
104
|
end; alias rc release_candidate
|
78
105
|
|
79
106
|
def development
|
80
|
-
@data[:development].
|
107
|
+
@data[:development].to_i if @data[:development]
|
81
108
|
end; alias d development; alias dev development;
|
82
109
|
|
83
110
|
def alpha
|
84
|
-
@data[:alpha].
|
85
|
-
end; alias a alpha; alias alfa alpha
|
111
|
+
@data[:alpha].to_i if @data[:alpha]
|
112
|
+
end; alias a alpha; alias alfa alpha; alias alpha_version alpha
|
86
113
|
|
87
114
|
def beta
|
88
|
-
@data[:beta].
|
89
|
-
end; alias b beta
|
90
|
-
|
91
|
-
def
|
92
|
-
def
|
93
|
-
def
|
94
|
-
def
|
95
|
-
def
|
96
|
-
|
97
|
-
def
|
98
|
-
|
99
|
-
|
115
|
+
@data[:beta].to_i if @data[:beta]
|
116
|
+
end; alias b beta; alias beta_version beta
|
117
|
+
|
118
|
+
def patch?; !!@data[:patch]; end
|
119
|
+
def release_candidate?; !!@data[:rc]; end
|
120
|
+
def development?; !!@data[:development]; end
|
121
|
+
def alpha?; !!@data[:alpha]; end
|
122
|
+
def beta?; !!@data[:beta]; end
|
123
|
+
|
124
|
+
def release_type
|
125
|
+
return :alpha if alpha?
|
126
|
+
return :beta if beta?
|
127
|
+
return :patch if patch?
|
128
|
+
return :development if development?
|
129
|
+
return :release_candidate if release_candidate?
|
130
|
+
return :final
|
131
|
+
end
|
100
132
|
|
101
133
|
include Comparable
|
102
134
|
|
103
135
|
def <=> (value)
|
104
|
-
value = Versionub.parse(value)
|
136
|
+
value = Versionub.parse(value, type)
|
105
137
|
|
106
|
-
if bugfix
|
107
|
-
|
108
|
-
return tmp
|
109
|
-
else
|
110
|
-
return 1
|
111
|
-
end
|
112
|
-
elsif value.bugfix?
|
113
|
-
return -1
|
138
|
+
if (tmp = bugfix <=> value.bugfix) != 0
|
139
|
+
return tmp
|
114
140
|
end
|
115
141
|
|
116
|
-
if tiny
|
117
|
-
|
118
|
-
return tmp
|
119
|
-
end
|
120
|
-
elsif value.tiny?
|
121
|
-
return -1
|
142
|
+
if (tmp = tiny <=> value.tiny) != 0
|
143
|
+
return tmp
|
122
144
|
end
|
123
145
|
|
124
|
-
if minor
|
125
|
-
|
126
|
-
return tmp
|
127
|
-
end
|
128
|
-
elsif value.minor?
|
129
|
-
return -1
|
146
|
+
if (tmp = minor <=> value.minor) != 0
|
147
|
+
return tmp
|
130
148
|
end
|
131
149
|
|
132
|
-
if major
|
133
|
-
|
134
|
-
return tmp
|
135
|
-
end
|
150
|
+
if (tmp = major <=> value.major) != 0
|
151
|
+
return tmp
|
136
152
|
end
|
137
153
|
|
138
154
|
if patch?
|
139
155
|
if value.patch?
|
140
|
-
return patch
|
156
|
+
return patch <=> value.patch
|
141
157
|
else
|
142
158
|
return 1
|
143
159
|
end
|
160
|
+
elsif value.patch?
|
161
|
+
return -1
|
144
162
|
end
|
145
163
|
|
146
164
|
if release_candidate?
|
147
165
|
if value.release_candidate?
|
148
|
-
return release_candidate
|
166
|
+
return release_candidate <=> value.release_candidate
|
149
167
|
else
|
150
168
|
return -1
|
151
169
|
end
|
170
|
+
elsif value.release_candidate?
|
171
|
+
return 1
|
152
172
|
end
|
153
173
|
|
154
174
|
if beta?
|
155
175
|
if value.beta?
|
156
|
-
return beta
|
176
|
+
return beta <=> value.beta
|
157
177
|
else
|
158
178
|
return -1
|
159
179
|
end
|
180
|
+
elsif value.beta?
|
181
|
+
return 1
|
160
182
|
end
|
161
183
|
|
162
184
|
if alpha?
|
163
185
|
if value.alpha?
|
164
|
-
return alpha
|
186
|
+
return alpha <=> value.alpha
|
165
187
|
else
|
166
188
|
return -1
|
167
189
|
end
|
190
|
+
elsif value.alpha?
|
191
|
+
return 1
|
168
192
|
end
|
169
193
|
|
170
194
|
0
|
171
195
|
end
|
196
|
+
|
197
|
+
def to_s
|
198
|
+
return super if @text
|
199
|
+
|
200
|
+
"#{major}.#{minor}.#{tiny}"
|
201
|
+
end
|
172
202
|
end
|
data/lib/versionub.rb
CHANGED
@@ -21,9 +21,15 @@ module Versionub
|
|
21
21
|
Types = {}
|
22
22
|
|
23
23
|
def self.parse (text, type=:standard)
|
24
|
+
return text if text.is_a?(Versionub::Type::Instance)
|
25
|
+
|
24
26
|
Types[type.to_sym].parse(text.to_s)
|
25
27
|
end
|
26
28
|
|
29
|
+
def self.create (data, type=:standard)
|
30
|
+
Types[type.to_sym].create(data)
|
31
|
+
end
|
32
|
+
|
27
33
|
def self.register (type, &block)
|
28
34
|
Types[type.to_sym] = Versionub::Type.new(type.to_sym, &block)
|
29
35
|
end
|