checkoff 0.5.5 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +119 -12
  3. data/.envrc +2 -0
  4. data/.git-hooks/pre_commit/circle_ci.rb +21 -0
  5. data/.gitignore +50 -1
  6. data/.overcommit.yml +53 -0
  7. data/.rubocop.yml +64 -168
  8. data/.yamllint.yml +8 -0
  9. data/CODE_OF_CONDUCT.md +120 -36
  10. data/DEVELOPMENT.md +28 -0
  11. data/Gemfile.lock +130 -0
  12. data/{LICENSE.txt → LICENSE} +7 -6
  13. data/Makefile +48 -18
  14. data/README.md +15 -2
  15. data/Rakefile +2 -9
  16. data/bin/bump +29 -0
  17. data/bin/checkoff +29 -0
  18. data/bin/overcommit +29 -0
  19. data/bin/rake +29 -0
  20. data/checkoff.gemspec +9 -5
  21. data/coverage/.last_run.json +2 -1
  22. data/docs/cookiecutter_input.json +13 -0
  23. data/fix.sh +299 -0
  24. data/lib/checkoff/cli.rb +9 -1
  25. data/lib/checkoff/config_loader.rb +43 -3
  26. data/lib/checkoff/projects.rb +5 -5
  27. data/lib/checkoff/sections.rb +48 -11
  28. data/lib/checkoff/tasks.rb +1 -1
  29. data/lib/checkoff/version.rb +1 -1
  30. data/lib/checkoff/workspaces.rb +4 -3
  31. data/metrics/bigfiles_high_water_mark +1 -1
  32. data/metrics/rubocop_high_water_mark +1 -1
  33. data/{lib/tasks → rakelib}/ci.rake +0 -0
  34. data/{lib/tasks → rakelib}/clear_metrics.rake +1 -1
  35. data/{lib/tasks → rakelib}/default.rake +0 -0
  36. data/rakelib/gem_tasks.rake +3 -0
  37. data/{lib/tasks → rakelib}/localtest.rake +1 -1
  38. data/rakelib/overcommit.rake +6 -0
  39. data/rakelib/quality.rake +4 -0
  40. data/{lib/tasks → rakelib}/test.rake +0 -0
  41. data/rakelib/undercover.rake +8 -0
  42. data/requirements_dev.txt +2 -0
  43. metadata +93 -25
  44. data/.ruby-version +0 -1
  45. data/.travis.yml +0 -22
  46. data/lib/tasks/feature.rake +0 -9
  47. data/lib/tasks/quality.rake +0 -9
  48. data/lib/tasks/spec.rake +0 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4ca9a96e298922b58c2d0912260c32e663591a1a8c9d331941d81387f66c5331
4
- data.tar.gz: 96d002a7f29d566425c506ccbeddd002e85b7328377947a88942baa2c8a462e2
3
+ metadata.gz: 121d92b56f0936e25ff98efd5f601e9fea6cf6a71191f0ba7a2803785bcc1feb
4
+ data.tar.gz: e3b871d18fa8263e0d61df92e22b59a369b5f78e527a8da57ac0fb472db5c34d
5
5
  SHA512:
6
- metadata.gz: 30328a895342c49a1e1e2ec59feb28e7a8ee1569f0210230cad181eaab9e8fee0c4a640fe4748447852d16dbd177cf77038a8cbc0f5b8f8be60ca3c497c5e71f
7
- data.tar.gz: 8db7e5cd89c5ae2a9a826bbf142ef13b10fe181245964a049b395956c273537e296740935cdae8cfc0c324c5e0d056b2eb0f2576d13267b5ed36a013963d44d0
6
+ metadata.gz: '0862ee2cd9aababfb015020a1c55e6f7a5027bc001b2ec6317b661b7407fcb095bb981f7d44ad251a50166edf674bc798f3629b986cece29eb30286f7be09fd0'
7
+ data.tar.gz: ebaed1748125699b93f3804ee79d2c33fdf560aa232e904a69fb1e55ad3520802096b35ea9a921e5b70c67f37a6c78ce3444606333e6ed81ca6f7e4912ae61b6
data/.circleci/config.yml CHANGED
@@ -1,17 +1,124 @@
1
- version: 2
1
+ ---
2
+ version: 2.1
3
+
4
+ commands:
5
+ run_with_languages:
6
+ description: "Run the given command in an environment that includes relevant langauges in the PATH"
7
+ parameters:
8
+ command:
9
+ type: string
10
+ description: "What command to execute"
11
+ label:
12
+ type: string
13
+ description: "What to label the run"
14
+ default: <<parameters.command>>
15
+ steps:
16
+ - run:
17
+ name: <<parameters.label>>
18
+ command: |
19
+ export PATH="${HOME}/.pyenv/bin:${PATH}"
20
+ export PATH="${HOME}/.rbenv/bin:${HOME}/.rbenv/shims:${PATH}"
21
+ export PATH="${HOME}/project/node_modules/.bin:${PATH}"
22
+ eval "$(pyenv init -)"
23
+ eval "$(pyenv virtualenv-init -)"
24
+ eval "$(rbenv init -)"
25
+ export BUNDLE_PATH=vendor/bundle
26
+
27
+ <<parameters.command>>
28
+ environment:
29
+ # https://app.circleci.com/pipelines/github/apiology/cookiecutter-pypackage/4/workflows/29074dc8-944c-4600-8aaa-5116575fed90/jobs/4
30
+ "LC_ALL": "C.UTF-8"
31
+ "LANG": "C.UTF-8"
32
+ set_up_environment:
33
+ description: "Install source environment"
34
+ steps:
35
+ - checkout
36
+ - run: |
37
+ sed -E -e 's/checkoff \([[:digit:]]+.[[:digit:]]+.[[:digit:]]+\)/checkoff (0.1.0)/g' \
38
+ Gemfile.lock > Gemfile.lock.deversioned
39
+ - restore_cache:
40
+ key: gems-v4-{{ checksum "Gemfile.lock.deversioned" }}
41
+ - run:
42
+ name: Initialize packages
43
+ command: |
44
+ export BUNDLE_PATH=vendor/bundle
45
+ './fix.sh'
46
+ - run:
47
+ name: Verify Gemfile.lock
48
+ command: |
49
+ if ! git diff --exit-code Gemfile.lock
50
+ then
51
+ >&2 echo "Please resolve changes to Gemfile.lock after bundle install to avoid caching difficulties"
52
+ exit 1
53
+ fi
54
+ - save_cache:
55
+ key: gems-v4-{{ checksum "Gemfile.lock.deversioned" }}
56
+ paths:
57
+ - "vendor/bundle"
58
+ - run:
59
+ name: Download new circleci tool
60
+ command: |
61
+ curl -fLSs \
62
+ https://raw.githubusercontent.com/CircleCI-Public/circleci-cli/master/install.sh | sudo bash
63
+ overcommit:
64
+ description: "Run overcommit"
65
+ steps:
66
+ - set_up_environment
67
+ - run_with_languages:
68
+ label: Run overcommit
69
+ command: |
70
+ # Coax overcommit into working
71
+ git config --global user.email "test@test.test"
72
+ git config --global user.name "Test Test"
73
+ bundle exec overcommit --sign
74
+ bundle exec overcommit --sign pre-commit
75
+
76
+ bundle exec overcommit --run
77
+
2
78
  jobs:
79
+ overcommit:
80
+ docker:
81
+ - image: apiology/circleci:latest
82
+ steps:
83
+ - when:
84
+ condition:
85
+ equal: [<< pipeline.git.branch >>, "main"]
86
+ steps:
87
+ - overcommit
88
+ - unless:
89
+ condition:
90
+ equal: [<< pipeline.git.branch >>, "main"]
91
+ steps:
92
+ - run: echo "overcommit only runs on main branch"
3
93
  build:
4
94
  working_directory: ~/checkoff
5
95
  docker:
6
- - image: apiology/circleci-ruby:latest
96
+ - image: apiology/circleci:latest
7
97
  steps:
8
- - checkout
9
- - type: cache-restore
10
- key: checkoff-{{ checksum "checkoff.gemspec" }}-{{ checksum "Gemfile" }}
11
- - run: gem install --no-document bundler
12
- - run: bundle install --path vendor/bundle --jobs=4
13
- - type: cache-save
14
- key: checkoff-{{ checksum "checkoff.gemspec" }}-{{ checksum "Gemfile" }}
15
- paths:
16
- - "vendor/bundle"
17
- - run: bundle exec rake --jobs=4 ci
98
+ - set_up_environment
99
+ - run_with_languages:
100
+ label: Run tests
101
+ command: |
102
+ make test
103
+ # https://github.com/bluelabsio/records-mover/blob/master/Makefile#L25
104
+ git status --porcelain coverage/.last_run.json
105
+ test -z "$(git status --porcelain coverage/.last_run.json)"
106
+
107
+ workflows:
108
+ version: 2
109
+ weekly:
110
+ triggers:
111
+ - schedule:
112
+ cron: "0 0 * * 6"
113
+ filters:
114
+ branches:
115
+ only:
116
+ - main
117
+ jobs:
118
+ - build
119
+ overcommit:
120
+ jobs:
121
+ - overcommit
122
+ build:
123
+ jobs:
124
+ - build
data/.envrc ADDED
@@ -0,0 +1,2 @@
1
+ PATH_add bin
2
+ eval $(with-op op-env sh -e ASANA__PERSONAL_ACCESS_TOKEN)
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Overcommit
4
+ module Hook
5
+ module PreCommit
6
+ # CircleCI plugin for Overcommit to validate config file (.circleci/config.yml)
7
+ class CircleCi < Base
8
+ def run
9
+ result = execute(command)
10
+ return :pass if result.success?
11
+
12
+ if result.success?
13
+ :pass
14
+ else
15
+ [:fail, result.stderr]
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
data/.gitignore CHANGED
@@ -1,12 +1,61 @@
1
+ # OSX useful to ignore
2
+ *.DS_Store
3
+ .AppleDouble
4
+ .LSOverride
5
+
6
+ # Thumbnails
7
+ ._*
8
+
9
+ # Files that might appear in the root of a volume
10
+ .DocumentRevisions-V100
11
+ .fseventsd
12
+ .Spotlight-V100
13
+ .TemporaryItems
14
+ .Trashes
15
+ .VolumeIcon.icns
16
+ .com.apple.timemachine.donotpresent
17
+
18
+ # Directories potentially created on remote AFP share
19
+ .AppleDB
20
+ .AppleDesktop
21
+ Network Trash Folder
22
+ Temporary Items
23
+ .apdisk
24
+
25
+ # IntelliJ Idea family of suites
26
+ .idea
27
+ *.iml
28
+ ## File-based project format:
29
+ *.ipr
30
+ *.iws
31
+ ## mpeltonen/sbt-idea plugin
32
+ .idea_modules/
33
+
34
+ # IDE settings
35
+ .vscode/
36
+
37
+ # Editor temp files
38
+ *~
39
+ \#*\#
40
+
41
+ # Used by Makefile to track what we have and haven't installed
42
+ Gemfile.lock.installed
43
+ requirements_dev.txt.installed
44
+
45
+ # Installed by fix.sh based on what latest versions are
46
+ /.python-version
47
+ /.ruby-version
48
+
49
+ # Ruby-related
1
50
  /.bundle/
2
51
  /.yardoc
3
- /Gemfile.lock
4
52
  /_yardoc/
5
53
  /doc/
6
54
  /pkg/
7
55
  /spec/reports/
8
56
  /tmp/
9
57
  /coverage/.resultset.json
58
+ /coverage/.resultset.json.lock
10
59
  /coverage/assets/
11
60
  /coverage/index.html
12
61
  /pkg
data/.overcommit.yml ADDED
@@ -0,0 +1,53 @@
1
+ ---
2
+ # Use this file to configure the Overcommit hooks you wish to use. This will
3
+ # extend the default configuration defined in:
4
+ # https://github.com/sds/overcommit/blob/master/config/default.yml
5
+ #
6
+ # At the topmost level of this YAML file is a key representing type of hook
7
+ # being run (e.g. pre-commit, commit-msg, etc.). Within each type you can
8
+ # customize each hook, such as whether to only run it on certain files (via
9
+ # `include`), whether to only display output if it fails (via `quiet`), etc.
10
+ #
11
+ # For a complete list of hooks, see:
12
+ # https://github.com/sds/overcommit/tree/master/lib/overcommit/hook
13
+ #
14
+ # For a complete list of options that you can use to customize hooks, see:
15
+ # https://github.com/sds/overcommit#configuration
16
+ #
17
+ # Uncomment the following lines to make the configuration take effect.
18
+
19
+ PreCommit:
20
+ RuboCop:
21
+ enabled: true
22
+ on_warn: fail # Treat all warnings as failures
23
+ command: ['bundle', 'exec', 'rubocop']
24
+ include:
25
+ - '**/*.gemspec'
26
+ - '**/*.rake'
27
+ - '**/*.rb'
28
+ - '**/*.ru'
29
+ - '**/Gemfile'
30
+ - '**/Rakefile'
31
+ - 'bin/*'
32
+ PythonFlake8:
33
+ enabled: true
34
+ on_warn: fail
35
+ ShellCheck:
36
+ enabled: true
37
+ on_warn: fail
38
+ YamlLint:
39
+ enabled: true
40
+ on_warn: fail
41
+ CircleCi:
42
+ required_executable: 'circleci'
43
+ flags: ['config', 'validate']
44
+ include:
45
+ - '.circleci/config.yml'
46
+ enabled: true
47
+
48
+ PrePush:
49
+ Minitest:
50
+ command: ['ruby', '-Ilib:test/unit:lib/checkoff', '-rbundler/setup', '-rminitest', "-e 'exit! Minitest.run'"]
51
+ include:
52
+ - 'test/unit/**/test*.rb'
53
+ enabled: true
data/.rubocop.yml CHANGED
@@ -1,30 +1,55 @@
1
- # I like trailing commas in hashes. They let me insert new elements and
2
- # see them as one line in a diff, not two.
3
- Style/TrailingCommaInHashLiteral:
4
- EnforcedStyleForMultiline: comma
1
+ ---
2
+ Layout/LineLength:
3
+ Max: 120
5
4
 
6
- Style/TrailingCommaInArrayLiteral:
7
- EnforcedStyleForMultiline: comma
5
+ Layout/MultilineMethodCallIndentation:
6
+ EnforcedStyle: indented
7
+
8
+ Lint/UnusedMethodArgument:
9
+ AllowUnusedKeywordArguments: true
10
+
11
+ # https://stackoverflow.com/questions/40934345/rubocop-25-line-block-size-and-rspec-tests
12
+ Metrics/BlockLength:
13
+ # Exclude DSLs
14
+ Exclude:
15
+ - 'Rakefile'
16
+ - '*.gemspec'
17
+ - '**/*.rake'
18
+ - 'spec/**/*.rb'
19
+ - 'feature/**/*.rb'
8
20
 
9
21
  # I use keyword arguments for a poor man's dependency injection to cut
10
22
  # down on the magic in my tests.
11
23
  Metrics/ParameterLists:
12
24
  CountKeywordArgs: false
13
25
 
14
- # If I'm using one function name and returning the contents of an
15
- # attribute, that's OK. The alternative would be this, which I find
16
- # confusing and often not really what I mean:
26
+ # Can try removing this after I have a release installed with this
27
+ # fix (probably in rubocop-minitest 0.10.3):
17
28
  #
18
- # attr_reader :something_else
19
- # alias_method :something, :something_else
20
- Style/TrivialAccessors:
21
- ExactNameMatch: true
29
+ # https://github.com/rubocop-hq/rubocop-minitest/pull/116
30
+ Minitest/TestMethodName:
31
+ Enabled: false
32
+
33
+ Naming/HeredocDelimiterNaming:
34
+ Enabled: false
35
+
36
+ Naming/MethodParameterName:
37
+ Enabled: true
38
+ AllowedNames:
39
+ # I don't think things on this list are a terribly hard convention
40
+ # for folks to learn. bbatsov also doesn't care much for this
41
+ # check:
42
+ #
43
+ # https://github.com/rubocop-hq/rubocop/issues/3666
44
+ - e # exception
45
+ - x # cartesian coordinates
46
+ - y # cartesian coordinates
22
47
 
23
48
  #
24
49
  # Add 'XX X' to the standard list
25
50
  #
26
51
  Style/CommentAnnotation:
27
- Keywords:
52
+ Keywords:
28
53
  - "TOD\
29
54
  O"
30
55
  - "FIXM\
@@ -38,165 +63,36 @@ Style/CommentAnnotation:
38
63
  - "XX\
39
64
  X"
40
65
 
41
- # https://stackoverflow.com/questions/40934345/rubocop-25-line-block-size-and-rspec-tests
42
- Metrics/BlockLength:
43
- # Exclude DSLs
44
- Exclude:
45
- - 'Rakefile'
46
- - '*.gemspec'
47
- - '**/*.rake'
48
- - 'spec/**/*.rb'
49
- - 'feature/**/*.rb'
66
+ Style/StringLiterals:
67
+ EnforcedStyle: single_quotes
68
+ SupportedStyles:
69
+ - single_quotes
70
+ - double_quotes
71
+ ConsistentQuotesInMultiline: true
50
72
 
51
- # http://www.betterspecs.org/#single
52
- #
53
- # > in tests that are not isolated (e.g. ones that integrate with a
54
- # > DB, an external webservice, or end-to-end-tests), you take a
55
- # > massive performance hit to do the same setup over and over again,
56
- # > just to set a different expectation in each test. In these sorts
57
- # > of slower tests, I think it's fine to specify more than one
58
- # > isolated behavior.
59
- RSpec/MultipleExpectations:
60
- Exclude:
61
- - 'feature/**/*.rb'
73
+ # I like trailing commas in arrays and hashes. They let me insert new
74
+ # elements and see them as one line in a diff, not two.
75
+ Style/TrailingCommaInArrayLiteral:
76
+ EnforcedStyleForMultiline: comma
62
77
 
63
- Style/StringLiterals:
64
- EnforcedStyle: single_quotes
65
- SupportedStyles:
66
- - single_quotes
67
- - double_quotes
68
- ConsistentQuotesInMultiline: true
78
+ Style/TrailingCommaInHashLiteral:
79
+ EnforcedStyleForMultiline: comma
69
80
 
70
- Layout/BeginEndAlignment: # (new in 0.91)
71
- Enabled: true
72
- Layout/EmptyLinesAroundAttributeAccessor: # (new in 0.83)
73
- Enabled: true
74
- Layout/SpaceAroundMethodCallOperator: # (new in 0.82)
75
- Enabled: true
76
- Lint/BinaryOperatorWithIdenticalOperands: # (new in 0.89)
77
- Enabled: true
78
- Lint/ConstantDefinitionInBlock: # (new in 0.91)
79
- Enabled: true
80
- Lint/DeprecatedOpenSSLConstant: # (new in 0.84)
81
- Enabled: true
82
- Lint/DuplicateElsifCondition: # (new in 0.88)
83
- Enabled: true
84
- Lint/DuplicateRequire: # (new in 0.90)
85
- Enabled: true
86
- Lint/DuplicateRescueException: # (new in 0.89)
87
- Enabled: true
88
- Lint/EmptyConditionalBody: # (new in 0.89)
89
- Enabled: true
90
- Lint/EmptyFile: # (new in 0.90)
91
- Enabled: true
92
- Lint/FloatComparison: # (new in 0.89)
93
- Enabled: true
94
- Lint/IdentityComparison: # (new in 0.91)
95
- Enabled: true
96
- Lint/MissingSuper: # (new in 0.89)
97
- Enabled: true
98
- Lint/MixedRegexpCaptureTypes: # (new in 0.85)
99
- Enabled: true
100
- Lint/OutOfRangeRegexpRef: # (new in 0.89)
101
- Enabled: true
102
- Lint/RaiseException: # (new in 0.81)
103
- Enabled: true
104
- Lint/SelfAssignment: # (new in 0.89)
105
- Enabled: true
106
- Lint/StructNewOverride: # (new in 0.81)
107
- Enabled: true
108
- Lint/TopLevelReturnWithArgument: # (new in 0.89)
109
- Enabled: true
110
- Lint/TrailingCommaInAttributeDeclaration: # (new in 0.90)
111
- Enabled: true
112
- Lint/UnreachableLoop: # (new in 0.89)
113
- Enabled: true
114
- Lint/UselessMethodDefinition: # (new in 0.90)
115
- Enabled: true
116
- Lint/UselessTimes: # (new in 0.91)
117
- Enabled: true
118
- Style/AccessorGrouping: # (new in 0.87)
119
- Enabled: true
120
- Style/BisectedAttrAccessor: # (new in 0.87)
121
- Enabled: true
122
- Style/CaseLikeIf: # (new in 0.88)
123
- Enabled: true
124
- Style/CombinableLoops: # (new in 0.90)
125
- Enabled: true
126
- Style/ExplicitBlockArgument: # (new in 0.89)
127
- Enabled: true
128
- Style/ExponentialNotation: # (new in 0.82)
129
- Enabled: true
130
- Style/GlobalStdStream: # (new in 0.89)
131
- Enabled: true
132
- Style/HashAsLastArrayItem: # (new in 0.88)
133
- Enabled: true
134
- Style/HashEachMethods: # (new in 0.80)
135
- Enabled: true
136
- Style/HashLikeCase: # (new in 0.88)
137
- Enabled: true
138
- Style/HashTransformKeys: # (new in 0.80)
139
- Enabled: true
140
- Style/HashTransformValues: # (new in 0.80)
141
- Enabled: true
142
- Style/KeywordParametersOrder: # (new in 0.90)
143
- Enabled: true
144
- Style/OptionalBooleanParameter: # (new in 0.89)
145
- Enabled: true
146
- Style/RedundantAssignment: # (new in 0.87)
147
- Enabled: true
148
- Style/RedundantFetchBlock: # (new in 0.86)
149
- Enabled: true
150
- Style/RedundantFileExtensionInRequire: # (new in 0.88)
151
- Enabled: true
152
- Style/RedundantRegexpCharacterClass: # (new in 0.85)
153
- Enabled: true
154
- Style/RedundantRegexpEscape: # (new in 0.85)
155
- Enabled: true
156
- Style/RedundantSelfAssignment: # (new in 0.90)
157
- Enabled: true
158
- Style/SingleArgumentDig: # (new in 0.89)
159
- Enabled: true
160
- Style/SlicingWithRange: # (new in 0.83)
161
- Enabled: true
162
- Style/SoleNestedConditional: # (new in 0.89)
163
- Enabled: true
164
- Style/StringConcatenation: # (new in 0.89)
165
- Enabled: true
166
- Minitest/AssertInDelta: # (new in 0.10)
167
- Enabled: true
168
- Minitest/AssertionInLifecycleHook: # (new in 0.10)
169
- Enabled: true
170
- Minitest/AssertKindOf: # (new in 0.10)
171
- Enabled: true
172
- Minitest/AssertOutput: # (new in 0.10)
173
- Enabled: true
174
- Minitest/AssertPathExists: # (new in 0.10)
175
- Enabled: true
176
- Minitest/AssertSilent: # (new in 0.10)
177
- Enabled: true
178
- Minitest/LiteralAsActualArgument: # (new in 0.10)
179
- Enabled: true
180
- Minitest/MultipleAssertions: # (new in 0.10)
181
- Enabled: true
182
- Minitest/RefuteInDelta: # (new in 0.10)
183
- Enabled: true
184
- Minitest/RefuteKindOf: # (new in 0.10)
185
- Enabled: true
186
- Minitest/RefutePathExists: # (new in 0.10)
187
- Enabled: true
188
- Minitest/TestMethodName: # (new in 0.10)
189
- # This gives false positives when non-test methods exist...
190
- Enabled: false
191
- Minitest/UnspecifiedException: # (new in 0.10)
192
- Enabled: true
193
- RSpec/StubbedMock: # (new in 1.44)
194
- Enabled: true
81
+ # If I'm using one function name and returning the contents of an
82
+ # attribute, that's OK. The alternative would be this, which I find
83
+ # confusing and often not really what I mean:
84
+ #
85
+ # attr_reader :something_else
86
+ # alias_method :something, :something_else
87
+ Style/TrivialAccessors:
88
+ ExactNameMatch: true
195
89
 
196
90
  AllCops:
197
- TargetRubyVersion: 2.5
91
+ NewCops: enable
92
+ TargetRubyVersion: 2.6
93
+ Exclude:
94
+ - 'bin/*'
198
95
 
199
96
  require:
200
- - rubocop-rspec
201
- - rubocop-minitest
202
97
  - rubocop-rake
98
+ - rubocop-minitest