versionub 0.0.2.4 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|