### Summary
Follow up rubocop#6942.
`unset_nil` was introduced to RuboCop core at rubocop#6942.
This causes the following warning to be displayed for
`TargetRailsVersion` and `Database` where `null` (or `~`) is
specified in the RuboCop Rails `config/default.yml` configuration.
- https://github.com/rubocop-hq/rubocop-rails/blob/5180fa2c25cef467eececd9c80739f7cad6adbbf/config/default.yml#L11
- https://github.com/rubocop-hq/rubocop-rails/blob/5180fa2c25cef467eececd9c80739f7cad6adbbf/config/default.yml#L89
```console
% cd path/to/rubocop-rails
% bundle exec rake
(snip)
Warning: AllCops does not support TargetRailsVersion parameter.
Supported parameters are:
- RubyInterpreters
- Include
- Exclude
- DefaultFormatter
- DisplayCopNames
- DisplayStyleGuide
- StyleGuideBaseURL
- ExtraDetails
- StyleGuideCopsOnly
- EnabledByDefault
- DisabledByDefault
- UseCache
- MaxFilesInCache
- CacheRootDirectory
- AllowSymlinksInCacheRootDirectory
- TargetRubyVersion
Warning: Rails/BulkChangeTable does not support Database parameter.
Supported parameters are:
- Enabled
- SupportedDatabases
- Include
```
This PR aims to prevent this issue by the following work around to RuboCop Rails.
I will open a PR to RuboCop Rails if this PR is accepted.
```diff
diff --git a/lib/rubocop/rails/inject.rb b/lib/rubocop/rails/inject.rb
index abb715ea7..8d1ffa371 100644
--- a/lib/rubocop/rails/inject.rb
+++ b/lib/rubocop/rails/inject.rb
@@ -10,7 +10,7 @@ module RuboCop
hash = ConfigLoader.send(:load_yaml_configuration, path)
config = Config.new(hash, path)
puts "configuration from #{path}" if ConfigLoader.debug?
- config = ConfigLoader.merge_with_default(config, path)
+ config = ConfigLoader.merge_with_default(config, path, unset_nil: false)
ConfigLoader.instance_variable_set(:@default_configuration, config)
end
end
```
### Other Information
The following example app code reproduces this issue using
RuboCop Rails master code.
```ruby
# Gemfile
source "https://rubygems.org"
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
gem 'rubocop', github: 'rubocop-hq/rubocop'
gem 'rubocop-rails', github: 'rubocop-hq/rubocop-rails'
```
```ruby
# app/models/user.rb
class User < ActiveRecord::Base
end
```
```yaml
# .rubocop.yml
AllCops:
TargetRailsVersion: 5.2
```
```
% bunlde install
% bundle exec rubocop --only Rails/ApplicationRecord --require rubocop-rails
Warning: AllCops does not support TargetRailsVersion parameter.
Supported parameters are:
- RubyInterpreters
- Include
- Exclude
- DefaultFormatter
- DisplayCopNames
- DisplayStyleGuide
- StyleGuideBaseURL
- ExtraDetails
- StyleGuideCopsOnly
- EnabledByDefault
- DisabledByDefault
- UseCache
- MaxFilesInCache
- CacheRootDirectory
- AllowSymlinksInCacheRootDirectory
- TargetRubyVersion
Inspecting 2 files
.C
Offenses:
app/models/user.rb:1:14: C: Rails/ApplicationRecord: Models should
subclass ApplicationRecord.
class User < ActiveRecord::Base
^^^^^^^^^^^^^^^^^^
2 files inspected, 1 offense detected
```
This means that an unexpected warning is displayed during a migration
period until RuboCop Rails cops is removed from RuboCop core.