Skip to content

Commit 931c7e4

Browse files
committed
Add value and name listing
1 parent fd5b2bd commit 931c7e4

File tree

3 files changed

+50
-11
lines changed

3 files changed

+50
-11
lines changed

README.md

+7
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,13 @@ COLORS[:RED] === COLORS.RED # => true
105105
COLORS['RED'] === COLORS.RED # => true
106106
```
107107

108+
You can also access all the enums using `#entries` or just get a list of names (as symbols) or values using `#values` or `#names`.
109+
110+
```
111+
COLORS.entries # => [COLORS.RED, COLORS.GREEN, COLORS.BLUE]
112+
COLORS.values # => [:red, :green, :blue], equivalent to #pluck(:value)
113+
COLORS.names # => [:RED, :GREEN, :BLUE], equivalent to #pluck(:name)
114+
108115
## Contributing
109116
110117
Pull requests welcome!

lib/enum_type/enum.rb

+8
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,14 @@ def [](value)
6565
@enums[value.to_sym] || @enums_by_value[value]
6666
end
6767

68+
def values
69+
@enums_by_value.keys
70+
end
71+
72+
def names
73+
@enums.keys
74+
end
75+
6876
def respond_to_missing?(method_name, *arguments, &block)
6977
method_name =~ /[A-Z]+/ && arguments.empty? && block.nil? || super
7078
end

spec/enum_type_spec.rb

+35-11
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
end
4343

4444
it 'allows iterating over values' do
45-
expect(enum.map { |e| e }).to eq [enum.RED, enum.GREEN, enum.BLUE]
45+
expect(enum.entries).to eq [enum.RED, enum.GREEN, enum.BLUE]
4646
expect(enum.map(&:value)).to eq %i[red green blue]
4747
end
4848

@@ -57,6 +57,14 @@
5757
it 'allows looking up by value' do
5858
expect(enum[:red]).to equal enum.RED
5959
end
60+
61+
it 'allows getting the list of values' do
62+
expect(enum.values).to eq %i[red green blue]
63+
end
64+
65+
it 'allows getting the list of names as symbols' do
66+
expect(enum.names).to eq %i[RED GREEN BLUE]
67+
end
6068
end
6169

6270
context 'with array attributes' do
@@ -94,26 +102,34 @@
94102
end
95103

96104
it 'allows iterating over values' do
97-
expect(enum.map { |e| e }).to eq [enum.RED, enum.GREEN, enum.BLUE]
105+
expect(enum.entries).to eq [enum.RED, enum.GREEN, enum.BLUE]
98106
expect(enum.map(&:value)).to eq %i[red green blue]
99107
expect(enum.map(&:hex)).to eq %w[#f00 #0f0 #00f]
100108
expect(enum.map(&:rgb)).to eq [[255, 0, 0], [0, 255, 0], [0, 0, 255]]
101109
end
110+
111+
it 'allows getting the list of values' do
112+
expect(enum.values).to eq %i[red green blue]
113+
end
114+
115+
it 'allows getting the list of names as symbols' do
116+
expect(enum.names).to eq %i[RED GREEN BLUE]
117+
end
102118
end
103119

104120
context 'with hash attributes' do
105121
let(:enum) do
106-
EnumType.create(value: Symbol, hex: String, rgb: Array) do
107-
RED(:red, '#f00', [255, 0, 0])
108-
GREEN(:green, '#0f0', [0, 255, 0])
109-
BLUE(:blue, '#00f', [0, 0, 255])
122+
EnumType.create(value: String, hex: String, rgb: Array) do
123+
RED('red', '#f00', [255, 0, 0])
124+
GREEN('green', '#0f0', [0, 255, 0])
125+
BLUE('blue', '#00f', [0, 0, 255])
110126
end
111127
end
112128

113129
it 'defines all the enum types with the right value' do
114-
expect(enum.RED.value).to eq :red
115-
expect(enum.GREEN.value).to eq :green
116-
expect(enum.BLUE.value).to eq :blue
130+
expect(enum.RED.value).to eq 'red'
131+
expect(enum.GREEN.value).to eq 'green'
132+
expect(enum.BLUE.value).to eq 'blue'
117133
end
118134

119135
it 'defines all the enum types with the right name' do
@@ -136,11 +152,19 @@
136152
end
137153

138154
it 'allows iterating over values' do
139-
expect(enum.map { |e| e }).to eq [enum.RED, enum.GREEN, enum.BLUE]
140-
expect(enum.map(&:value)).to eq %i[red green blue]
155+
expect(enum.entries).to eq [enum.RED, enum.GREEN, enum.BLUE]
156+
expect(enum.map(&:value)).to eq %w[red green blue]
141157
expect(enum.map(&:hex)).to eq %w[#f00 #0f0 #00f]
142158
expect(enum.map(&:rgb)).to eq [[255, 0, 0], [0, 255, 0], [0, 0, 255]]
143159
end
160+
161+
it 'allows getting the list of values' do
162+
expect(enum.values).to eq %w[red green blue]
163+
end
164+
165+
it 'allows getting the list of names as symbols' do
166+
expect(enum.names).to eq %i[RED GREEN BLUE]
167+
end
144168
end
145169

146170
context 'with hash attributes and an invalid definition' do

0 commit comments

Comments
 (0)