ruby-enum 0.6.0 → 0.7.0
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 +2 -2
- data/Gemfile.lock +12 -15
- data/LICENSE.md +1 -1
- data/README.md +10 -5
- data/lib/ruby-enum/enum.rb +9 -4
- data/lib/ruby-enum/errors/base.rb +1 -1
- data/lib/ruby-enum/version.rb +1 -1
- data/pkg/ruby-enum-0.7.0.gem +0 -0
- data/spec/ruby-enum/enum_spec.rb +40 -0
- data/tags +54 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 971c1b5b0f1efc517293ebe5adfaed75bd2ef8cd
|
4
|
+
data.tar.gz: a7d4f6c03985bcd6ddee0e09938b4cd8dc860d1e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 20ac5e36b84f00a29ae233b6e100747ae18e06264037ef98223d4026b900614f5522e7afc97dce9b8e4c9b2828b2c4de610ece759fb688d452df32b07b113d4c
|
7
|
+
data.tar.gz: e00bdf6c6296e281285da12c1bd92eb5a293adae78fe3e8faf24db098b237db9ab353fe6076f1cee4302107f5d0e1a6f72d14486825cdf279c762a1a3f5bda93
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
### 0.7.0 (21/2/2017)
|
2
|
+
|
3
|
+
* [#3](https://github.com/dblock/ruby-enum/pull/13): Adds support for sub classing an Enum - [@laertispappas](https://github.com/laertispappas).
|
4
|
+
|
1
5
|
### 0.6.0 (12/5/2016)
|
2
6
|
|
3
7
|
* [#12](https://github.com/dblock/ruby-enum/pull/12): A `Ruby::Enum::Errors::DuplicateKeyError` or a `Ruby::Enum::Errors::DuplciateKeyValyeError` will now be raised when duplicate keys / values are defined - [@laertispappas](https://github.com/laertispappas).
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,22 +1,20 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
ruby-enum (0.
|
4
|
+
ruby-enum (0.7.0)
|
5
5
|
i18n
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: http://rubygems.org/
|
9
9
|
specs:
|
10
10
|
ast (2.3.0)
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
i18n (0.7.0)
|
15
|
-
parser (2.3.3.1)
|
11
|
+
diff-lcs (1.3)
|
12
|
+
i18n (0.8.0)
|
13
|
+
parser (2.4.0.0)
|
16
14
|
ast (~> 2.2)
|
17
15
|
powerpack (0.1.1)
|
18
|
-
rainbow (2.1
|
19
|
-
rake (
|
16
|
+
rainbow (2.2.1)
|
17
|
+
rake (10.5.0)
|
20
18
|
rspec (3.4.0)
|
21
19
|
rspec-core (~> 3.4.0)
|
22
20
|
rspec-expectations (~> 3.4.0)
|
@@ -30,15 +28,14 @@ GEM
|
|
30
28
|
diff-lcs (>= 1.2.0, < 2.0)
|
31
29
|
rspec-support (~> 3.4.0)
|
32
30
|
rspec-support (3.4.1)
|
33
|
-
rubocop (0.
|
34
|
-
|
35
|
-
parser (>= 2.2.3.0, < 3.0)
|
31
|
+
rubocop (0.47.1)
|
32
|
+
parser (>= 2.3.3.1, < 3.0)
|
36
33
|
powerpack (~> 0.1)
|
37
34
|
rainbow (>= 1.99.1, < 3.0)
|
38
35
|
ruby-progressbar (~> 1.7)
|
39
|
-
|
36
|
+
unicode-display_width (~> 1.0, >= 1.0.1)
|
40
37
|
ruby-progressbar (1.8.1)
|
41
|
-
|
38
|
+
unicode-display_width (1.1.3)
|
42
39
|
|
43
40
|
PLATFORMS
|
44
41
|
ruby
|
@@ -46,8 +43,8 @@ PLATFORMS
|
|
46
43
|
DEPENDENCIES
|
47
44
|
rake
|
48
45
|
rspec (~> 3.4.0)
|
49
|
-
rubocop (= 0.
|
46
|
+
rubocop (= 0.47.1)
|
50
47
|
ruby-enum!
|
51
48
|
|
52
49
|
BUNDLED WITH
|
53
|
-
1.
|
50
|
+
1.14.4
|
data/LICENSE.md
CHANGED
data/README.md
CHANGED
@@ -121,10 +121,10 @@ Colors.key('yellow')
|
|
121
121
|
```
|
122
122
|
|
123
123
|
|
124
|
-
|
124
|
+
### Duplicate enumerator keys or duplicate values
|
125
125
|
|
126
126
|
Defining duplicate enums will raise a `Ruby::Enum::Errors::DuplicateKeyError`. Moreover a duplicate
|
127
|
-
value is not allowed. Defining a duplicate value will raise a `Ruby::Enum::Errors::
|
127
|
+
value is not allowed. Defining a duplicate value will raise a `Ruby::Enum::Errors::DuplicateValueError`.
|
128
128
|
The following declarations will both raise an exception:
|
129
129
|
|
130
130
|
```ruby
|
@@ -136,7 +136,7 @@ The following declarations will both raise an exception:
|
|
136
136
|
end
|
137
137
|
|
138
138
|
# The following will raise a DuplicateValueError
|
139
|
-
class
|
139
|
+
class Colors
|
140
140
|
include Ruby::Enum
|
141
141
|
|
142
142
|
define :RED, 'red'
|
@@ -145,7 +145,12 @@ The following declarations will both raise an exception:
|
|
145
145
|
```
|
146
146
|
|
147
147
|
The `DuplicateValueError` exception is thrown to be consistent with the unique key constraint.
|
148
|
-
Since keys are unique there is no way to map values to keys using `Colors.
|
148
|
+
Since keys are unique there is no way to map values to keys using `Colors.value('red')`
|
149
|
+
|
150
|
+
### Inheritance behavior
|
151
|
+
|
152
|
+
Inheriting from a `Ruby::Enum` class, all defined enums in the parent class will be accessible in sub classes as well.
|
153
|
+
Sub classes can also provide extra enums as usual.
|
149
154
|
|
150
155
|
## Contributing
|
151
156
|
|
@@ -153,7 +158,7 @@ You're encouraged to contribute to this gem. See [CONTRIBUTING](CONTRIBUTING.md)
|
|
153
158
|
|
154
159
|
## Copyright and License
|
155
160
|
|
156
|
-
Copyright (c) 2013-
|
161
|
+
Copyright (c) 2013-2016, Daniel Doubrovkine and [Contributors](CHANGELOG.md).
|
157
162
|
|
158
163
|
This project is licensed under the [MIT License](LICENSE.md).
|
159
164
|
|
data/lib/ruby-enum/enum.rb
CHANGED
@@ -10,6 +10,8 @@ module Ruby
|
|
10
10
|
def self.included(base)
|
11
11
|
base.extend Enumerable
|
12
12
|
base.extend ClassMethods
|
13
|
+
|
14
|
+
base.private_class_method(:new)
|
13
15
|
end
|
14
16
|
|
15
17
|
module ClassMethods
|
@@ -33,20 +35,23 @@ module Ruby
|
|
33
35
|
def validate_key!(key)
|
34
36
|
return unless @_enum_hash.key?(key)
|
35
37
|
|
36
|
-
|
38
|
+
raise Ruby::Enum::Errors::DuplicateKeyError, name: name, key: key
|
37
39
|
end
|
38
40
|
|
39
41
|
def validate_value!(value)
|
40
42
|
return unless @_enums_by_value.key?(value)
|
41
43
|
|
42
|
-
|
44
|
+
raise Ruby::Enum::Errors::DuplicateValueError, name: name, value: value
|
43
45
|
end
|
44
46
|
|
45
47
|
def const_missing(key)
|
46
|
-
|
48
|
+
enum_instance = @_enum_hash && @_enum_hash[key]
|
49
|
+
if enum_instance
|
47
50
|
@_enum_hash[key].value
|
51
|
+
elsif superclass.instance_variable_get(:@_enum_hash)
|
52
|
+
superclass.send(:const_missing, key)
|
48
53
|
else
|
49
|
-
|
54
|
+
raise Ruby::Enum::Errors::UninitializedConstantError, name: name, key: key
|
50
55
|
end
|
51
56
|
end
|
52
57
|
|
data/lib/ruby-enum/version.rb
CHANGED
Binary file
|
data/spec/ruby-enum/enum_spec.rb
CHANGED
@@ -7,7 +7,38 @@ class Colors
|
|
7
7
|
define :GREEN, 'green'
|
8
8
|
end
|
9
9
|
|
10
|
+
class FirstSubclass < Colors
|
11
|
+
define :ORANGE, 'orange'
|
12
|
+
end
|
13
|
+
|
14
|
+
class SecondSubclass < FirstSubclass
|
15
|
+
define :PINK, 'pink'
|
16
|
+
end
|
17
|
+
|
10
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
|
+
|
11
42
|
it 'returns an enum value' do
|
12
43
|
expect(Colors::RED).to eq 'red'
|
13
44
|
expect(Colors::GREEN).to eq 'green'
|
@@ -129,4 +160,13 @@ describe Ruby::Enum do
|
|
129
160
|
end.to raise_error Ruby::Enum::Errors::DuplicateValueError, /The value red has already been defined./
|
130
161
|
end
|
131
162
|
end
|
163
|
+
|
164
|
+
describe 'Given a class that has not defined any enums' do
|
165
|
+
class EmptyEnums
|
166
|
+
include Ruby::Enum
|
167
|
+
end
|
168
|
+
it do
|
169
|
+
expect { EmptyEnums::ORANGE }.to raise_error Ruby::Enum::Errors::UninitializedConstantError
|
170
|
+
end
|
171
|
+
end
|
132
172
|
end
|
data/tags
ADDED
@@ -0,0 +1,54 @@
|
|
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
|
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.
|
4
|
+
version: 0.7.0
|
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: 2017-02-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: i18n
|
@@ -47,10 +47,12 @@ 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.7.0.gem
|
50
51
|
- ruby-enum.gemspec
|
51
52
|
- spec/ruby-enum/enum_spec.rb
|
52
53
|
- spec/ruby-enum/version_spec.rb
|
53
54
|
- spec/spec_helper.rb
|
55
|
+
- tags
|
54
56
|
homepage: http://github.com/dblock/ruby-enum
|
55
57
|
licenses:
|
56
58
|
- MIT
|
@@ -71,7 +73,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
71
73
|
version: 1.3.6
|
72
74
|
requirements: []
|
73
75
|
rubyforge_project:
|
74
|
-
rubygems_version: 2.5.1
|
76
|
+
rubygems_version: 2.4.5.1
|
75
77
|
signing_key:
|
76
78
|
specification_version: 4
|
77
79
|
summary: Enum-like behavior for Ruby.
|