inum 5.0.0 → 5.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/inum/base.rb +25 -10
- data/lib/inum/version.rb +1 -1
- data/spec/inum/base_spec.rb +64 -16
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e23a5e942d7583617ddbcd45931e9d4850394efe
|
4
|
+
data.tar.gz: 5b2ddbd32432205959846d2199390b331ff8a123
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5a4753423085581b73eba9cdea2eb01310abc255f72f2385cf09b35451eb08f7e4d6503576f9e4612647e6b215975124a77b88a0feb8ee154dad466a8c71957a
|
7
|
+
data.tar.gz: 8338f1d3b44ca69bfd43e34d33828b95968d7a66decdb777f8aefba3824ea91b081bad13718f054b363e150a2fb0877aada60f0a5309545093f4ae2cf107e654
|
data/lib/inum/base.rb
CHANGED
@@ -21,14 +21,13 @@ module Inum
|
|
21
21
|
# @param label [Symbol] label of Enum.
|
22
22
|
# @param value [Integer] value of Enum.
|
23
23
|
def initialize(label, value)
|
24
|
-
@label
|
25
|
-
@label_string
|
26
|
-
@label_downcase
|
27
|
-
@label_upcase
|
28
|
-
@
|
29
|
-
|
30
|
-
@
|
31
|
-
@underscore_label = ActiveSupport::Inflector.underscore(label).gsub('/', '.')
|
24
|
+
@label = label.freeze
|
25
|
+
@label_string = label.to_s.freeze
|
26
|
+
@label_downcase = @label_string.downcase.freeze
|
27
|
+
@label_upcase = @label_string.upcase.freeze
|
28
|
+
@label_underscore = ActiveSupport::Inflector.underscore(label).gsub('/', '.').freeze
|
29
|
+
@value = value.freeze
|
30
|
+
@i18n_namespace = (self.class.name ? ActiveSupport::Inflector.underscore(self.class.name).gsub('/', '.') : '').freeze
|
32
31
|
end
|
33
32
|
|
34
33
|
# Compare object.
|
@@ -95,12 +94,19 @@ module Inum
|
|
95
94
|
@label_upcase
|
96
95
|
end
|
97
96
|
|
97
|
+
# Underscore label.
|
98
|
+
#
|
99
|
+
# @return [String] underscore label.
|
100
|
+
def underscore
|
101
|
+
@label_underscore
|
102
|
+
end
|
103
|
+
|
98
104
|
# Translate Enum to localized string.(use i18n)
|
99
105
|
# @note find default `Namespace.Classname.EnumMember`
|
100
106
|
#
|
101
107
|
# @return [String] localized string of Enum.
|
102
108
|
def translate
|
103
|
-
I18n.t(self.class.i18n_key(@
|
109
|
+
I18n.t(self.class.i18n_key(@i18n_namespace, @label_underscore))
|
104
110
|
end
|
105
111
|
alias_method :t, :translate
|
106
112
|
|
@@ -220,12 +226,17 @@ module Inum
|
|
220
226
|
new(label, value).tap do |enum|
|
221
227
|
const_set(label, enum)
|
222
228
|
@enums.push(enum)
|
229
|
+
@enums.sort! {|a, b| a.to_i <=> b.to_i }
|
223
230
|
end
|
224
231
|
end
|
225
232
|
|
226
233
|
# Initialize inherited class.
|
227
234
|
def self.inherited(child)
|
228
|
-
|
235
|
+
if self == Inum::Base
|
236
|
+
child.instance_variable_set(:@enums, Array.new)
|
237
|
+
else
|
238
|
+
child.instance_variable_set(:@enums, self.to_a)
|
239
|
+
end
|
229
240
|
end
|
230
241
|
|
231
242
|
# Validate enum args.
|
@@ -238,6 +249,10 @@ module Inum
|
|
238
249
|
raise ArgumentError, "#{label} isn't instance of Symbol."
|
239
250
|
end
|
240
251
|
|
252
|
+
unless value.kind_of?(Numeric)
|
253
|
+
raise ArgumentError, "#{value} isn't instance of Integer."
|
254
|
+
end
|
255
|
+
|
241
256
|
if labels.include?(label)
|
242
257
|
raise ArgumentError, "#{label} already exists label."
|
243
258
|
end
|
data/lib/inum/version.rb
CHANGED
data/spec/inum/base_spec.rb
CHANGED
@@ -37,7 +37,7 @@ describe Inum::Base do
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
-
context 'When define a enum
|
40
|
+
context 'When define a enum with wrong label' do
|
41
41
|
subject do
|
42
42
|
Class.new(Inum::Base) {
|
43
43
|
define 'red_bull', 0
|
@@ -49,7 +49,7 @@ describe Inum::Base do
|
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
|
-
context 'When define a enum
|
52
|
+
context 'When define a enum with duplicated label' do
|
53
53
|
subject do
|
54
54
|
Class.new(Inum::Base) {
|
55
55
|
define :RED_BULL, 0
|
@@ -62,7 +62,19 @@ describe Inum::Base do
|
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
|
-
context 'When define a enum
|
65
|
+
context 'When define a enum with nan value' do
|
66
|
+
subject do
|
67
|
+
Class.new(Inum::Base) {
|
68
|
+
define :RED_BULL, 'hahaha'
|
69
|
+
}
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'Raise ArgumentError.' do
|
73
|
+
expect { subject }.to raise_error(ArgumentError)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
context 'When define a enum with duplicate value' do
|
66
78
|
subject do
|
67
79
|
Class.new(Inum::Base) {
|
68
80
|
define :RED_BULL, 0
|
@@ -83,7 +95,7 @@ describe Inum::Base do
|
|
83
95
|
define :Muromisan, 1
|
84
96
|
define :Nourin, 2
|
85
97
|
define :KMB, 3
|
86
|
-
define :
|
98
|
+
define :BakuOn, 5
|
87
99
|
end
|
88
100
|
end
|
89
101
|
|
@@ -176,13 +188,19 @@ describe Inum::Base do
|
|
176
188
|
|
177
189
|
describe '#dowcase ' do
|
178
190
|
it 'Return lowercase string.' do
|
179
|
-
expect(Anime::
|
191
|
+
expect(Anime::BakuOn.downcase).to eq('bakuon')
|
180
192
|
end
|
181
193
|
end
|
182
194
|
|
183
195
|
describe '#upcase ' do
|
184
196
|
it 'Return uppercase string.' do
|
185
|
-
expect(Anime::
|
197
|
+
expect(Anime::BakuOn.upcase).to eq('BAKUON')
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
describe '#underscore ' do
|
202
|
+
it 'Return underscore string.' do
|
203
|
+
expect(Anime::BakuOn.underscore).to eq('baku_on')
|
186
204
|
end
|
187
205
|
end
|
188
206
|
|
@@ -217,7 +235,7 @@ describe Inum::Base do
|
|
217
235
|
['t', 1],
|
218
236
|
['t', 2],
|
219
237
|
['t', 3],
|
220
|
-
['t',
|
238
|
+
['t', 5]
|
221
239
|
])
|
222
240
|
end
|
223
241
|
|
@@ -237,7 +255,7 @@ describe Inum::Base do
|
|
237
255
|
['t', 0],
|
238
256
|
['t', 1],
|
239
257
|
['t', 2],
|
240
|
-
['t',
|
258
|
+
['t', 5]
|
241
259
|
])
|
242
260
|
end
|
243
261
|
end
|
@@ -252,7 +270,7 @@ describe Inum::Base do
|
|
252
270
|
describe '.each' do
|
253
271
|
it 'Execute block with a right order.' do
|
254
272
|
count = 0
|
255
|
-
orders = [Anime::Nyaruko, Anime::Muromisan, Anime::Nourin, Anime::KMB, Anime::
|
273
|
+
orders = [Anime::Nyaruko, Anime::Muromisan, Anime::Nourin, Anime::KMB, Anime::BakuOn]
|
256
274
|
|
257
275
|
Anime.each do |enum|
|
258
276
|
expect(enum).to eq(orders[count])
|
@@ -263,7 +281,7 @@ describe Inum::Base do
|
|
263
281
|
|
264
282
|
describe '.labels' do
|
265
283
|
it 'Return array of label.' do
|
266
|
-
expect(Anime.labels).to match_array([:Nyaruko, :Muromisan, :Nourin, :KMB, :
|
284
|
+
expect(Anime.labels).to match_array([:Nyaruko, :Muromisan, :Nourin, :KMB, :BakuOn])
|
267
285
|
end
|
268
286
|
end
|
269
287
|
|
@@ -278,7 +296,7 @@ describe Inum::Base do
|
|
278
296
|
expect(Anime.parse(source)).to eq(destination)
|
279
297
|
end
|
280
298
|
|
281
|
-
let(:destination) { Anime::
|
299
|
+
let(:destination) { Anime::BakuOn }
|
282
300
|
|
283
301
|
context 'When source is string' do
|
284
302
|
let(:source) { 'Bakuon' }
|
@@ -295,21 +313,21 @@ describe Inum::Base do
|
|
295
313
|
end
|
296
314
|
|
297
315
|
context 'When source is integer' do
|
298
|
-
let(:source) {
|
316
|
+
let(:source) { 5 }
|
299
317
|
it 'success.' do
|
300
318
|
subject
|
301
319
|
end
|
302
320
|
end
|
303
321
|
|
304
322
|
context 'When source is integer of string' do
|
305
|
-
let(:source) { '
|
323
|
+
let(:source) { '5' }
|
306
324
|
it 'Return inum.' do
|
307
325
|
subject
|
308
326
|
end
|
309
327
|
end
|
310
328
|
|
311
329
|
context 'When source is enum' do
|
312
|
-
let(:source) { Anime::
|
330
|
+
let(:source) { Anime::BakuOn }
|
313
331
|
it 'Return inum.' do
|
314
332
|
subject
|
315
333
|
end
|
@@ -349,13 +367,43 @@ describe Inum::Base do
|
|
349
367
|
|
350
368
|
describe '.to_a' do
|
351
369
|
it 'Return array of enum.' do
|
352
|
-
expect(Anime.to_a).to match_array([Anime::Nyaruko, Anime::Muromisan, Anime::Nourin, Anime::KMB, Anime::
|
370
|
+
expect(Anime.to_a).to match_array([Anime::Nyaruko, Anime::Muromisan, Anime::Nourin, Anime::KMB, Anime::BakuOn])
|
353
371
|
end
|
354
372
|
end
|
355
373
|
|
356
374
|
describe '.values' do
|
357
375
|
it 'Return array of value.' do
|
358
|
-
expect(Anime.values).to match_array([0, 1, 2, 3,
|
376
|
+
expect(Anime.values).to match_array([0, 1, 2, 3, 5])
|
377
|
+
end
|
378
|
+
end
|
379
|
+
|
380
|
+
context 'After extend Anime' do
|
381
|
+
describe 'Defined enum class' do
|
382
|
+
before :each do
|
383
|
+
class Anime2016 < Anime
|
384
|
+
define :GanbaruZoi, 4
|
385
|
+
end
|
386
|
+
end
|
387
|
+
|
388
|
+
after :each do
|
389
|
+
Object.class_eval{ remove_const :Anime2016 }
|
390
|
+
end
|
391
|
+
|
392
|
+
describe '.values' do
|
393
|
+
it 'Return array of value.' do
|
394
|
+
expect(Anime2016.values).to match_array([0, 1, 2, 3, 4, 5])
|
395
|
+
end
|
396
|
+
|
397
|
+
it 'Order is valid.' do
|
398
|
+
expect(Anime2016.values[4]).to eq(4)
|
399
|
+
end
|
400
|
+
end
|
401
|
+
|
402
|
+
describe 'extend enum' do
|
403
|
+
it 'is no impact.' do
|
404
|
+
expect(Anime.length).to eq(5)
|
405
|
+
end
|
406
|
+
end
|
359
407
|
end
|
360
408
|
end
|
361
409
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: inum
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- alfa-jpn
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-07-
|
11
|
+
date: 2016-07-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|