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.
@@ -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.