enums 1.3.0 → 1.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +82 -24
- data/Rakefile +1 -1
- data/lib/enums/flag.rb +64 -50
- data/lib/enums/flag_builder.rb +4 -1
- data/lib/enums/version.rb +1 -1
- data/test/test_flag.rb +21 -0
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 65a45b808ac04efdf1cf4b9b299b61882d691605
|
4
|
+
data.tar.gz: fc6259850c15fe3f81ee5d8e2bebf4d40f0a754f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f4875a80e70ac8099ce8b79b92ec6385edced9606a4e873c2ffd3709dd2d454d6057c4aab302c5fa6f4a78999dd79bf36a0fc910ee216af1bbdaaccdc764f25a
|
7
|
+
data.tar.gz: 38c9a7a44081ecad43ebd9431c3149f48632466499dfea0029532dd036013e8a59add6cd33996cd96cccd61c170e24d3b7ad8803fb41c5c39359d71e20556ba1
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Enums - Safe Enumeration Types
|
2
2
|
|
3
|
-
enums library / gem - safe enumeration types - a set of symbolic keys bound to unique integer numbers
|
3
|
+
enums library / gem - safe enumeration types - a set of symbolic keys bound to unique integer numbers (incl. bit flags option)
|
4
4
|
|
5
5
|
* home :: [github.com/s6ruby/enums](https://github.com/s6ruby/enums)
|
6
6
|
* bugs :: [github.com/s6ruby/enums/issues](https://github.com/s6ruby/enums/issues)
|
@@ -50,7 +50,7 @@ enum :Color, :red, :green, :blue
|
|
50
50
|
# or
|
51
51
|
enum :Color, [:red, :green, :blue]
|
52
52
|
# or
|
53
|
-
enum :Color, { red: 0,
|
53
|
+
enum :Color, { red: 0,
|
54
54
|
green: 1,
|
55
55
|
blue: 2 }
|
56
56
|
|
@@ -149,8 +149,8 @@ enum :State, :fundraising, :expired_refund, :successful
|
|
149
149
|
# or
|
150
150
|
enum :State, [:fundraising, :expired_refund, :successful]
|
151
151
|
# or
|
152
|
-
enum :State, { fundraising: 0,
|
153
|
-
expired_refund: 1,
|
152
|
+
enum :State, { fundraising: 0,
|
153
|
+
expired_refund: 1,
|
154
154
|
successful: 2 }
|
155
155
|
|
156
156
|
|
@@ -231,21 +231,25 @@ end
|
|
231
231
|
|
232
232
|
class FileAttrib < Flag
|
233
233
|
|
234
|
+
NONE = new( :none, 0 )
|
234
235
|
READ_ONLY = new( :read_only, 1<<0 )
|
235
236
|
HIDDEN = new( :hidden, 1<<1 )
|
236
237
|
SYSTEM = new( :system, 1<<2 )
|
237
238
|
ARCHIVE = new( :archive, 1<<3 )
|
239
|
+
ALL = new( :all, 1<<0|1<<1|1<<2|1<<3 )
|
238
240
|
|
241
|
+
def self.none() NONE; end
|
239
242
|
def self.read_only() READ_ONLY; end
|
240
243
|
def self.hidden() HIDDEN; end
|
241
244
|
def self.system() SYSTEM; end
|
242
245
|
def self.archive() ARCHIVE; end
|
246
|
+
def self.all() ALL; end
|
243
247
|
|
244
248
|
def self.values() [1<<0,1<<1,1<<2,1<<3]; end
|
245
249
|
def self.keys() [:read_only, :hidden, :system, :archive]; end
|
246
250
|
def self.members() [READ_ONLY, HIDDEN, SYSTEM, ARCHIVE]; end
|
247
251
|
|
248
|
-
def self.zero()
|
252
|
+
def self.zero() NONE; end
|
249
253
|
|
250
254
|
def self.key( key )
|
251
255
|
@hash_by_key ||= Hash[ keys.zip( members ) ]
|
@@ -253,10 +257,12 @@ class FileAttrib < Flag
|
|
253
257
|
end
|
254
258
|
def self.[]( key ) self.key( key ); end
|
255
259
|
|
256
|
-
def
|
257
|
-
def
|
258
|
-
def
|
259
|
-
def
|
260
|
+
def none? @value == 0; end
|
261
|
+
def read_only?() @value & 1<<0 == 1<<0; end
|
262
|
+
def hidden?() @value & 1<<1 == 1<<1; end
|
263
|
+
def system?() @value & 1<<2 == 1<<2; end
|
264
|
+
def archive?() @value & 1<<3 == 1<<3; end
|
265
|
+
def all?() @value == 1<<0|1<<1|1<<2|1<<3; end
|
260
266
|
|
261
267
|
def member?( other ) @value & other.value == other.value; end
|
262
268
|
|
@@ -284,15 +290,11 @@ class FileAttrib < Flag
|
|
284
290
|
alias_method :toggle, :bitwise_xor
|
285
291
|
|
286
292
|
# ...
|
287
|
-
|
288
|
-
def initialize( *args )
|
289
|
-
# ...
|
290
|
-
end
|
291
293
|
end
|
292
294
|
|
293
295
|
|
294
296
|
def FileAttrib( *args )
|
295
|
-
FileAttrib.
|
297
|
+
FileAttrib.convert( *args )
|
296
298
|
end
|
297
299
|
```
|
298
300
|
|
@@ -306,20 +308,16 @@ FileAttrib.read_only #=> <FileAttrib @key=:read_only, @valu
|
|
306
308
|
FileAttrib::READ_ONLY #=> <FileAttrib @key=:read_only, @value=1>
|
307
309
|
FileAttribs[:read_only] #=> <FileAttrib @key=:read_only, @value=1>
|
308
310
|
|
309
|
-
FileAttrib(0) #=> <FileAttrib @key=:
|
311
|
+
FileAttrib(0) #=> <FileAttrib @key=:none, @value=0>
|
310
312
|
FileAttrib.read_only | FileAttrib.hidden #=> <FileAttrib @key=:0011, @value=3>
|
311
313
|
# -or-
|
312
|
-
FileAttrib.new( FileAttrib.read_only | FileAttrib.hidden )
|
313
|
-
FileAttrib.new( FileAttrib::READ_ONLY | FileAttrib::HIDDEN )
|
314
|
-
FileAttrib.new( :read_only, :hidden )
|
315
|
-
# -or-
|
316
314
|
FileAttrib( FileAttrib.read_only | FileAttrib.hidden )
|
317
315
|
FileAttrib( FileAttrib::READ_ONLY | FileAttrib::HIDDEN )
|
318
316
|
FileAttrib( :read_only, :hidden )
|
319
317
|
#=> <FileAttrib @key=:0011, @value=3>
|
320
318
|
|
321
|
-
attrib = FileAttrib.
|
322
|
-
attrib |= FileAttrib.read_only #=> <FileAttrib @key=:
|
319
|
+
attrib = FileAttrib.none #=> <FileAttrib @key=:none, @value=0>
|
320
|
+
attrib |= FileAttrib.read_only #=> <FileAttrib @key=:read_only, @value=1>
|
323
321
|
attrib.read_only? #=> true
|
324
322
|
# -or-
|
325
323
|
attrib.member?( FileAttrib.read_only ) #=> true
|
@@ -327,12 +325,12 @@ attrib.member?( FileAttrib.READ_ONLY ) #=> true
|
|
327
325
|
attrib.member?( :read_only ) #=> true
|
328
326
|
attrib & FileAttrib.read_only == FileAttrib.read_only #=> true
|
329
327
|
|
330
|
-
attrib ^= FileAttrib.read_only #=> <FileAttrib @key=:
|
328
|
+
attrib ^= FileAttrib.read_only #=> <FileAttrib @key=:none, @value=0>
|
331
329
|
attrib.read_only? #=> false
|
332
|
-
attrib ^= FileAttrib.read_only #=> <FileAttrib @key=:
|
330
|
+
attrib ^= FileAttrib.read_only #=> <FileAttrib @key=:read_ony, @value=1>
|
333
331
|
attrib.read_only? #=> true
|
334
332
|
|
335
|
-
attrib &= ~FileAttrib.read_only #=> <FileAttrib @key=:
|
333
|
+
attrib &= ~FileAttrib.read_only #=> <FileAttrib @key=:none, @value=0>
|
336
334
|
attrib.read_only? #=> false
|
337
335
|
|
338
336
|
attrib.is_a? Flag #=> true
|
@@ -340,6 +338,66 @@ attrib.is_a? FileAttrib #=> true
|
|
340
338
|
# ...
|
341
339
|
```
|
342
340
|
|
341
|
+
|
342
|
+
Let's try another example:
|
343
|
+
|
344
|
+
``` ruby
|
345
|
+
Flag.new( :TextStyle, :bold, :italic, :underline )
|
346
|
+
# -or -
|
347
|
+
enum :TextStyle, [:bold, :italic, :underline], flags: true
|
348
|
+
# -or -
|
349
|
+
enum :TextStyle, :bold, :italic, :underline, flags: true
|
350
|
+
# -or -
|
351
|
+
enum :TextStyle, { bold: 1<<0,
|
352
|
+
italic: 1<<1,
|
353
|
+
underline: 1<<2
|
354
|
+
},
|
355
|
+
flags: true
|
356
|
+
|
357
|
+
|
358
|
+
TextStyle.values #=> [1, 2, 4]
|
359
|
+
TextStyle.keys #=> [:bold, :italic, :underline]
|
360
|
+
|
361
|
+
TextStyle.bold #=> <TextStyle @key=:bold, @value=1>
|
362
|
+
TextStyle::BOLD #=> <TextStyle @key=:bold, @value=1>
|
363
|
+
TextStyle[:bold] #=> <TextStyle @key=:bold, @value=1>
|
364
|
+
|
365
|
+
TextStyle(0) #=> <TextStyle @key=:none, @value=0>
|
366
|
+
TextStyle.bold | TextStyle.italic #=> <TextStyle @key=:0011, @value=3>
|
367
|
+
# -or-
|
368
|
+
TextStyle( TextStyle.bold | TextStyle.italic )
|
369
|
+
TextStyle( TextStyle::BOLD | TextStyle::ITALIC )
|
370
|
+
TextStyle( :bold, :italic )
|
371
|
+
#=> <TextStyle @key=:0011, @value=3>
|
372
|
+
|
373
|
+
style = TextStyle.none #=> <TextStyle @key=:none, @value=0>
|
374
|
+
style |= TextStyle.bold #=> <TextStyle @key=:bold, @value=1>
|
375
|
+
style.bold? #=> true
|
376
|
+
# -or-
|
377
|
+
style.member?( TextStyle.bold ) #=> true
|
378
|
+
style.member?( TextStyle.BOLD ) #=> true
|
379
|
+
style.member?( :bold ) #=> true
|
380
|
+
style & TextStyle.bold == TextStyle.bold #=> true
|
381
|
+
|
382
|
+
style ^= TextStyle.bold #=> <TextStyle @key=:none, @value=0>
|
383
|
+
style.bold? #=> false
|
384
|
+
style ^= TextStyle.bold #=> <TextStyle @key=:bold, @value=1>
|
385
|
+
style.bold? #=> true
|
386
|
+
|
387
|
+
style &= ~TextStyle.bold #=> <TextStyle @key=:none, @value=0>
|
388
|
+
style.bold? #=> false
|
389
|
+
|
390
|
+
style = TextStyle.bold | TextStyle.italic | TextStyle.underline
|
391
|
+
#=> <TextStyle @key=:all, @value=7>
|
392
|
+
style & TextStyle.all == TextStyle.all #=> true
|
393
|
+
style & TextStyle.all != 0 #=> true
|
394
|
+
style.all? #=> true
|
395
|
+
|
396
|
+
style.is_a? Flag #=> true
|
397
|
+
style.is_a? TextStyle #=> true
|
398
|
+
# ...
|
399
|
+
```
|
400
|
+
|
343
401
|
and so on.
|
344
402
|
|
345
403
|
|
data/Rakefile
CHANGED
@@ -5,7 +5,7 @@ Hoe.spec 'enums' do
|
|
5
5
|
|
6
6
|
self.version = Enums::VERSION
|
7
7
|
|
8
|
-
self.summary = "enums - safe enumeration types - a set of symbolic keys bound to unique integer numbers"
|
8
|
+
self.summary = "enums - safe enumeration types - a set of symbolic keys bound to unique integer numbers (incl. bit flags option)"
|
9
9
|
self.description = summary
|
10
10
|
|
11
11
|
self.urls = ['https://github.com/s6ruby/enums']
|
data/lib/enums/flag.rb
CHANGED
@@ -10,47 +10,32 @@ class Flag
|
|
10
10
|
attr_reader :key
|
11
11
|
attr_reader :value
|
12
12
|
|
13
|
-
def initialize(
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
@key = :"#{fmt % @value}" ## use :none for 0 key - why? why not?
|
19
|
-
elsif args.size == 1 && args[0].is_a?(Integer)
|
20
|
-
@value = args[0]
|
21
|
-
@key = :"#{fmt % @value}" ## todo: lookup if value is a known flag (with key) - why? why not?
|
22
|
-
elsif args.size == 2 && args[0].is_a?(Symbol) && args[1].is_a?(Integer)
|
23
|
-
@key = args[0]
|
24
|
-
@value = args[1]
|
25
|
-
else
|
26
|
-
## assume flag object or symbols
|
27
|
-
@value = 0
|
28
|
-
args.each do |arg|
|
29
|
-
flag = _typecast_flag!( arg )
|
30
|
-
@value |= flag.value
|
31
|
-
end
|
32
|
-
@key = :"#{fmt % @value}" ## todo: lookup if value is a known flag (with key) - why? why not?
|
33
|
-
end
|
34
|
-
self.freeze ## make "immutable" - should be a value object like an integer number!!!
|
35
|
-
self # return self for chaining
|
13
|
+
def initialize( key, value )
|
14
|
+
@key = key
|
15
|
+
@value = value
|
16
|
+
self.freeze
|
17
|
+
self
|
36
18
|
end
|
37
19
|
|
38
|
-
|
39
|
-
|
40
|
-
if self.class == o.class
|
20
|
+
def self._typecheck_flag!( o )
|
21
|
+
if self == o.class
|
41
22
|
o
|
42
23
|
else
|
43
|
-
raise TypeError.new( "[Flag] flag >#{
|
24
|
+
raise TypeError.new( "[Flag] flag >#{name}< type expected; got >#{o.class.inspect}<" )
|
44
25
|
end
|
45
26
|
end
|
46
27
|
|
47
|
-
def _typecast_flag!( o )
|
28
|
+
def self._typecast_flag!( o )
|
48
29
|
if o.is_a? Symbol ## auto-convert symbol to flag
|
49
|
-
o =
|
30
|
+
o = key( o ) ## lookup symbol in "parent" flags class
|
50
31
|
end
|
51
32
|
_typecheck_flag!( o )
|
52
33
|
end
|
53
34
|
|
35
|
+
def _typecheck_flag!( o ) self.class._typecheck_flag!( o ); end
|
36
|
+
def _typecast_flag!( o ) self.class._typecast_flag!( o ); end
|
37
|
+
|
38
|
+
|
54
39
|
|
55
40
|
def ==( other )
|
56
41
|
if self.class == other.class
|
@@ -64,56 +49,58 @@ class Flag
|
|
64
49
|
alias_method :eql?, :==
|
65
50
|
|
66
51
|
|
67
|
-
def member?( other )
|
68
|
-
|
52
|
+
def member?( other )
|
53
|
+
other = _typecast_flag!( other )
|
54
|
+
@value & other.value == other.value
|
55
|
+
end
|
69
56
|
|
70
57
|
|
71
58
|
def bitwise_or( other )
|
72
|
-
self.class.
|
59
|
+
self.class.build( @value | _typecheck_flag!( other ).value )
|
73
60
|
end
|
74
|
-
alias_method :|,
|
61
|
+
alias_method :|, :bitwise_or
|
75
62
|
|
76
63
|
def bitwise_and( other )
|
77
|
-
self.class.
|
64
|
+
self.class.build( @value & _typecheck_flag!( other ).value )
|
78
65
|
end
|
79
66
|
alias_method :&, :bitwise_and
|
80
67
|
|
81
68
|
def bitwise_xor( other )
|
82
|
-
self.class.
|
69
|
+
self.class.build( @value ^ _typecheck_flag!( other ).value )
|
83
70
|
end
|
84
|
-
alias_method :^,
|
71
|
+
alias_method :^, :bitwise_xor
|
85
72
|
|
86
73
|
def bitwise_inverse
|
87
|
-
self.class.
|
74
|
+
self.class.build( ~@value )
|
88
75
|
end
|
89
76
|
alias_method :~, :bitwise_inverse
|
90
77
|
|
91
78
|
|
92
79
|
def set( other ) ## note: typecast also allows symbol e.g (:read_only, etc.)
|
93
|
-
self.class.
|
80
|
+
self.class.build( @value | _typecast_flag!( other ).value )
|
94
81
|
end
|
95
82
|
alias_method :flag, :set
|
96
83
|
|
97
84
|
def unset( other )
|
98
|
-
self.class.
|
85
|
+
self.class.build( @value & ~_typecast_flag!( other ).value )
|
99
86
|
end
|
100
87
|
alias_method :unflag, :unset
|
101
88
|
|
102
89
|
def toggle( other )
|
103
|
-
self.class.
|
90
|
+
self.class.build( @value ^ _typecast_flag!( other ).value )
|
104
91
|
end
|
105
92
|
|
106
93
|
|
107
94
|
|
108
|
-
|
109
95
|
def self.keys()
|
110
|
-
# note: does NOT include none
|
96
|
+
# note: does NOT include :none (and :all)
|
111
97
|
@keys ||= members.map { |member| member.key }.freeze
|
112
98
|
end
|
113
99
|
|
114
100
|
def self.key( key )
|
115
|
-
|
116
|
-
@
|
101
|
+
# note: does NOT include :none (and :all)
|
102
|
+
@hash_by_key ||= Hash[ keys.zip( members ) ].freeze
|
103
|
+
@hash_by_key[key]
|
117
104
|
end
|
118
105
|
|
119
106
|
def self.[]( key ) ## convenience alias for key
|
@@ -122,23 +109,50 @@ class Flag
|
|
122
109
|
|
123
110
|
|
124
111
|
def self.values()
|
125
|
-
# note: does NOT include none
|
112
|
+
# note: does NOT include :none (and :all)
|
126
113
|
@values ||= members.map { |member| member.value }.freeze
|
127
114
|
end
|
128
115
|
|
116
|
+
def self.value( value )
|
117
|
+
## note: adds :none and :all for value lookup
|
118
|
+
@hash_by_value ||= Hash[ values.zip( members ) ].merge( self::NONE.value => self::NONE,
|
119
|
+
self::ALL.value => self::ALL ).freeze
|
120
|
+
@hash_by_value[value]
|
121
|
+
end
|
122
|
+
|
123
|
+
def self.build( value )
|
124
|
+
o = self.value( value ) # lookup if value is a known flag (with key)
|
125
|
+
o = new( :"#{'%08b' % value}", value ) if o.nil?
|
126
|
+
o
|
127
|
+
end
|
128
|
+
|
129
129
|
|
130
|
-
def self.zero() @zero ||=
|
130
|
+
def self.zero() @zero ||= self::NONE; end
|
131
131
|
def zero?() @value == 0; end
|
132
132
|
|
133
|
+
def self.none() self::NONE; end
|
134
|
+
def none?() @value == 0; end
|
135
|
+
def self.all() self::ALL; end
|
136
|
+
def all?() @value & self.class::ALL.value == self.class::ALL.value; end
|
137
|
+
|
133
138
|
|
134
139
|
def self.convert( *args )
|
135
|
-
|
140
|
+
if args.size == 0
|
141
|
+
self::NONE
|
142
|
+
elsif args.size == 1 && args[0].is_a?(Integer)
|
143
|
+
build( args[0] )
|
144
|
+
else
|
145
|
+
## assume flag object or symbols
|
146
|
+
value = 0
|
147
|
+
args.each do |arg|
|
148
|
+
flag = _typecast_flag!( arg )
|
149
|
+
value |= flag.value
|
150
|
+
end
|
151
|
+
build( value )
|
152
|
+
end
|
136
153
|
end
|
137
154
|
|
138
|
-
|
139
155
|
## add size|length too why? why not?
|
140
|
-
## add value() lookup?
|
141
|
-
## not for now - why? combined values are undefined!! what to return??
|
142
156
|
|
143
157
|
## add to_i, to_int - why? why not?
|
144
158
|
## def to_i() @value; end
|
data/lib/enums/flag_builder.rb
CHANGED
@@ -44,12 +44,15 @@ def self.build_class( class_name, *args, **kwargs )
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def #{key}?
|
47
|
-
|
47
|
+
@value & #{value} == #{value}
|
48
48
|
end
|
49
49
|
RUBY
|
50
50
|
end
|
51
51
|
|
52
52
|
klass.class_eval( <<RUBY )
|
53
|
+
NONE = new( :none, 0 )
|
54
|
+
ALL = new( :all, #{f.values.reduce( 0 ) { |sum, value| sum|value }} )
|
55
|
+
|
53
56
|
def self.members
|
54
57
|
@members ||= [#{f.keys.map {|key|key.upcase}.join(',')}].freeze
|
55
58
|
end
|
data/lib/enums/version.rb
CHANGED
data/test/test_flag.rb
CHANGED
@@ -60,6 +60,19 @@ def test_attrib
|
|
60
60
|
assert_equal :read_only, FileAttrib.read_only.key
|
61
61
|
assert_equal 1<<0, FileAttrib::READ_ONLY.value
|
62
62
|
assert_equal :read_only, FileAttrib::READ_ONLY.key
|
63
|
+
|
64
|
+
attrib = FileAttrib.read_only | FileAttrib.hidden
|
65
|
+
assert_equal false, attrib.none?
|
66
|
+
assert_equal false, attrib & FileAttrib.all == FileAttrib.all
|
67
|
+
assert_equal false, attrib.all?
|
68
|
+
assert_equal true, attrib.read_only?
|
69
|
+
assert_equal true, attrib.hidden?
|
70
|
+
|
71
|
+
attrib |= FileAttrib.system
|
72
|
+
attrib |= FileAttrib.archive
|
73
|
+
assert_equal true, attrib & FileAttrib.all == FileAttrib.all
|
74
|
+
assert_equal true, attrib.all?
|
75
|
+
assert_equal false, attrib.none?
|
63
76
|
end
|
64
77
|
|
65
78
|
def test_text_style
|
@@ -70,6 +83,9 @@ def test_text_style
|
|
70
83
|
|
71
84
|
style = TextStyle(0)
|
72
85
|
assert_equal true, style == 0
|
86
|
+
assert_equal true, style.zero?
|
87
|
+
assert_equal true, style.none?
|
88
|
+
|
73
89
|
style |= TextStyle.bold
|
74
90
|
assert_equal true, style.member?( :bold )
|
75
91
|
assert_equal true, style.member?( TextStyle.bold )
|
@@ -83,6 +99,11 @@ def test_text_style
|
|
83
99
|
assert_equal true, style.member?( TextStyle.italic )
|
84
100
|
assert_equal true, style & TextStyle.italic == TextStyle.italic
|
85
101
|
assert_equal true, style & TextStyle.italic != 0
|
102
|
+
|
103
|
+
style = TextStyle.bold | TextStyle.italic | TextStyle.underline
|
104
|
+
assert_equal true, style & TextStyle.all == TextStyle.all
|
105
|
+
assert_equal true, style & TextStyle.all != 0
|
106
|
+
assert_equal true, style.all?
|
86
107
|
end
|
87
108
|
|
88
109
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: enums
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gerald Bauer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-03-
|
11
|
+
date: 2019-03-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rdoc
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '3.16'
|
41
41
|
description: enums - safe enumeration types - a set of symbolic keys bound to unique
|
42
|
-
integer numbers
|
42
|
+
integer numbers (incl. bit flags option)
|
43
43
|
email: wwwmake@googlegroups.com
|
44
44
|
executables: []
|
45
45
|
extensions: []
|
@@ -89,5 +89,5 @@ rubygems_version: 2.5.2
|
|
89
89
|
signing_key:
|
90
90
|
specification_version: 4
|
91
91
|
summary: enums - safe enumeration types - a set of symbolic keys bound to unique integer
|
92
|
-
numbers
|
92
|
+
numbers (incl. bit flags option)
|
93
93
|
test_files: []
|