class RuboCop::Cop::Bundler::GemVersion
Enforce that Gem version specifications or a commit reference (branch, ref, or tag) are either required or forbidden.
@example EnforcedStyle: required (default)
# bad gem 'rubocop' # good gem 'rubocop', '~> 1.12' # good gem 'rubocop', '>= 1.10.0' # good gem 'rubocop', '>= 1.5.0', '< 1.10.0' # good gem 'rubocop', branch: 'feature-branch' # good gem 'rubocop', ref: '74b5bfbb2c4b6fd6cdbbc7254bd7084b36e0c85b' # good gem 'rubocop', tag: 'v1.17.0'
@example EnforcedStyle: forbidden
# good gem 'rubocop' # bad gem 'rubocop', '~> 1.12' # bad gem 'rubocop', '>= 1.10.0' # bad gem 'rubocop', '>= 1.5.0', '< 1.10.0' # bad gem 'rubocop', branch: 'feature-branch' # bad gem 'rubocop', ref: '74b5bfbb2c4b6fd6cdbbc7254bd7084b36e0c85b' # bad gem 'rubocop', tag: 'v1.17.0'
Constants
- FORBIDDEN_MSG
- REQUIRED_MSG
- VERSION_SPECIFICATION_REGEX
Public Instance Methods
on_send(node)
click to toggle source
# File lib/rubocop/cop/bundler/gem_version.rb, line 71 def on_send(node) return unless gem_declaration?(node) return if allowed_gem?(node) if offense?(node) add_offense(node) opposite_style_detected else correct_style_detected end end
Private Instance Methods
allowed_gem?(node)
click to toggle source
# File lib/rubocop/cop/bundler/gem_version.rb, line 85 def allowed_gem?(node) allowed_gems.include?(node.first_argument.value) end
allowed_gems()
click to toggle source
# File lib/rubocop/cop/bundler/gem_version.rb, line 89 def allowed_gems Array(cop_config['AllowedGems']) end
forbidden_offense?(node)
click to toggle source
# File lib/rubocop/cop/bundler/gem_version.rb, line 113 def forbidden_offense?(node) return unless forbidden_style? includes_version_specification?(node) || includes_commit_reference?(node) end
forbidden_style?()
click to toggle source
# File lib/rubocop/cop/bundler/gem_version.rb, line 119 def forbidden_style? style == :forbidden end
message(range)
click to toggle source
# File lib/rubocop/cop/bundler/gem_version.rb, line 93 def message(range) gem_specification = range.source if required_style? format(REQUIRED_MSG, gem_specification: gem_specification) elsif forbidden_style? format(FORBIDDEN_MSG, gem_specification: gem_specification) end end
offense?(node)
click to toggle source
# File lib/rubocop/cop/bundler/gem_version.rb, line 103 def offense?(node) required_offense?(node) || forbidden_offense?(node) end
required_offense?(node)
click to toggle source
# File lib/rubocop/cop/bundler/gem_version.rb, line 107 def required_offense?(node) return unless required_style? !includes_version_specification?(node) && !includes_commit_reference?(node) end
required_style?()
click to toggle source
# File lib/rubocop/cop/bundler/gem_version.rb, line 123 def required_style? style == :required end
version_specification?(expression)
click to toggle source
# File lib/rubocop/cop/bundler/gem_version.rb, line 127 def version_specification?(expression) expression.match?(VERSION_SPECIFICATION_REGEX) end