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.
@@ -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
- parser do
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
- (separator >> part.as(:minor)).maybe >>
30
- (separator >> part.as(:tiny)).maybe >>
30
+ (dot >> part.as(:minor)).maybe >>
31
+ (dot >> part.as(:tiny)).maybe >>
31
32
 
32
- (separator.maybe >> (match['a-z'] >> match['0-9a-z'].absent? | part).as(:bugfix)).maybe >>
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
- root :version
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].to_s if @data[:major] && !@data[:major].is_a?(Array)
79
+ @data[:major].to_i
57
80
  end
58
81
 
59
82
  def minor
60
- @data[:minor].to_s if @data[:minor] && !@data[:minor].is_a?(Array)
83
+ @data[:minor].to_i
61
84
  end
62
85
 
63
86
  def tiny
64
- @data[:tiny].to_s if @data[:tiny] && !@data[:tiny].is_a?(Array)
87
+ @data[:tiny].to_i
65
88
  end
66
89
 
67
90
  def bugfix
68
- @data[:bugfix].to_s if @data[:bugfix] && !@data[:bugfix].is_a?(Array)
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].to_s if @data[:patch] && !@data[:patch].is_a?(Array)
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[:rc].is_a?(Array) ? '0' : @data[:rc].to_s
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].is_a?(Array) ? '0' : @data[:development].to_s
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].is_a?(Array) ? '0' : @data[:alpha].to_s
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].is_a?(Array) ? '0' : @data[:beta].to_s
89
- end; alias b beta
90
-
91
- def major?; !!major; end
92
- def minor?; !!minor; end
93
- def tiny?; !!tiny; end
94
- def bugfix?; !!bugfix; end
95
- def patch?; !!patch; end
96
- def release_candidate?; !!rc; end
97
- def development?; !!development; end
98
- def alpha?; !!alpha; end
99
- def beta?; !!beta; end
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
- if value.bugfix? && (tmp = bugfix.to_i <=> value.bugfix.to_i) != 0
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
- if value.tiny? && (tmp = tiny.to_i <=> value.tiny.to_i) != 0
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
- if value.minor? && (tmp = minor.to_i <=> value.minor.to_i) != 0
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
- if value.major? && (tmp = major.to_i <=> value.major.to_i) != 0
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.to_i <=> value.patch.to_i
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.to_i <=> value.release_candidate.to_i
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.to_i <=> value.beta.to_i
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.to_i <=> value.alpha.to_i
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
@@ -18,7 +18,7 @@
18
18
  #++
19
19
 
20
20
  Versionub.register :windows do
21
- parser do
21
+ parse do
22
22
  rule(:part) { match['0-9'].repeat }
23
23
 
24
24
  rule(:separator) { match['.-_\s'] }
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
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: versionub
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.2.4
5
+ version: 0.0.3
6
6
  platform: ruby
7
7
  authors:
8
8
  - meh.