|
2 | 2 |
|
3 | 3 | require 'spec_helper' |
4 | 4 |
|
5 | | -RSpec.describe Ruby::Enum::Case do |
6 | | - test_enum = |
7 | | - Class.new do |
8 | | - include Ruby::Enum |
9 | | - include Ruby::Enum::Case |
10 | | - |
11 | | - define :RED, :red |
12 | | - define :GREEN, :green |
13 | | - define :BLUE, :blue |
14 | | - end |
| 5 | +module Case |
| 6 | + class Colors |
| 7 | + include Ruby::Enum |
| 8 | + include Ruby::Enum::Case |
| 9 | + |
| 10 | + define :RED, :red |
| 11 | + define :GREEN, :green |
| 12 | + define :BLUE, :blue |
| 13 | + end |
| 14 | +end |
15 | 15 |
|
| 16 | +RSpec.describe Ruby::Enum::Case do |
16 | 17 | describe '.case' do |
17 | 18 | context 'when all cases are defined' do |
18 | | - subject { test_enum.case(test_enum::RED, cases) } |
| 19 | + subject { Case::Colors.case(Case::Colors::RED, cases) } |
19 | 20 |
|
20 | 21 | let(:cases) do |
21 | 22 | { |
22 | | - [test_enum::RED, test_enum::GREEN] => -> { 'red or green' }, |
23 | | - test_enum::BLUE => -> { 'blue' } |
| 23 | + [Case::Colors::RED, Case::Colors::GREEN] => -> { 'red or green' }, |
| 24 | + Case::Colors::BLUE => -> { 'blue' } |
24 | 25 | } |
25 | 26 | end |
26 | 27 |
|
27 | 28 | it { is_expected.to eq('red or green') } |
28 | 29 |
|
29 | 30 | context 'when the value is nil' do |
30 | | - subject { test_enum.case(nil, cases) } |
| 31 | + subject { Case::Colors.case(nil, cases) } |
31 | 32 |
|
32 | 33 | it { is_expected.to be_nil } |
33 | 34 | end |
34 | 35 |
|
35 | 36 | context 'when the value is empty' do |
36 | | - subject { test_enum.case('', cases) } |
| 37 | + subject { Case::Colors.case('', cases) } |
37 | 38 |
|
38 | 39 | it { is_expected.to be_nil } |
39 | 40 | end |
40 | 41 |
|
41 | 42 | context 'when the value is the value of the enum' do |
42 | | - subject { test_enum.case(:red, cases) } |
| 43 | + subject { Case::Colors.case(:red, cases) } |
43 | 44 |
|
44 | 45 | it { is_expected.to eq('red or green') } |
45 | 46 | end |
46 | 47 |
|
47 | 48 | context 'when the value is used inside the lambda' do |
48 | | - subject { test_enum.case(test_enum::RED, cases) } |
| 49 | + subject { Case::Colors.case(Case::Colors::RED, cases) } |
49 | 50 |
|
50 | 51 | let(:cases) do |
51 | 52 | { |
52 | | - [test_enum::RED, test_enum::GREEN] => ->(color) { "is #{color}" }, |
53 | | - test_enum::BLUE => -> { 'blue' } |
| 53 | + [Case::Colors::RED, Case::Colors::GREEN] => ->(color) { "is #{color}" }, |
| 54 | + Case::Colors::BLUE => -> { 'blue' } |
54 | 55 | } |
55 | 56 | end |
56 | 57 |
|
|
60 | 61 |
|
61 | 62 | context 'when there are mutliple matches' do |
62 | 63 | subject do |
63 | | - test_enum.case( |
64 | | - test_enum::RED, |
| 64 | + Case::Colors.case( |
| 65 | + Case::Colors::RED, |
65 | 66 | { |
66 | | - [test_enum::RED, test_enum::GREEN] => -> { 'red or green' }, |
67 | | - test_enum::RED => -> { 'red' }, |
68 | | - test_enum::BLUE => -> { 'blue' } |
| 67 | + [Case::Colors::RED, Case::Colors::GREEN] => -> { 'red or green' }, |
| 68 | + Case::Colors::RED => -> { 'red' }, |
| 69 | + Case::Colors::BLUE => -> { 'blue' } |
69 | 70 | } |
70 | 71 | ) |
71 | 72 | end |
|
76 | 77 | context 'when not all cases are defined' do |
77 | 78 | it 'raises an error' do |
78 | 79 | expect do |
79 | | - test_enum.case( |
80 | | - test_enum::RED, |
81 | | - { [test_enum::RED, test_enum::GREEN] => -> { 'red or green' } } |
| 80 | + Case::Colors.case( |
| 81 | + Case::Colors::RED, |
| 82 | + { [Case::Colors::RED, Case::Colors::GREEN] => -> { 'red or green' } } |
82 | 83 | ) |
83 | 84 | end.to raise_error(Ruby::Enum::Case::ClassMethods::NotAllCasesHandledError) |
84 | 85 | end |
|
87 | 88 | context 'when not all cases are defined but :else is specified (default case)' do |
88 | 89 | it 'does not raise an error' do |
89 | 90 | expect do |
90 | | - result = test_enum.case( |
91 | | - test_enum::BLUE, |
| 91 | + result = Case::Colors.case( |
| 92 | + Case::Colors::BLUE, |
92 | 93 | { |
93 | | - [test_enum::RED, test_enum::GREEN] => -> { 'red or green' }, |
| 94 | + [Case::Colors::RED, Case::Colors::GREEN] => -> { 'red or green' }, |
94 | 95 | else: -> { 'blue' } |
95 | 96 | } |
96 | 97 | ) |
|
103 | 104 | context 'when a superfluous case is defined' do |
104 | 105 | it 'raises an error' do |
105 | 106 | expect do |
106 | | - test_enum.case( |
107 | | - test_enum::RED, |
| 107 | + Case::Colors.case( |
| 108 | + Case::Colors::RED, |
108 | 109 | { |
109 | | - [test_enum::RED, test_enum::GREEN] => -> { 'red or green' }, |
110 | | - test_enum::BLUE => -> { 'blue' }, |
| 110 | + [Case::Colors::RED, Case::Colors::GREEN] => -> { 'red or green' }, |
| 111 | + Case::Colors::BLUE => -> { 'blue' }, |
111 | 112 | :something => -> { 'green' } |
112 | 113 | } |
113 | 114 | ) |
|
0 commit comments