class RuboCop::Cop::Bundler::GemVersion


gem ‘rubocop’, tag: ‘v1.17.0’
# bad
gem ‘rubocop’, ref: ‘74b5bfbb2c4b6fd6cdbbc7254bd7084b36e0c85b’
# bad
gem ‘rubocop’, branch: ‘feature-branch’
# bad
gem ‘rubocop’, ‘>= 1.5.0’, ‘< 1.10.0’
# bad
gem ‘rubocop’, ‘>= 1.10.0’
# bad
gem ‘rubocop’, ‘~> 1.12’
# bad
gem ‘rubocop’
# good
@example EnforcedStyle: forbidden
gem ‘rubocop’, tag: ‘v1.17.0’
# good
gem ‘rubocop’, ref: ‘74b5bfbb2c4b6fd6cdbbc7254bd7084b36e0c85b’
# good
gem ‘rubocop’, branch: ‘feature-branch’
# good
gem ‘rubocop’, ‘>= 1.5.0’, ‘< 1.10.0’
# good
gem ‘rubocop’, ‘>= 1.10.0’
# good
gem ‘rubocop’, ‘~> 1.12’
# good
gem ‘rubocop’
# bad
@example EnforcedStyle: required (default)
ref, or tag) are either required or forbidden.
Enforce that Gem version specifications or a commit reference (branch,

def allowed_gem?(node)

def allowed_gem?(node)
  allowed_gems.include?(node.first_argument.value)
end

def allowed_gems

def allowed_gems
  Array(cop_config['AllowedGems'])
end

def forbidden_offense?(node)

def forbidden_offense?(node)
  return false unless forbidden_style?
  includes_version_specification?(node) || includes_commit_reference?(node)
end

def forbidden_style?

def forbidden_style?
  style == :forbidden
end

def message(_range)

def message(_range)
  if required_style?
    REQUIRED_MSG
  elsif forbidden_style?
    FORBIDDEN_MSG
  end
end

def offense?(node)

def offense?(node)
  required_offense?(node) || forbidden_offense?(node)
end

def on_send(node)

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

def required_offense?(node)

def required_offense?(node)
  return false unless required_style?
  !includes_version_specification?(node) && !includes_commit_reference?(node)
end

def required_style?

def required_style?
  style == :required
end

def version_specification?(expression)

def version_specification?(expression)
  expression.match?(VERSION_SPECIFICATION_REGEX)
end