radius-spec 0.7.0 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
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