radius-spec 0.7.0 → 0.11.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.
data/common_rubocop.yml CHANGED
@@ -1,5 +1,11 @@
1
1
  AllCops:
2
2
  TargetRubyVersion: 2.7.0
3
+ # We choose to opt-in to new checks by default. This allows us to update
4
+ # version by version without having to worry about adding an entry for each
5
+ # new "enabled by default" check. If we want to jump multiple versions and
6
+ # wish to be notified of all the enw check, then we'll need to change
7
+ # `NewCops` to `pending`.
8
+ NewCops: enable
3
9
  Exclude:
4
10
  # Exclude generated binstubs
5
11
  - 'bin/bundle'
@@ -18,6 +24,11 @@ AllCops:
18
24
  # Exclude vendored content
19
25
  - 'vendor/**/*'
20
26
 
27
+ # We would like to disallow http for bundler sources and enforce https
28
+ # as it is more secure.
29
+ Bundler/InsecureProtocolSource:
30
+ AllowHttpProtocol: false
31
+
21
32
  # We prefer outdented access modifiers as we feel they provide demarcation of
22
33
  # the class similar to `rescue` and `ensure` in a method.
23
34
  #
@@ -30,6 +41,18 @@ Layout/AccessModifierIndentation:
30
41
  similar to `rescue` and `ensure` in a method.
31
42
  EnforcedStyle: outdent
32
43
 
44
+ # This cop checks whether the end keyword of begin is aligned properly.
45
+ #
46
+ # Two modes are supported through the EnforcedStyleAlignWith configuration parameter. If it’s set to
47
+ # begin, the end shall be aligned with the begin keyword. We chose this to be consistent with our if
48
+ # statement styles, if you want the end to be aligned with the start of the line just put the begin
49
+ # on the next line.
50
+ #
51
+ # Configuration parameters: EnforcedStyleAlignWith
52
+ # SupportedStyles: start_of_line, begin
53
+ Layout/BeginEndAlignment:
54
+ EnforcedStyleAlignWith: begin
55
+
33
56
  # Rubocop 0.60.0 changed how it handled value alignments in this cop. This
34
57
  # breaks our preference for wanting keys to be aligned, but allowing values to
35
58
  # either use the `key` or `table` style:
@@ -56,7 +79,7 @@ Layout/AccessModifierIndentation:
56
79
  # SupportedHashRocketStyles: key, separator, table
57
80
  # SupportedColonStyles: key, separator, table
58
81
  # SupportedLastArgumentHashStyles: always_inspect, always_ignore, ignore_implicit, ignore_explicit
59
- Layout/AlignHash:
82
+ Layout/HashAlignment:
60
83
  Enabled: true
61
84
  EnforcedHashRocketStyle: key
62
85
  EnforcedColonStyle: key
@@ -82,17 +105,43 @@ Layout/BlockAlignment:
82
105
  #
83
106
  # TODO: At some point this is split into both Layout/FirstArgumentIndentation
84
107
  # and Layout/FirstParameterIndentation
85
- Layout/IndentFirstArgument:
108
+ Layout/FirstArgumentIndentation:
86
109
  Enabled: false
87
110
 
88
- # This project only uses newer Ruby versions which all support the "squiggly"
89
- # style. We prefer to use pure Ruby calls when possible instead of relying on
90
- # alternatives; even for Rails app.
111
+ # We generally prefer to use the default line length of 80. Though sometimes
112
+ # we just need a little extra space because it makes it easier to read.
91
113
  #
92
- # Configuration parameters: EnforcedStyle.
93
- # SupportedStyles: auto_detection, squiggly, active_support, powerpack, unindent
94
- Layout/IndentHeredoc:
95
- EnforcedStyle: squiggly
114
+ # The only way to disable Rubocop for a single line is either to wrap the line
115
+ # with two comments or append the disable comment to the end of the line. For
116
+ # guard clauses, we tend to prefer trailing comments to avoid adding two lines
117
+ # just to disable a cop on one line.
118
+ #
119
+ # Sometimes comments include ASCII diagrams, flow charts, etc. These cannot
120
+ # always be reformatted to fit within the 80 column limit. Also, we write most
121
+ # comments in markdown format. Rubocop isn't very good at understanding when
122
+ # the line is long because of a URL in a markdown link. Instead of requiring
123
+ # additional comments to turn this cop off for comments we ignore any long
124
+ # lines which are only comments.
125
+ #
126
+ # There are also cases where for one valid reason or another we have a trailing
127
+ # comment that extends a little too far. We'd like to be able to ignore those
128
+ # as well. This _attempts_ to do that, however, as this uses simple regular
129
+ # expressions we can only attempt to match so much. We probably should change
130
+ # this for a node pattern matcher in the future.
131
+ #
132
+ # Configuration parameters: AllowHeredoc, AllowURI, URISchemes,
133
+ # IgnoreCopDirectives, IgnoredPatterns.
134
+ # URISchemes: http, https
135
+ Layout/LineLength:
136
+ IgnoreCopDirectives: true
137
+ IgnoredPatterns:
138
+ # Leading comments
139
+ - '\A\s*#'
140
+ # Attempt at trailing comments
141
+ - '\A.{1,78}\s#\s.*\z'
142
+ Max: 100
143
+ Exclude:
144
+ - '**/*.gemspec'
96
145
 
97
146
  # We tend to indent multi-line operation statements. I think this is because it
98
147
  # tends to be the default style auto-formatted by VIM (which many of us use).
@@ -123,6 +172,18 @@ Layout/MultilineOperationIndentation:
123
172
  # }.to change {
124
173
  # object.state
125
174
  # }
175
+ #
176
+ # WARNING TO FUTURE READERS (future being after 2021-12-10):
177
+ # We tried to allowlist certain methods using the IgnoredMethods option (introduced 1.13.0),
178
+ # and Rubocop successfully ignored `change` and `not_change` constructions, but it flag false
179
+ # positives against code like
180
+ #
181
+ # expect { something }
182
+ # .to enqueue_job(SomeJobClass)
183
+ # .with { custom expectations about the enqueued payload }
184
+ #
185
+ # no matter what combination of `enqueue_job` and `with` we tried to add to the IgnoredMethods
186
+ # array. We suspect the AST matching is somewhat half-baked.
126
187
  Lint/AmbiguousBlockAssociation:
127
188
  Exclude:
128
189
  - 'spec/**/*_spec.rb'
@@ -152,6 +213,10 @@ Lint/HeredocMethodCallPosition:
152
213
  Lint/InheritException:
153
214
  EnforcedStyle: standard_error
154
215
 
216
+ # Make developers explain themselves in a comment if they want their rescue block to do nothing.
217
+ Lint/SuppressedException:
218
+ AllowNil: false
219
+
155
220
  # Often with benchmarking we don't explicitly "use" a variable or return value.
156
221
  # We simply need to perform the operation which generates said value for the
157
222
  # benchmark.
@@ -162,70 +227,54 @@ Lint/Void:
162
227
  - 'benchmarks/**/*'
163
228
 
164
229
  Metrics/AbcSize:
165
- # TODO: When we are able to upgrade to Rubocop 1.5.0 we want to enable the
166
- # following `CountRepeatedAttributes` option. We often find the
167
- # multi-references to the same object to be necessary for reability and that
168
- # for our team it does not increase complexity.
169
- #
170
- # CountRepeatedAttributes: false
230
+ CountRepeatedAttributes: false
171
231
  Max: 17
172
232
 
173
- # Configuration parameters: CountComments, ExcludedMethods, Max.
174
- # ExcludedMethods: refine
233
+ # Configuration parameters: CountComments, IgnoredMethods, Max.
234
+ # IgnoredMethods: refine
175
235
  Metrics/BlockLength:
236
+ CountAsOne:
237
+ - 'array'
238
+ - 'hash'
239
+ - 'heredoc'
176
240
  Exclude:
177
241
  - '**/Rakefile'
178
242
  - '**/*.rake'
179
243
  - 'spec/spec_helper.rb'
180
244
  - 'spec/**/*_spec.rb'
181
245
  - 'spec/support/model_factories.rb'
182
- ExcludedMethods:
246
+ IgnoredMethods:
183
247
  - 'chdir'
248
+ - 'describe'
184
249
  - 'refine'
250
+ - 'shared_context'
251
+ - 'shared_examples'
185
252
  - 'Capybara.register_driver'
186
253
  - 'RSpec.configure'
254
+ - 'RSpec.describe'
255
+ - 'RSpec.shared_context'
256
+ - 'RSpec.shared_examples'
187
257
  - 'VCR.configure'
188
258
 
189
- # We generally prefer to use the default line length of 80. Though sometimes
190
- # we just need a little extra space because it makes it easier to read.
191
- #
192
- # The only way to disable Rubocop for a single line is either to wrap the line
193
- # with two comments or append the disable comment to the end of the line. For
194
- # guard clauses, we tend to prefer trailing comments to avoid adding two lines
195
- # just to disable a cop on one line.
196
- #
197
- # Sometimes comments include ASCII diagrams, flow charts, etc. These cannot
198
- # always be reformatted to fit within the 80 column limit. Also, we write most
199
- # comments in markdown format. Rubocop isn't very good at understanding when
200
- # the line is long because of a URL in a markdown link. Instead of requiring
201
- # additional comments to turn this cop off for comments we ignore any long
202
- # lines which are only comments.
203
- #
204
- # There are also cases where for one valid reason or another we have a trailing
205
- # comment that extends a little too far. We'd like to be able to ignore those
206
- # as well. This _attempts_ to do that, however, as this uses simple regular
207
- # expressions we can only attempt to match so much. We probably should change
208
- # this for a node pattern matcher in the future.
209
- #
210
- # Configuration parameters: AllowHeredoc, AllowURI, URISchemes,
211
- # IgnoreCopDirectives, IgnoredPatterns.
212
- # URISchemes: http, https
213
- Metrics/LineLength:
214
- IgnoreCopDirectives: true
215
- IgnoredPatterns:
216
- # Leading comments
217
- - '\A\s*#'
218
- # Attempt at trailing comments
219
- - '\A.{1,78}\s#\s.*\z'
220
- Max: 100
221
- Exclude:
222
- - '**/*.gemspec'
223
-
224
- # TODO: Remove this when we get to 0.89.0 as the new default max is 8
225
- #
226
- # Configuration parameters: IgnoredMethods, Max
227
- Metrics/PerceivedComplexity:
228
- Max: 8
259
+ # We want length related code metrics to count Hashs, Arrays, and
260
+ # Heredocs as one "line"
261
+ Metrics/ClassLength:
262
+ CountAsOne:
263
+ - 'array'
264
+ - 'hash'
265
+ - 'heredoc'
266
+
267
+ Metrics/ModuleLength:
268
+ CountAsOne:
269
+ - 'array'
270
+ - 'hash'
271
+ - 'heredoc'
272
+
273
+ Metrics/MethodLength:
274
+ CountAsOne:
275
+ - 'array'
276
+ - 'hash'
277
+ - 'heredoc'
229
278
 
230
279
  # This is overly pedantic (only allowing `other` as the parameter name). Ruby
231
280
  # core doesn't follow this consistently either. Looking at several classes
@@ -235,6 +284,21 @@ Metrics/PerceivedComplexity:
235
284
  Naming/BinaryOperatorParameterName:
236
285
  Enabled: false
237
286
 
287
+ # We don't need this configured just yet, because we dont have any applications on
288
+ # Ruby 3.1, but pre-emptively, we want to configure this to prefer the explicit style.
289
+ #
290
+ # bad
291
+ # def foo(&)
292
+ # bar(&)
293
+ # end
294
+
295
+ # good
296
+ # def foo(&block)
297
+ # bar(&block)
298
+ # end
299
+ Naming/BlockForwarding:
300
+ EnforcedStyle: explicit
301
+
238
302
  # Configuration parameters: ExpectMatchingDefinition, Regex, IgnoreExecutableScripts, AllowedAcronyms.
239
303
  # AllowedAcronyms: CLI, DSL, ACL, API, ASCII, CPU, CSS, DNS, EOF, GUID, HTML, HTTP, HTTPS, ID, IP, JSON, LHS, QPS, RAM, RHS, RPC, SLA, SMTP, SQL, SSH, TCP, TLS, TTL, UDP, UI, UID, UUID, URI, URL, UTF8, VM, XML, XMPP, XSRF, XSS
240
304
  Naming/FileName:
@@ -248,14 +312,14 @@ Naming/FileName:
248
312
  # `EOF` is a common terminal abbreviate indicating end-of-file. We allow this
249
313
  # for those heredocs which represent "file" text.
250
314
  #
251
- # Configuration parameters: Blacklist.
252
- # Blacklist: (?-mix:(^|\s)(EO[A-Z]{1}|END)(\s|$))
315
+ # Configuration parameters: ForbiddenDelimiters.
316
+ # ForbiddenDelimiters: (?-mix:(^|\s)(EO[A-Z]{1}|END)(\s|$))
253
317
  Naming/HeredocDelimiterNaming:
254
318
  Details: |
255
319
 
256
320
  Use meaningful delimiter names to provide context to the text. The only
257
321
  allowed `EO*` variant if `EOF` which has specific meaning for file content.
258
- Blacklist:
322
+ ForbiddenDelimiters:
259
323
  - !ruby/regexp '/(^|\s)(EO[A-EG-Z]{1}|END)(\s|$)/'
260
324
 
261
325
  # It is generally a good idea to match the instance variable names with their
@@ -324,6 +388,9 @@ Style/AndOr:
324
388
  # These days most people have editors which support unicode and other
325
389
  # non-ASCII characters.
326
390
  #
391
+ # In version 1.21.0, this is disabled by default. We've chosen to leave
392
+ # it in the config, in case it changes in future versions.
393
+ #
327
394
  # Configuration parameters: AllowedChars.
328
395
  Style/AsciiComments:
329
396
  Enabled: false
@@ -380,6 +447,15 @@ Style/BlockDelimiters:
380
447
  - proc
381
448
  - it
382
449
 
450
+ # As a team we prefer the more explicit `def self.method_name` style. We find
451
+ # the explicitness easier to read and grep for on the CLI.
452
+ #
453
+ # Configuration parameters: EnforcedStyle.
454
+ # SupportedStyles: def_self, self_class
455
+ Style/ClassMethodsDefinitions:
456
+ Enabled: true
457
+ EnforcedStyle: def_self
458
+
383
459
  # Prefer `Time` over `DateTime`.
384
460
  #
385
461
  # While these are not necessarily interchangeable we prefer `Time`. According
@@ -454,6 +530,13 @@ Style/EmptyCaseCondition:
454
530
  Style/EmptyMethod:
455
531
  EnforcedStyle: expanded
456
532
 
533
+ # Always require the pragma comment to be true
534
+ #
535
+ # Configuration parameters: EnforcedStyle.
536
+ # SupportedStyles: always, always_true, never
537
+ Style/FrozenStringLiteralComment:
538
+ EnforcedStyle: always_true
539
+
457
540
  # Prefer symbol keys using the 1.9 hash syntax. However, when keys are mixed
458
541
  # use a consistent mapping style; which generally means using hash rockets:
459
542
  #
@@ -474,6 +557,7 @@ Style/HashSyntax:
474
557
  Prefer symbol keys using the 1.9 hash syntax. However, when keys are mixed
475
558
  use a consistent mapping style; which generally means using hash rockets.
476
559
  EnforcedStyle: ruby19_no_mixed_keys
560
+ EnforcedShorthandSyntax: either
477
561
 
478
562
  # As part of our semantic style we generally use the literal `-> { }` format to
479
563
  # indicate this is a function with a return value we care about. As this cop
@@ -504,6 +588,11 @@ Style/MethodCalledOnDoEndBlock:
504
588
  Style/MultilineBlockChain:
505
589
  Enabled: false
506
590
 
591
+ # Disallowing numbered parameter usage because we dont prefer this style.
592
+ # We would rather name the paramaters to clearly communicate intent.
593
+ Style/NumberedParameters:
594
+ EnforcedStyle: disallow
595
+
507
596
  # Context for this cop is too dependent.
508
597
  #
509
598
  # Often using the numeric comparison is faster. Also, depending on the context
@@ -520,6 +609,12 @@ Style/MultilineBlockChain:
520
609
  Style/NumericPredicate:
521
610
  Enabled: false
522
611
 
612
+ # As a general rule, we want to be explicit here instead of requiring readers
613
+ # of our code to know what the default arguments to methods like `#join` and
614
+ # and `#split` so we disable this cop here.
615
+ Style/RedundantArgument:
616
+ Enabled: false
617
+
523
618
  # In Ruby every method returns a value. Implicitly this is the value of the
524
619
  # last line of the method. This means using `return` is often redundant.
525
620
  # However, there isn't anything inherently wrong about doing so. In fact, in
@@ -627,6 +722,20 @@ Style/RescueStandardError:
627
722
  Avoid rescuing `Exception` as this may hide system errors.
628
723
  EnforcedStyle: implicit
629
724
 
725
+ # We don't really care which style we use here and would prefer rubocop not
726
+ # complain about this.
727
+ Style/SlicingWithRange:
728
+ Enabled: false
729
+
730
+ # We want to turn this cop on so that rubocop can yell at us instead of Aaron
731
+ # yelling at us.
732
+ Style/StaticClass:
733
+ Enabled: true
734
+
735
+ # Enable Style/StringChars
736
+ Style/StringChars:
737
+ Enabled: true
738
+
630
739
  # We generally prefer double quotes but many generators use single quotes. We
631
740
  # don't view the performance difference to be all that much so we don't care
632
741
  # if the style is mixed or double quotes are used for static strings.
@@ -657,6 +766,13 @@ Style/StringLiteralsInInterpolation:
657
766
  Style/SymbolArray:
658
767
  MinSize: 3
659
768
 
769
+ # Allow either
770
+ # something.do_something(foo, &:bar)
771
+ # or
772
+ # something.do_something(foo) { |s| s.bar }
773
+ Style/SymbolProc:
774
+ AllowMethodsWithArguments: true
775
+
660
776
  # When ternaries become complex they can be difficult to read due to increased
661
777
  # cognitive load parsing the expression. Cognitive load can increase further
662
778
  # when assignment is involved.
@@ -719,6 +835,11 @@ Style/TrailingCommaInHashLiteral:
719
835
  simplifies adding, removing, and re-arranging the elements.
720
836
  EnforcedStyleForMultiline: consistent_comma
721
837
 
838
+ # Don't combine && & || inside the same `unless` guard clause.
839
+ Style/UnlessLogicalOperators:
840
+ Enabled: true
841
+ EnforcedStyle: forbid_mixed_logical_operators
842
+
722
843
  # We don't feel too strongly about percent vs bracket array style. We tend to
723
844
  # use the percent style, which also happens to be Rubocop's default. So for
724
845
  # pedantic consistency we'll enforce this.
@@ -738,3 +859,7 @@ Style/WordArray:
738
859
  # SupportedStyles: all_comparison_operators, equality_operators_only
739
860
  Style/YodaCondition:
740
861
  Enabled: false
862
+
863
+ # Disabled in 1.21.0. Radius Networks has chosen to enable it.
864
+ Naming/InclusiveLanguage:
865
+ Enabled: true
@@ -20,26 +20,26 @@ AllCops:
20
20
  - 'db/migrate/**/*'
21
21
 
22
22
  # Rails project's are not concerned with API docs normally
23
- Documentation:
23
+ Style/Documentation:
24
24
  Enabled: false
25
25
 
26
- Metrics/BlockLength:
27
- Exclude:
28
- - 'bin/setup'
29
- - 'bin/update'
30
- - 'config/routes.rb'
31
- - 'spec/rails_helper.rb'
32
-
33
26
  # Rails foreign keys and indexes can get long. We want to ignore our annotation
34
27
  # comments which are for these entries.
35
28
  #
36
29
  # Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
37
30
  # URISchemes: http, https
38
- Metrics/LineLength:
31
+ Layout/LineLength:
39
32
  IgnoredPatterns:
40
33
  - '\A# fk_rails_'
41
34
  - '\A# index_'
42
35
 
36
+ Metrics/BlockLength:
37
+ Exclude:
38
+ - 'bin/setup'
39
+ - 'bin/update'
40
+ - 'config/routes.rb'
41
+ - 'spec/rails_helper.rb'
42
+
43
43
  # For our Rails apps several of them use the `respond_to` with `format` blocks
44
44
  # to handle various mime types (mostly HTML and JSON). Given our `do` / `end`
45
45
  # block style for non-functional blocks (which includes both `respond_to` and
@@ -106,19 +106,39 @@ Rails/ApplicationRecord:
106
106
  Rails/CreateTableWithTimestamps:
107
107
  Enabled: false
108
108
 
109
+ # This cop looks for uses of default_scope because named scopes are preferred:
110
+ # https://rails.rubystyle.guide/#named-scopes
111
+ Rails/DefaultScope:
112
+ Enabled: true
113
+
114
+ # We were originally going to disable this, but after much discussion agreed that enabling
115
+ # this cop with AllowReads: true should be relatively painless.
116
+ Rails/EnvironmentVariableAccess:
117
+ Enabled: true
118
+ AllowReads: true
119
+
109
120
  # Usage of `find_by` is more expressive of intent than `where.first`. We should
110
121
  # check all app code, not just the models to improve intent expression.
111
122
  #
112
123
  # Since rake tasks often live in `lib` we also check all of lib as well.
113
124
  #
125
+ # We are also disabling the default IgnoreWhereFirst that was added in version
126
+ # 2.11
127
+ #
114
128
  # Configuration parameters: Include.
115
129
  # Include: app/models/**/*.rb
116
130
  Rails/FindBy:
117
131
  Enabled: true
132
+ IgnoreWhereFirst: false
118
133
  Include:
119
134
  - 'app/**/*.rb'
120
135
  - 'lib/**/*.rb'
121
136
 
137
+ # This cop enforces that ActiveRecord#find is used instead of where.take!, find_by!, and find_by_id!
138
+ # to retrieve a single record by primary key when you expect it to be found.
139
+ Rails/FindById:
140
+ Enabled: true
141
+
122
142
  # Usage of `each` for large datasets can be a performance issue; specially a
123
143
  # drain on system memory. When possible it's better to use `find_each` so that
124
144
  # chunks of data are evaluated at a time.
@@ -150,6 +170,45 @@ Rails/HasAndBelongsToMany:
150
170
  Rails/IgnoredSkipActionFilterOption:
151
171
  Enabled: false
152
172
 
173
+ # We do not care about this check due to its lack of configuration.
174
+ #
175
+ # Some of the team finds the naming of this method is more confusing than using
176
+ # `each_with_object`. We all agree the other examples are bad and should not be
177
+ # used:
178
+ #
179
+ # # OK for us
180
+ # [1, 2, 3].each_with_object({}) { |el, h| h[foo(el)] = el }
181
+ #
182
+ # # Bad
183
+ # [1, 2, 3].to_h { |el| [foo(el), el] }
184
+ # [1, 2, 3].map { |el| [foo(el), el] }.to_h
185
+ # Hash[[1, 2, 3].collect { |el| [foo(el), el] }]
186
+ #
187
+ # If this check supports configuration in the future so that we can allow
188
+ # `each_with_object` then we'll turn it back on.
189
+ Rails/IndexBy:
190
+ Enabled: false
191
+
192
+ # We find the name of this method to be very confusing. We'd prefer this method
193
+ # is never used.
194
+ Rails/IndexWith:
195
+ Enabled: false
196
+
197
+ # This cop enforces the use of ids over pluck(:id) and pluck(primary_key).
198
+ # https://rails.rubystyle.guide/#ids
199
+ Rails/PluckId:
200
+ Enabled: true
201
+
202
+ # This cop identifies places where pluck is used in where query methods and can be replaced with
203
+ # select. Since pluck is an eager method and hits the database immediately, using select helps to
204
+ # avoid additional database queries.
205
+ #
206
+ # When the EnforcedStyle is aggressive then all calls to pluck in the where is used as offenses.
207
+ # This may lead to false positives as the cop cannot replace to select between calls to pluck on an
208
+ # ActiveRecord::Relation instance vs a call to pluck on an Array instance.
209
+ Rails/PluckInWhere:
210
+ EnforcedStyle: aggressive
211
+
153
212
  # The ActiveSupport monkey patches for `present?` are nearly all defined as:
154
213
  #
155
214
  # !blank?
@@ -179,6 +238,10 @@ Rails/Present:
179
238
  Rails/ReadWriteAttribute:
180
239
  Enabled: false
181
240
 
241
+ # Enabling this because it is disabled by default and we want it.
242
+ Rails/ReversibleMigrationMethodDefinition:
243
+ Enabled: true
244
+
182
245
  # This ensures we do not ignore potential validation issues in the code. Doing
183
246
  # so can lead to strange and surprising bugs where records are expected to
184
247
  # be created, or be modified, but are not.
@@ -210,6 +273,13 @@ Rails/ReadWriteAttribute:
210
273
  Rails/SaveBang:
211
274
  Enabled: true
212
275
 
276
+ # This cop enforces that short forms of I18n methods are used: t instead of translate and l instead
277
+ # of localize. We want this because it's a pain to use the full method names over and over in view
278
+ # code. When the EnforcedStyle is aggressive then all translate and localize calls without a
279
+ # receiver are added as offenses.
280
+ Rails/ShortI18n:
281
+ EnforcedStyle: aggressive
282
+
213
283
  # According to the Rails docs while the following methods skip validations they
214
284
  # only update the specified (single) attribute reducing risks. We'd rather not
215
285
  # warn for those cases:
@@ -227,14 +297,19 @@ Rails/SaveBang:
227
297
  # - http://api.rubyonrails.org/classes/ActiveRecord/Persistence.html
228
298
  # - http://api.rubyonrails.org/classes/ActiveRecord/Relation.html
229
299
  #
230
- # Configuration parameters: Blacklist, Whitelist.
231
- # Blacklist: decrement!, decrement_counter, increment!, increment_counter, toggle!, touch, update_all, update_attribute, update_column, update_columns, update_counters
300
+ # Configuration parameters: ForbiddenMethods, AllowedMethods.
301
+ # ForbiddenMethods: decrement!, decrement_counter, increment!, increment_counter, toggle!, touch, update_all, update_attribute, update_column, update_columns, update_counters
232
302
  Rails/SkipsModelValidations:
233
- Whitelist:
303
+ AllowedMethods:
234
304
  - 'decrement!'
235
305
  - 'increment!'
236
306
  - 'touch'
237
307
 
308
+ # We don't want to be forced to use squish in SQL or JSON heredocs (especially
309
+ # in specs).
310
+ Rails/SquishedSQLHeredocs:
311
+ Enabled: false
312
+
238
313
  # Rails uses compact style by default so we're disabling this with a :hammer:
239
314
  # for things likely to be generated by Rails (i.e. most things in app).
240
315
  #
@@ -109,7 +109,14 @@ module Radius
109
109
  # factory {Radius::Spec::ModelFactory.catalog}.
110
110
  class TemplateNotFound < KeyError; end
111
111
 
112
- class << self
112
+ class << self # rubocop:disable Style/ClassMethodsDefinitions
113
+ # Style Note: We are using this class method style because we need to
114
+ # call `alias_method` within this module's singleton class context.
115
+ # Ruby did not introduce access to `singleton_class` until 2.7. Once we
116
+ # drop support for Ruby < 2.7 we can switch styles and use:
117
+ #
118
+ # singleton_class.alias_method :factory, :define_factory
119
+
113
120
  # Suggested method for defining multiple factory templates at once.
114
121
  #
115
122
  # Most projects end up having many domain models which need factories
@@ -482,10 +489,8 @@ module Radius
482
489
  end
483
490
 
484
491
  # Try to load the factories defined for the specs
485
- # rubocop:disable Lint/HandleExceptions
486
492
  begin
487
493
  require 'support/model_factories'
488
494
  rescue LoadError
489
495
  # Ignore as this is an optional convenience feature
490
496
  end
491
- # rubocop:enable Lint/HandleExceptions
@@ -22,6 +22,10 @@ RSpec.configure do |config|
22
22
  # ...rather than:
23
23
  # # => "be bigger than 2"
24
24
  expectations.include_chain_clauses_in_custom_matcher_descriptions = true
25
+
26
+ # The default is to warn, but this normally just gets ignored by
27
+ # developers. It's best to fix the problem then live with the warning.
28
+ expectations.on_potential_false_positives = :raise
25
29
  end
26
30
 
27
31
  # rspec-mocks config goes here. You can use an alternate test double
@@ -101,6 +105,11 @@ RSpec.configure do |config|
101
105
  # as the one that triggered the failure.
102
106
  Kernel.srand config.seed
103
107
 
108
+ # Common shared_example / shared_context inclusion alias for behavior driven
109
+ # development
110
+ config.alias_it_should_behave_like_to :has_behavior
111
+ config.alias_it_should_behave_like_to :it_has_behavior, 'has behavior:'
112
+
104
113
  config.when_first_matching_example_defined(
105
114
  :model_factory,
106
115
  :model_factories,
@@ -124,6 +133,11 @@ RSpec.configure do |config|
124
133
  config.include Radius::Spec::ModelFactory, type: :feature
125
134
  end
126
135
 
136
+ config.when_first_matching_example_defined(type: :helper) do
137
+ require 'radius/spec/model_factory'
138
+ config.include Radius::Spec::ModelFactory, type: :helper
139
+ end
140
+
127
141
  config.when_first_matching_example_defined(type: :job) do
128
142
  require 'radius/spec/model_factory'
129
143
  config.include Radius::Spec::ModelFactory, type: :job
@@ -10,15 +10,15 @@ VCR.configure do |config|
10
10
  config.ignore_localhost = true
11
11
 
12
12
  record_mode = case
13
+ when ENV['CI']
14
+ # Never let CI record
15
+ :none
13
16
  when RSpec.configuration.files_to_run.one?
14
17
  # When developing new features we often run new specs in
15
18
  # isolation as we write the code. This is the time to allow
16
19
  # creating the cassettes.
17
20
  :once
18
- when ENV['CI']
19
- # Never let CI record
20
- :none
21
- else
21
+ else # rubocop:disable Lint/DuplicateBranch
22
22
  # Default to blocking new requests to catch issues
23
23
  :none
24
24
  end
@@ -91,10 +91,8 @@ RSpec.configure do |config|
91
91
  end
92
92
 
93
93
  # Try to any custom VCR config for the app
94
- # rubocop:disable Lint/HandleExceptions
95
94
  begin
96
95
  require 'support/vcr'
97
96
  rescue LoadError
98
97
  # Ignore as this is an optional convenience feature
99
98
  end
100
- # rubocop:enable Lint/HandleExceptions
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Radius
4
4
  module Spec
5
- VERSION = "0.7.0"
5
+ VERSION = "0.11.0"
6
6
  end
7
7
  end