@@ -22,10 +22,12 @@ class SecondSubclass < FirstSubclass
2222 expect ( Colors ::RED ) . to eq 'red'
2323 expect ( Colors ::GREEN ) . to eq 'green'
2424 end
25+
2526 it 'raises UninitializedConstantError on an invalid constant' do
2627 expect { Colors ::ANYTHING } . to raise_error Ruby ::Enum ::Errors ::UninitializedConstantError , /The constant Colors::ANYTHING has not been defined./
2728 end
28- context '#each' do
29+
30+ describe '#each' do
2931 it 'iterates over constants' do
3032 keys = [ ]
3133 enum_keys = [ ]
@@ -40,7 +42,8 @@ class SecondSubclass < FirstSubclass
4042 expect ( enum_values ) . to eq %w[ red green ]
4143 end
4244 end
43- context '#map' do
45+
46+ describe '#map' do
4447 it 'maps constants' do
4548 key_key_values = Colors . map do |key , enum |
4649 [ key , enum . key , enum . value ]
@@ -50,87 +53,104 @@ class SecondSubclass < FirstSubclass
5053 expect ( key_key_values [ 1 ] ) . to eq [ :GREEN , :GREEN , 'green' ]
5154 end
5255 end
53- context '#parse' do
56+
57+ describe '#parse' do
5458 it 'parses exact value' do
5559 expect ( Colors . parse ( 'red' ) ) . to eq ( Colors ::RED )
5660 end
61+
5762 it 'is case-insensitive' do
5863 expect ( Colors . parse ( 'ReD' ) ) . to eq ( Colors ::RED )
5964 end
65+
6066 it 'returns nil for a null value' do
6167 expect ( Colors . parse ( nil ) ) . to be_nil
6268 end
69+
6370 it 'returns nil for an invalid value' do
6471 expect ( Colors . parse ( 'invalid' ) ) . to be_nil
6572 end
6673 end
67- context '#key?' do
74+
75+ describe '#key?' do
6876 it 'returns true for valid keys accessed directly' do
6977 Colors . keys . each do |key | # rubocop:disable Style/HashEachMethods
70- expect ( Colors . key? ( key ) ) . to eq ( true )
78+ expect ( Colors . key? ( key ) ) . to be ( true )
7179 end
7280 end
81+
7382 it 'returns true for valid keys accessed via each_keys' do
7483 Colors . each_key do |key |
75- expect ( Colors . key? ( key ) ) . to eq ( true )
84+ expect ( Colors . key? ( key ) ) . to be ( true )
7685 end
7786 end
87+
7888 it 'returns false for invalid keys' do
79- expect ( Colors . key? ( :NOT_A_KEY ) ) . to eq ( false )
89+ expect ( Colors . key? ( :NOT_A_KEY ) ) . to be ( false )
8090 end
8191 end
82- context '#value' do
92+
93+ describe '#value' do
8394 it 'returns string values for keys' do
8495 Colors . each do |key , enum |
8596 expect ( Colors . value ( key ) ) . to eq ( enum . value )
8697 end
8798 end
99+
88100 it 'returns nil for an invalid key' do
89101 expect ( Colors . value ( :NOT_A_KEY ) ) . to be_nil
90102 end
91103 end
92- context '#value?' do
104+
105+ describe '#value?' do
93106 it 'returns true for valid values accessed directly' do
94107 Colors . values . each do |value | # rubocop:disable Style/HashEachMethods
95- expect ( Colors . value? ( value ) ) . to eq ( true )
108+ expect ( Colors . value? ( value ) ) . to be ( true )
96109 end
97110 end
111+
98112 it 'returns true for valid values accessed via each_value' do
99113 Colors . each_value do |value |
100- expect ( Colors . value? ( value ) ) . to eq ( true )
114+ expect ( Colors . value? ( value ) ) . to be ( true )
101115 end
102116 end
117+
103118 it 'returns false for invalid values' do
104- expect ( Colors . value? ( 'I am not a value' ) ) . to eq ( false )
119+ expect ( Colors . value? ( 'I am not a value' ) ) . to be ( false )
105120 end
106121 end
107- context '#key' do
122+
123+ describe '#key' do
108124 it 'returns enum instances for values' do
109125 Colors . each do |_ , enum |
110126 expect ( Colors . key ( enum . value ) ) . to eq ( enum . key )
111127 end
112128 end
129+
113130 it 'returns nil for an invalid value' do
114131 expect ( Colors . key ( 'invalid' ) ) . to be_nil
115132 end
116133 end
117- context '#keys' do
134+
135+ describe '#keys' do
118136 it 'returns keys' do
119137 expect ( Colors . keys ) . to eq ( %i[ RED GREEN ] )
120138 end
121139 end
122- context '#values' do
140+
141+ describe '#values' do
123142 it 'returns values' do
124143 expect ( Colors . values ) . to eq ( %w[ red green ] )
125144 end
126145 end
127- context '#to_h' do
146+
147+ describe '#to_h' do
128148 it 'returns a hash of key:values' do
129149 expect ( Colors . to_h ) . to eq ( RED : 'red' , GREEN : 'green' )
130150 end
131151 end
132152
133- context 'on duplicate keys ' do
153+ context 'when a duplicate key is used ' do
134154 it 'raises DuplicateKeyError' do
135155 expect do
136156 Colors . class_eval do
@@ -140,7 +160,7 @@ class SecondSubclass < FirstSubclass
140160 end
141161 end
142162
143- context 'on duplicate values ' do
163+ context 'when a duplicate value is used ' do
144164 it 'raises a DuplicateValueError' do
145165 expect do
146166 Colors . class_eval do
@@ -176,11 +196,14 @@ class EmptyEnums
176196 it 'contains its own enums' do
177197 expect ( FirstSubclass ::ORANGE ) . to eq 'orange'
178198 end
199+
179200 it 'parent class should not have enums defined in child classes' do
180201 expect { Colors ::ORANGE } . to raise_error Ruby ::Enum ::Errors ::UninitializedConstantError
181202 end
182- context 'Given a 2 level depth subclass' do
203+
204+ context 'when defining a 2 level depth subclass' do
183205 subject { SecondSubclass }
206+
184207 it 'contains its own enums and all the enums defined in the parent classes' do
185208 expect ( subject ::RED ) . to eq 'red'
186209 expect ( subject ::GREEN ) . to eq 'green'
@@ -227,6 +250,7 @@ class States
227250 define :undefined
228251 end
229252 subject { States }
253+
230254 it 'behaves like an enum' do
231255 expect ( subject . created ) . to eq 'Created'
232256 expect ( subject . published ) . to eq 'Published'
0 commit comments