ruby-enum 0.5.0 → 0.6.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.lock +11 -11
- data/README.md +27 -0
- data/lib/config/locales/en.yml +8 -0
- data/lib/ruby-enum.rb +2 -0
- data/lib/ruby-enum/enum.rb +16 -0
- data/lib/ruby-enum/errors/duplicate_key_error.rb +12 -0
- data/lib/ruby-enum/errors/duplicate_value_error.rb +12 -0
- data/lib/ruby-enum/version.rb +1 -1
- data/spec/ruby-enum/enum_spec.rb +20 -0
- metadata +5 -5
- data/pkg/ruby-enum-0.3.0.gem +0 -0
- data/pkg/ruby-enum-0.4.0.gem +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4fc128cc7839208ced2d3cf393b21c82f3ebdfe6
|
4
|
+
data.tar.gz: ce5e04b5b1d5e9756a4b4f761bb1d8f127d9e24c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 56ad33d14d0cf9e59f2237387e79422ce7b4cfbaf65fa47162bf1d60e6e3efeb843e321b0fa56f69059bfcef0506f4b6f3faab5d0168cdc756f8ef6ca760f291
|
7
|
+
data.tar.gz: 4a5a8d5bf5b64eeb155f9d3f8b20d271e8d752dc52287e9623efff4db795ed23424cf084545946220b89724c3ac7882205c38bb604b98f79e0bf160f0e82455a
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
### 0.6.0 (12/5/2016)
|
2
|
+
|
3
|
+
* [#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).
|
4
|
+
|
1
5
|
### 0.5.0 (11/20/2015)
|
2
6
|
|
3
7
|
* [#8](https://github.com/dblock/ruby-enum/pull/8): Added `Ruby::Enum#key`, `Ruby::Enum#value`, `Ruby::Enum#key?`, and `Ruby::Enum#value?` - [@dmolesUC3](https://github.com/dmolesUC3).
|
data/Gemfile.lock
CHANGED
@@ -1,35 +1,35 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
ruby-enum (0.
|
4
|
+
ruby-enum (0.6.0)
|
5
5
|
i18n
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: http://rubygems.org/
|
9
9
|
specs:
|
10
|
-
ast (2.
|
10
|
+
ast (2.3.0)
|
11
11
|
astrolabe (1.3.1)
|
12
12
|
parser (~> 2.2)
|
13
13
|
diff-lcs (1.2.5)
|
14
14
|
i18n (0.7.0)
|
15
|
-
parser (2.
|
16
|
-
ast (
|
15
|
+
parser (2.3.3.1)
|
16
|
+
ast (~> 2.2)
|
17
17
|
powerpack (0.1.1)
|
18
|
-
rainbow (2.
|
19
|
-
rake (
|
18
|
+
rainbow (2.1.0)
|
19
|
+
rake (11.3.0)
|
20
20
|
rspec (3.4.0)
|
21
21
|
rspec-core (~> 3.4.0)
|
22
22
|
rspec-expectations (~> 3.4.0)
|
23
23
|
rspec-mocks (~> 3.4.0)
|
24
|
-
rspec-core (3.4.
|
24
|
+
rspec-core (3.4.4)
|
25
25
|
rspec-support (~> 3.4.0)
|
26
26
|
rspec-expectations (3.4.0)
|
27
27
|
diff-lcs (>= 1.2.0, < 2.0)
|
28
28
|
rspec-support (~> 3.4.0)
|
29
|
-
rspec-mocks (3.4.
|
29
|
+
rspec-mocks (3.4.1)
|
30
30
|
diff-lcs (>= 1.2.0, < 2.0)
|
31
31
|
rspec-support (~> 3.4.0)
|
32
|
-
rspec-support (3.4.
|
32
|
+
rspec-support (3.4.1)
|
33
33
|
rubocop (0.35.1)
|
34
34
|
astrolabe (~> 1.3)
|
35
35
|
parser (>= 2.2.3.0, < 3.0)
|
@@ -37,7 +37,7 @@ GEM
|
|
37
37
|
rainbow (>= 1.99.1, < 3.0)
|
38
38
|
ruby-progressbar (~> 1.7)
|
39
39
|
tins (<= 1.6.0)
|
40
|
-
ruby-progressbar (1.
|
40
|
+
ruby-progressbar (1.8.1)
|
41
41
|
tins (1.6.0)
|
42
42
|
|
43
43
|
PLATFORMS
|
@@ -50,4 +50,4 @@ DEPENDENCIES
|
|
50
50
|
ruby-enum!
|
51
51
|
|
52
52
|
BUNDLED WITH
|
53
|
-
1.
|
53
|
+
1.13.6
|
data/README.md
CHANGED
@@ -120,6 +120,33 @@ Colors.key('yellow')
|
|
120
120
|
# => nil
|
121
121
|
```
|
122
122
|
|
123
|
+
|
124
|
+
## Duplicate enumerator keys or duplicate values
|
125
|
+
|
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::DuplicateKeyError`.
|
128
|
+
The following declarations will both raise an exception:
|
129
|
+
|
130
|
+
```ruby
|
131
|
+
class Colors
|
132
|
+
include Ruby::Enum
|
133
|
+
|
134
|
+
define :RED, "red"
|
135
|
+
define :RED, "my red" # will raise a DuplicateKeyError exception
|
136
|
+
end
|
137
|
+
|
138
|
+
# The following will raise a DuplicateValueError
|
139
|
+
class Colots
|
140
|
+
include Ruby::Enum
|
141
|
+
|
142
|
+
define :RED, 'red'
|
143
|
+
define :SOME, 'red' # Boom
|
144
|
+
end
|
145
|
+
```
|
146
|
+
|
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.key('red')`
|
149
|
+
|
123
150
|
## Contributing
|
124
151
|
|
125
152
|
You're encouraged to contribute to this gem. See [CONTRIBUTING](CONTRIBUTING.md) for details.
|
data/lib/config/locales/en.yml
CHANGED
@@ -12,3 +12,11 @@ en:
|
|
12
12
|
\_\_\_include Ruby::Enum\n
|
13
13
|
\_\_\_define %{key}, 'value'\n
|
14
14
|
\_\_end"
|
15
|
+
duplicate_key:
|
16
|
+
message: 'Duplicate key.'
|
17
|
+
summary: "The constant %{name}::%{key} has already been defined."
|
18
|
+
resolution: "The enumerated key is already defined in class %{name}%. Please use a different name to declare it."
|
19
|
+
duplicate_value:
|
20
|
+
message: 'Duplicate value found.'
|
21
|
+
summary: "The value %{value} has already been defined in %{name}%."
|
22
|
+
resolution: "The enumerated value %{value} is already defined in class %{name}%. Please use a different value."
|
data/lib/ruby-enum.rb
CHANGED
@@ -7,3 +7,5 @@ I18n.load_path << File.join(File.dirname(__FILE__), 'config', 'locales', 'en.yml
|
|
7
7
|
|
8
8
|
require 'ruby-enum/errors/base'
|
9
9
|
require 'ruby-enum/errors/uninitialized_constant_error'
|
10
|
+
require 'ruby-enum/errors/duplicate_key_error'
|
11
|
+
require 'ruby-enum/errors/duplicate_value_error'
|
data/lib/ruby-enum/enum.rb
CHANGED
@@ -21,11 +21,27 @@ module Ruby
|
|
21
21
|
def define(key, value)
|
22
22
|
@_enum_hash ||= {}
|
23
23
|
@_enums_by_value ||= {}
|
24
|
+
|
25
|
+
validate_key!(key)
|
26
|
+
validate_value!(value)
|
27
|
+
|
24
28
|
new_instance = new(key, value)
|
25
29
|
@_enum_hash[key] = new_instance
|
26
30
|
@_enums_by_value[value] = new_instance
|
27
31
|
end
|
28
32
|
|
33
|
+
def validate_key!(key)
|
34
|
+
return unless @_enum_hash.key?(key)
|
35
|
+
|
36
|
+
fail Ruby::Enum::Errors::DuplicateKeyError, name: name, key: key
|
37
|
+
end
|
38
|
+
|
39
|
+
def validate_value!(value)
|
40
|
+
return unless @_enums_by_value.key?(value)
|
41
|
+
|
42
|
+
fail Ruby::Enum::Errors::DuplicateValueError, name: name, value: value
|
43
|
+
end
|
44
|
+
|
29
45
|
def const_missing(key)
|
30
46
|
if @_enum_hash[key]
|
31
47
|
@_enum_hash[key].value
|
data/lib/ruby-enum/version.rb
CHANGED
data/spec/ruby-enum/enum_spec.rb
CHANGED
@@ -109,4 +109,24 @@ describe Ruby::Enum do
|
|
109
109
|
expect(Colors.to_h).to eq(RED: 'red', GREEN: 'green')
|
110
110
|
end
|
111
111
|
end
|
112
|
+
|
113
|
+
context 'on duplicate keys' do
|
114
|
+
it 'raises DuplicateKeyError' do
|
115
|
+
expect do
|
116
|
+
Colors.class_eval do
|
117
|
+
define :RED, 'some'
|
118
|
+
end
|
119
|
+
end.to raise_error Ruby::Enum::Errors::DuplicateKeyError, /The constant Colors::RED has already been defined./
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
context 'on duplicate values' do
|
124
|
+
it 'raises a DuplicateValueError' do
|
125
|
+
expect do
|
126
|
+
Colors.class_eval do
|
127
|
+
define :Other, 'red'
|
128
|
+
end
|
129
|
+
end.to raise_error Ruby::Enum::Errors::DuplicateValueError, /The value red has already been defined./
|
130
|
+
end
|
131
|
+
end
|
112
132
|
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.
|
4
|
+
version: 0.6.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: 2016-12-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: i18n
|
@@ -42,11 +42,11 @@ files:
|
|
42
42
|
- lib/ruby-enum.rb
|
43
43
|
- lib/ruby-enum/enum.rb
|
44
44
|
- lib/ruby-enum/errors/base.rb
|
45
|
+
- lib/ruby-enum/errors/duplicate_key_error.rb
|
46
|
+
- lib/ruby-enum/errors/duplicate_value_error.rb
|
45
47
|
- lib/ruby-enum/errors/uninitialized_constant_error.rb
|
46
48
|
- lib/ruby-enum/version.rb
|
47
49
|
- lib/ruby_enum.rb
|
48
|
-
- pkg/ruby-enum-0.3.0.gem
|
49
|
-
- pkg/ruby-enum-0.4.0.gem
|
50
50
|
- ruby-enum.gemspec
|
51
51
|
- spec/ruby-enum/enum_spec.rb
|
52
52
|
- spec/ruby-enum/version_spec.rb
|
@@ -71,7 +71,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
71
71
|
version: 1.3.6
|
72
72
|
requirements: []
|
73
73
|
rubyforge_project:
|
74
|
-
rubygems_version: 2.
|
74
|
+
rubygems_version: 2.5.1
|
75
75
|
signing_key:
|
76
76
|
specification_version: 4
|
77
77
|
summary: Enum-like behavior for Ruby.
|
data/pkg/ruby-enum-0.3.0.gem
DELETED
Binary file
|
data/pkg/ruby-enum-0.4.0.gem
DELETED
Binary file
|