ruby-enum 0.7.1 → 0.7.2
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/Gemfile.lock +14 -11
- data/README.md +19 -0
- data/lib/ruby-enum/enum.rb +28 -14
- data/lib/ruby-enum/version.rb +1 -1
- data/pkg/ruby-enum-0.6.0.gem +0 -0
- data/spec/ruby-enum/enum_spec.rb +42 -23
- metadata +4 -6
- data/pkg/ruby-enum-0.7.0.gem +0 -0
- data/pkg/ruby-enum-0.7.1.gem +0 -0
- data/tags +0 -54
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 47e52bdfbc7d70944470141e18c1629d058326c0
|
4
|
+
data.tar.gz: 3992c7e739aea0799d6adc820e03b6bba5f17357
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 79c51dec06a07ccb4b6bcbbfd18101798e885674bf0d3f6e95e7833f70c8d99485a87739d6e6b644f3f7d34e8488417b116aa3a6d4c2311343cb8fdd597eca46
|
7
|
+
data.tar.gz: a532c64b93a9ec0a44b68db66a81f6b206ee9d65c40f156ce91da89fd00a6124a61e2b59a1bc902ace03580cb79a74b4a09fdb77a4e5c0a2172c8f7dca81c035
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
### 0.7.2 (15/3/2017)
|
2
|
+
|
3
|
+
* [#18](https://github.com/dblock/ruby-enum/pull/18): Adds support for non constant definition - [@laertispappas](https://github.com/laertispappas).
|
4
|
+
|
1
5
|
### 0.7.1 (23/2/2017)
|
2
6
|
|
3
7
|
* [#16](https://github.com/dblock/ruby-enum/pull/16): Replaces const_missing method in favor of const_set - [@laertispappas](https://github.com/laertispappas).
|
data/Gemfile.lock
CHANGED
@@ -1,20 +1,23 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
ruby-enum (0.7.
|
4
|
+
ruby-enum (0.7.2)
|
5
5
|
i18n
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: http://rubygems.org/
|
9
9
|
specs:
|
10
|
-
ast (2.
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
10
|
+
ast (2.4.0)
|
11
|
+
concurrent-ruby (1.0.5)
|
12
|
+
diff-lcs (1.2.5)
|
13
|
+
i18n (1.0.0)
|
14
|
+
concurrent-ruby (~> 1.0)
|
15
|
+
parser (2.4.0.2)
|
16
|
+
ast (~> 2.3)
|
15
17
|
powerpack (0.1.1)
|
16
|
-
rainbow (2.2.
|
17
|
-
|
18
|
+
rainbow (2.2.2)
|
19
|
+
rake
|
20
|
+
rake (11.3.0)
|
18
21
|
rspec (3.4.0)
|
19
22
|
rspec-core (~> 3.4.0)
|
20
23
|
rspec-expectations (~> 3.4.0)
|
@@ -34,8 +37,8 @@ GEM
|
|
34
37
|
rainbow (>= 1.99.1, < 3.0)
|
35
38
|
ruby-progressbar (~> 1.7)
|
36
39
|
unicode-display_width (~> 1.0, >= 1.0.1)
|
37
|
-
ruby-progressbar (1.
|
38
|
-
unicode-display_width (1.
|
40
|
+
ruby-progressbar (1.9.0)
|
41
|
+
unicode-display_width (1.3.0)
|
39
42
|
|
40
43
|
PLATFORMS
|
41
44
|
ruby
|
@@ -47,4 +50,4 @@ DEPENDENCIES
|
|
47
50
|
ruby-enum!
|
48
51
|
|
49
52
|
BUNDLED WITH
|
50
|
-
1.
|
53
|
+
1.15.3
|
data/README.md
CHANGED
@@ -10,6 +10,10 @@ Enum-like behavior for Ruby, heavily inspired by [this](http://www.rubyfleebie.c
|
|
10
10
|
|
11
11
|
## Usage
|
12
12
|
|
13
|
+
Enums can be defined and accessed either as constants or class methods. For example below we have two Ruby::Enum classes
|
14
|
+
where the first one (Colors) defines its enums and references them as constants. The second class (State) defines and
|
15
|
+
references its enums as class methods.
|
16
|
+
|
13
17
|
``` ruby
|
14
18
|
class Colors
|
15
19
|
include Ruby::Enum
|
@@ -17,6 +21,14 @@ class Colors
|
|
17
21
|
define :RED, "red"
|
18
22
|
define :GREEN, "green"
|
19
23
|
end
|
24
|
+
|
25
|
+
# or for versions >= 0.7.2
|
26
|
+
class State
|
27
|
+
include Ruby::Enum
|
28
|
+
|
29
|
+
define :created, 'Created'
|
30
|
+
define :published, 'Published'
|
31
|
+
end
|
20
32
|
```
|
21
33
|
|
22
34
|
### Referencing
|
@@ -28,6 +40,13 @@ Colors::UNDEFINED # raises Ruby::Enum::Errors::UninitializedConstantError
|
|
28
40
|
Colors.keys # [ :RED, :GREEN ]
|
29
41
|
Colors.values # [ "red", "green" ]
|
30
42
|
Colors.to_h # { :RED => "red", :GREEN => "green" }
|
43
|
+
|
44
|
+
State.created # "Created"
|
45
|
+
State.published # "Published"
|
46
|
+
State.undefined # NoMethodError is raised
|
47
|
+
State.keys # [ :created, :published ]
|
48
|
+
State.values # ["Created", "Published"]
|
49
|
+
State.to_h # { :created => 'Created', :published => 'Published' }
|
31
50
|
```
|
32
51
|
|
33
52
|
### All `Enumerable` methods are supported.
|
data/lib/ruby-enum/enum.rb
CHANGED
@@ -27,23 +27,19 @@ module Ruby
|
|
27
27
|
validate_key!(key)
|
28
28
|
validate_value!(value)
|
29
29
|
|
30
|
-
|
31
|
-
@_enum_hash[key] = new_instance
|
32
|
-
@_enums_by_value[value] = new_instance
|
33
|
-
|
34
|
-
const_set key, value
|
35
|
-
end
|
36
|
-
|
37
|
-
def validate_key!(key)
|
38
|
-
return unless @_enum_hash.key?(key)
|
30
|
+
store_new_instance(key, value)
|
39
31
|
|
40
|
-
|
32
|
+
if upper?(key.to_s)
|
33
|
+
const_set key, value
|
34
|
+
else
|
35
|
+
define_singleton_method(key) { value }
|
36
|
+
end
|
41
37
|
end
|
42
38
|
|
43
|
-
def
|
44
|
-
|
45
|
-
|
46
|
-
|
39
|
+
def store_new_instance(key, value)
|
40
|
+
new_instance = new(key, value)
|
41
|
+
@_enum_hash[key] = new_instance
|
42
|
+
@_enums_by_value[value] = new_instance
|
47
43
|
end
|
48
44
|
|
49
45
|
def const_missing(key)
|
@@ -128,6 +124,24 @@ module Ruby
|
|
128
124
|
[key, enum.value]
|
129
125
|
end]
|
130
126
|
end
|
127
|
+
|
128
|
+
private
|
129
|
+
|
130
|
+
def upper?(s)
|
131
|
+
!/[[:upper:]]/.match(s).nil?
|
132
|
+
end
|
133
|
+
|
134
|
+
def validate_key!(key)
|
135
|
+
return unless @_enum_hash.key?(key)
|
136
|
+
|
137
|
+
raise Ruby::Enum::Errors::DuplicateKeyError, name: name, key: key
|
138
|
+
end
|
139
|
+
|
140
|
+
def validate_value!(value)
|
141
|
+
return unless @_enums_by_value.key?(value)
|
142
|
+
|
143
|
+
raise Ruby::Enum::Errors::DuplicateValueError, name: name, value: value
|
144
|
+
end
|
131
145
|
end
|
132
146
|
end
|
133
147
|
end
|
data/lib/ruby-enum/version.rb
CHANGED
Binary file
|
data/spec/ruby-enum/enum_spec.rb
CHANGED
@@ -16,29 +16,6 @@ class SecondSubclass < FirstSubclass
|
|
16
16
|
end
|
17
17
|
|
18
18
|
describe Ruby::Enum do
|
19
|
-
describe 'Subclass behavior' do
|
20
|
-
it 'contains the enums defined in the parent class' do
|
21
|
-
expect(FirstSubclass::GREEN).to eq 'green'
|
22
|
-
expect(FirstSubclass::RED).to eq 'red'
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'contains its own enums' do
|
26
|
-
expect(FirstSubclass::ORANGE).to eq 'orange'
|
27
|
-
end
|
28
|
-
it 'parent class should not have enums defined in child classes' do
|
29
|
-
expect { Colors::ORANGE }.to raise_error Ruby::Enum::Errors::UninitializedConstantError
|
30
|
-
end
|
31
|
-
context 'Given a 2 level depth subclass' do
|
32
|
-
subject { SecondSubclass }
|
33
|
-
it 'contains its own enums and all the enums defined in the parent classes' do
|
34
|
-
expect(subject::RED).to eq 'red'
|
35
|
-
expect(subject::GREEN).to eq 'green'
|
36
|
-
expect(subject::ORANGE).to eq 'orange'
|
37
|
-
expect(subject::PINK).to eq 'pink'
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
19
|
it 'returns an enum value' do
|
43
20
|
expect(Colors::RED).to eq 'red'
|
44
21
|
expect(Colors::GREEN).to eq 'green'
|
@@ -177,4 +154,46 @@ describe Ruby::Enum do
|
|
177
154
|
|
178
155
|
it { expect(Colors::RED).to eq 'red' }
|
179
156
|
end
|
157
|
+
|
158
|
+
describe 'Subclass behavior' do
|
159
|
+
it 'contains the enums defined in the parent class' do
|
160
|
+
expect(FirstSubclass::GREEN).to eq 'green'
|
161
|
+
expect(FirstSubclass::RED).to eq 'red'
|
162
|
+
end
|
163
|
+
|
164
|
+
it 'contains its own enums' do
|
165
|
+
expect(FirstSubclass::ORANGE).to eq 'orange'
|
166
|
+
end
|
167
|
+
it 'parent class should not have enums defined in child classes' do
|
168
|
+
expect { Colors::ORANGE }.to raise_error Ruby::Enum::Errors::UninitializedConstantError
|
169
|
+
end
|
170
|
+
context 'Given a 2 level depth subclass' do
|
171
|
+
subject { SecondSubclass }
|
172
|
+
it 'contains its own enums and all the enums defined in the parent classes' do
|
173
|
+
expect(subject::RED).to eq 'red'
|
174
|
+
expect(subject::GREEN).to eq 'green'
|
175
|
+
expect(subject::ORANGE).to eq 'orange'
|
176
|
+
expect(subject::PINK).to eq 'pink'
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
describe 'non constant definitions' do
|
182
|
+
class States
|
183
|
+
include Ruby::Enum
|
184
|
+
define :created, 'Created'
|
185
|
+
define :published, 'Published'
|
186
|
+
end
|
187
|
+
subject { States }
|
188
|
+
it 'behaves like an enum' do
|
189
|
+
expect(subject.created).to eq 'Created'
|
190
|
+
expect(subject.published).to eq 'Published'
|
191
|
+
|
192
|
+
expect(subject.key?(:created)).to be true
|
193
|
+
expect(subject.key('Created')).to eq :created
|
194
|
+
|
195
|
+
expect(subject.value?('Created')).to be true
|
196
|
+
expect(subject.value(:created)).to eq 'Created'
|
197
|
+
end
|
198
|
+
end
|
180
199
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-enum
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Doubrovkine
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-02-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: i18n
|
@@ -47,13 +47,11 @@ files:
|
|
47
47
|
- lib/ruby-enum/errors/uninitialized_constant_error.rb
|
48
48
|
- lib/ruby-enum/version.rb
|
49
49
|
- lib/ruby_enum.rb
|
50
|
-
- pkg/ruby-enum-0.
|
51
|
-
- pkg/ruby-enum-0.7.1.gem
|
50
|
+
- pkg/ruby-enum-0.6.0.gem
|
52
51
|
- ruby-enum.gemspec
|
53
52
|
- spec/ruby-enum/enum_spec.rb
|
54
53
|
- spec/ruby-enum/version_spec.rb
|
55
54
|
- spec/spec_helper.rb
|
56
|
-
- tags
|
57
55
|
homepage: http://github.com/dblock/ruby-enum
|
58
56
|
licenses:
|
59
57
|
- MIT
|
@@ -74,7 +72,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
74
72
|
version: 1.3.6
|
75
73
|
requirements: []
|
76
74
|
rubyforge_project:
|
77
|
-
rubygems_version: 2.
|
75
|
+
rubygems_version: 2.6.13
|
78
76
|
signing_key:
|
79
77
|
specification_version: 4
|
80
78
|
summary: Enum-like behavior for Ruby.
|
data/pkg/ruby-enum-0.7.0.gem
DELETED
Binary file
|
data/pkg/ruby-enum-0.7.1.gem
DELETED
Binary file
|
data/tags
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
|
2
|
-
!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
|
3
|
-
!_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/
|
4
|
-
!_TAG_PROGRAM_NAME Exuberant Ctags //
|
5
|
-
!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/
|
6
|
-
!_TAG_PROGRAM_VERSION 5.9~svn20110310 //
|
7
|
-
Base lib/ruby-enum/errors/base.rb /^ class Base < StandardError$/;" c class:Ruby.Enum.Errors
|
8
|
-
ClassMethods lib/ruby-enum/enum.rb /^ module ClassMethods$/;" m class:Ruby.Enum
|
9
|
-
Colors spec/ruby-enum/enum_spec.rb /^class Colors$/;" c
|
10
|
-
DuplicateKeyError lib/ruby-enum/errors/duplicate_key_error.rb /^ class DuplicateKeyError < Base$/;" c class:Ruby.Enum.Errors
|
11
|
-
DuplicateValueError lib/ruby-enum/errors/duplicate_value_error.rb /^ class DuplicateValueError < Base$/;" c class:Ruby.Enum.Errors
|
12
|
-
EmptyEnums spec/ruby-enum/enum_spec.rb /^ class EmptyEnums$/;" c
|
13
|
-
Enum lib/ruby-enum/enum.rb /^ module Enum$/;" m class:Ruby
|
14
|
-
Enum lib/ruby-enum/errors/base.rb /^ module Enum$/;" m class:Ruby
|
15
|
-
Enum lib/ruby-enum/errors/duplicate_key_error.rb /^ module Enum$/;" m class:Ruby
|
16
|
-
Enum lib/ruby-enum/errors/duplicate_value_error.rb /^ module Enum$/;" m class:Ruby
|
17
|
-
Enum lib/ruby-enum/errors/uninitialized_constant_error.rb /^ module Enum$/;" m class:Ruby
|
18
|
-
Enum lib/ruby-enum/version.rb /^ module Enum$/;" m class:Ruby
|
19
|
-
Errors lib/ruby-enum/errors/base.rb /^ module Errors$/;" m class:Ruby.Enum
|
20
|
-
Errors lib/ruby-enum/errors/duplicate_key_error.rb /^ module Errors$/;" m class:Ruby.Enum
|
21
|
-
Errors lib/ruby-enum/errors/duplicate_value_error.rb /^ module Errors$/;" m class:Ruby.Enum
|
22
|
-
Errors lib/ruby-enum/errors/uninitialized_constant_error.rb /^ module Errors$/;" m class:Ruby.Enum
|
23
|
-
FirstSubclass spec/ruby-enum/enum_spec.rb /^class FirstSubclass < Colors$/;" c
|
24
|
-
Ruby lib/ruby-enum/enum.rb /^module Ruby$/;" m
|
25
|
-
Ruby lib/ruby-enum/errors/base.rb /^module Ruby$/;" m
|
26
|
-
Ruby lib/ruby-enum/errors/duplicate_key_error.rb /^module Ruby$/;" m
|
27
|
-
Ruby lib/ruby-enum/errors/duplicate_value_error.rb /^module Ruby$/;" m
|
28
|
-
Ruby lib/ruby-enum/errors/uninitialized_constant_error.rb /^module Ruby$/;" m
|
29
|
-
Ruby lib/ruby-enum/version.rb /^module Ruby$/;" m
|
30
|
-
SecondSubclass spec/ruby-enum/enum_spec.rb /^class SecondSubclass < FirstSubclass$/;" c
|
31
|
-
UninitializedConstantError lib/ruby-enum/errors/uninitialized_constant_error.rb /^ class UninitializedConstantError < Base$/;" c class:Ruby.Enum.Errors
|
32
|
-
compose_message lib/ruby-enum/errors/base.rb /^ def compose_message(key, attributes = {})$/;" f class:Ruby.Enum.Errors.Base
|
33
|
-
const_missing lib/ruby-enum/enum.rb /^ def const_missing(key)$/;" f class:Ruby.Enum.ClassMethods
|
34
|
-
create_problem lib/ruby-enum/errors/base.rb /^ def create_problem(key, attributes)$/;" f class:Ruby.Enum.Errors.Base
|
35
|
-
create_resolution lib/ruby-enum/errors/base.rb /^ def create_resolution(key, attributes)$/;" f class:Ruby.Enum.Errors.Base
|
36
|
-
create_summary lib/ruby-enum/errors/base.rb /^ def create_summary(key, attributes)$/;" f class:Ruby.Enum.Errors.Base
|
37
|
-
define lib/ruby-enum/enum.rb /^ def define(key, value)$/;" f class:Ruby.Enum.ClassMethods
|
38
|
-
each lib/ruby-enum/enum.rb /^ def each(&block)$/;" f class:Ruby.Enum.ClassMethods
|
39
|
-
included lib/ruby-enum/enum.rb /^ def self.included(base)$/;" F class:Ruby.Enum
|
40
|
-
initialize lib/ruby-enum/enum.rb /^ def initialize(key, value)$/;" f class:Ruby.Enum
|
41
|
-
initialize lib/ruby-enum/errors/duplicate_key_error.rb /^ def initialize(attrs)$/;" f class:Ruby.Enum.Errors.DuplicateKeyError
|
42
|
-
initialize lib/ruby-enum/errors/duplicate_value_error.rb /^ def initialize(attrs)$/;" f class:Ruby.Enum.Errors.DuplicateValueError
|
43
|
-
initialize lib/ruby-enum/errors/uninitialized_constant_error.rb /^ def initialize(attrs)$/;" f class:Ruby.Enum.Errors.UninitializedConstantError
|
44
|
-
key lib/ruby-enum/enum.rb /^ def key(v)$/;" f class:Ruby.Enum.ClassMethods
|
45
|
-
key? lib/ruby-enum/enum.rb /^ def key?(k)$/;" f class:Ruby.Enum.ClassMethods
|
46
|
-
keys lib/ruby-enum/enum.rb /^ def keys$/;" f class:Ruby.Enum.ClassMethods
|
47
|
-
parse lib/ruby-enum/enum.rb /^ def parse(k)$/;" f class:Ruby.Enum.ClassMethods
|
48
|
-
to_h lib/ruby-enum/enum.rb /^ def to_h$/;" f class:Ruby.Enum.ClassMethods
|
49
|
-
translate lib/ruby-enum/errors/base.rb /^ def translate(key, options)$/;" f class:Ruby.Enum.Errors.Base
|
50
|
-
validate_key! lib/ruby-enum/enum.rb /^ def validate_key!(key)$/;" f class:Ruby.Enum.ClassMethods
|
51
|
-
validate_value! lib/ruby-enum/enum.rb /^ def validate_value!(value)$/;" f class:Ruby.Enum.ClassMethods
|
52
|
-
value lib/ruby-enum/enum.rb /^ def value(k)$/;" f class:Ruby.Enum.ClassMethods
|
53
|
-
value? lib/ruby-enum/enum.rb /^ def value?(v)$/;" f class:Ruby.Enum.ClassMethods
|
54
|
-
values lib/ruby-enum/enum.rb /^ def values$/;" f class:Ruby.Enum.ClassMethods
|