Skip to content

Commit b5740c3

Browse files
authored
Merge pull request #40 from dblock/feature/enable_new_cops
Enable new cops by default. Add in recommended Rubocop libraries. Address or allowlist lints.
2 parents f688514 + 20e9be1 commit b5740c3

8 files changed

Lines changed: 88 additions & 22 deletions

File tree

.github/workflows/lint.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ jobs:
99
uses: actions/checkout@v3
1010
- name: Set up Ruby
1111
uses: ruby/setup-ruby@v1
12-
with:
1312
with:
1413
ruby-version: 2.7
1514
bundler-cache: true

.rubocop.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
1+
require:
2+
- rubocop-rake
3+
- rubocop-rspec
4+
15
AllCops:
26
TargetRubyVersion: 2.7
7+
NewCops: enable
38
Exclude:
49
- vendor/**/*
510

.rubocop_todo.yml

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# This configuration was generated by
22
# `rubocop --auto-gen-config`
3-
# on 2023-02-13 20:38:06 UTC using RuboCop version 1.45.1.
3+
# on 2023-02-14 01:34:25 UTC using RuboCop version 1.45.1.
44
# The point is for the user to remove these configuration records
55
# one by one as the offenses are removed from the code base.
66
# Note that changes in the inspected code, or installation of new
@@ -28,6 +28,40 @@ Naming/MethodParameterName:
2828
Exclude:
2929
- 'lib/ruby-enum/enum.rb'
3030

31+
# Offense count: 3
32+
# Configuration parameters: CountAsOne.
33+
RSpec/ExampleLength:
34+
Max: 11
35+
36+
# Offense count: 2
37+
# Configuration parameters: Include, CustomTransform, IgnoreMethods, SpecSuffixOnly.
38+
# Include: **/*_spec*rb*, **/spec/**/*
39+
RSpec/FilePath:
40+
Exclude:
41+
- 'spec/ruby-enum/enum_spec.rb'
42+
- 'spec/ruby-enum/version_spec.rb'
43+
44+
# Offense count: 4
45+
RSpec/LeakyConstantDeclaration:
46+
Exclude:
47+
- 'spec/ruby-enum/enum_spec.rb'
48+
49+
# Offense count: 6
50+
RSpec/MultipleExpectations:
51+
Max: 11
52+
53+
# Offense count: 18
54+
# Configuration parameters: EnforcedStyle, IgnoreSharedExamples.
55+
# SupportedStyles: always, named_only
56+
RSpec/NamedSubject:
57+
Exclude:
58+
- 'spec/ruby-enum/enum_spec.rb'
59+
60+
# Offense count: 1
61+
# Configuration parameters: AllowedGroups.
62+
RSpec/NestedGroups:
63+
Max: 4
64+
3165
# Offense count: 4
3266
# Configuration parameters: AllowedConstants.
3367
Style/Documentation:

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
### 0.9.1 (Next)
22

3+
* [#40](https://github.com/dblock/ruby-enum/pull/39): Enable new Rubocop cops and address/allowlist lints - [@petergoldstein](https://github.com/petergoldstein).
34
* [#39](https://github.com/dblock/ruby-enum/pull/39): Require Ruby >= 2.7 - [@petergoldstein](https://github.com/petergoldstein).
45
* [#38](https://github.com/dblock/ruby-enum/pull/38): Ensure Ruby >= 2.3 - [@ojab](https://github.com/ojab).
56
* Your contribution here.

Gemfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ group :development, :test do
1212
gem 'danger-toc', '0.2.0'
1313
gem 'rspec', '~> 3.0'
1414
gem 'rubocop', '~> 1.0'
15+
gem 'rubocop-rake'
16+
gem 'rubocop-rspec'
1517
end
1618

1719
group :test do

lib/ruby-enum/errors/base.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def compose_message(key, attributes = {})
2222
@summary = create_summary(key, attributes)
2323
@resolution = create_resolution(key, attributes)
2424

25-
"\nProblem:\n #{@problem}"\
25+
"\nProblem:\n #{@problem}" \
2626
"\nSummary:\n #{@summary}" + "\nResolution:\n #{@resolution}"
2727
end
2828

ruby-enum.gemspec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,5 @@ Gem::Specification.new do |s|
1717
s.licenses = ['MIT']
1818
s.summary = 'Enum-like behavior for Ruby.'
1919
s.add_dependency 'i18n'
20+
s.metadata['rubygems_mfa_required'] = 'true'
2021
end

spec/ruby-enum/enum_spec.rb

Lines changed: 43 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)