Gemspec
Gemspec/DuplicatedAssignment
| Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged |
|---|---|---|---|---|
Enabled |
Yes |
No |
0.52 |
- |
An attribute assignment method calls should be listed only once in a gemspec.
Assigning to an attribute with the same name using spec.foo = will be
an unintended usage. On the other hand, duplication of methods such
as spec.requirements, spec.add_runtime_dependency, and others are
permitted because it is the intended use of appending values.
Examples
# bad
Gem::Specification.new do |spec|
spec.name = 'rubocop'
spec.name = 'rubocop2'
end
# good
Gem::Specification.new do |spec|
spec.name = 'rubocop'
end
# good
Gem::Specification.new do |spec|
spec.requirements << 'libmagick, v6.0'
spec.requirements << 'A good graphics card'
end
# good
Gem::Specification.new do |spec|
spec.add_runtime_dependency('parallel', '~> 1.10')
spec.add_runtime_dependency('parser', '>= 2.3.3.1', '< 3.0')
end
Gemspec/OrderedDependencies
| Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged |
|---|---|---|---|---|
Enabled |
Yes |
Yes |
0.51 |
- |
Dependencies in the gemspec should be alphabetically sorted.
Examples
# bad
spec.add_dependency 'rubocop'
spec.add_dependency 'rspec'
# good
spec.add_dependency 'rspec'
spec.add_dependency 'rubocop'
# good
spec.add_dependency 'rubocop'
spec.add_dependency 'rspec'
# bad
spec.add_development_dependency 'rubocop'
spec.add_development_dependency 'rspec'
# good
spec.add_development_dependency 'rspec'
spec.add_development_dependency 'rubocop'
# good
spec.add_development_dependency 'rubocop'
spec.add_development_dependency 'rspec'
# bad
spec.add_runtime_dependency 'rubocop'
spec.add_runtime_dependency 'rspec'
# good
spec.add_runtime_dependency 'rspec'
spec.add_runtime_dependency 'rubocop'
# good
spec.add_runtime_dependency 'rubocop'
spec.add_runtime_dependency 'rspec'
# good only if TreatCommentsAsGroupSeparators is true
# For code quality
spec.add_dependency 'rubocop'
# For tests
spec.add_dependency 'rspec'
Gemspec/RequiredRubyVersion
| Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged |
|---|---|---|---|---|
Enabled |
Yes |
No |
0.52 |
0.89 |
Checks that required_ruby_version of gemspec is specified and
equal to TargetRubyVersion of .rubocop.yml.
Thereby, RuboCop to perform static analysis working on the version
required by gemspec.
Examples
# When `TargetRubyVersion` of .rubocop.yml is `2.5`.
# bad
Gem::Specification.new do |spec|
# no `required_ruby_version` specified
end
# bad
Gem::Specification.new do |spec|
spec.required_ruby_version = '>= 2.4.0'
end
# bad
Gem::Specification.new do |spec|
spec.required_ruby_version = '>= 2.6.0'
end
# good
Gem::Specification.new do |spec|
spec.required_ruby_version = '>= 2.5.0'
end
# good
Gem::Specification.new do |spec|
spec.required_ruby_version = '>= 2.5'
end
# good
Gem::Specification.new do |spec|
spec.required_ruby_version = ['>= 2.5.0', '< 2.7.0']
end
# good
Gem::Specification.new do |spec|
spec.required_ruby_version = '~> 2.5'
end
Gemspec/RubyVersionGlobalsUsage
| Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged |
|---|---|---|---|---|
Enabled |
Yes |
No |
0.72 |
- |
Checks that RUBY_VERSION constant is not used in gemspec.
Using RUBY_VERSION is dangerous because value of the
constant is determined by rake release.
It’s possible to have dependency based on ruby version used
to execute rake release and not user’s ruby version.