class RuboCop::Cop::Gemspec::DependencyVersion
end
spec.add_development_dependency ‘parser’
Gem::Specification.new do |spec|
# good
end
spec.add_dependency ‘parser’
Gem::Specification.new do |spec|
# good
end
spec.add_development_dependency ‘parser’, ‘>= 2.3.3.1’, ‘< 3.0’
Gem::Specification.new do |spec|
# bad
end
spec.add_dependency ‘parser’, ‘>= 2.3.3.1’, ‘< 3.0’
Gem::Specification.new do |spec|
# bad
@example EnforcedStyle: forbidden
end
spec.add_development_dependency ‘parser’, ‘>= 2.3.3.1’, ‘< 3.0’
Gem::Specification.new do |spec|
# good
end
spec.add_dependency ‘parser’, ‘>= 2.3.3.1’, ‘< 3.0’
Gem::Specification.new do |spec|
# good
end
spec.add_development_dependency ‘parser’
Gem::Specification.new do |spec|
# bad
end
spec.add_dependency ‘parser’
Gem::Specification.new do |spec|
# bad
@example EnforcedStyle: required (default)
ref, or tag) are either required or forbidden.
Enforce that gem dependency version specifications or a commit reference (branch,
def add_dependency_method?(method_name)
def add_dependency_method?(method_name) ADD_DEPENDENCY_METHODS.include?(method_name) end
def allowed_gem?(node)
def allowed_gem?(node) allowed_gems.include?(node.first_argument.str_content) 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 match_block_variable_name?(receiver_name)
def match_block_variable_name?(receiver_name) gem_specification(processed_source.ast) do |block_variable_name| return block_variable_name == receiver_name end 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 add_dependency_method_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