class RuboCop::Cop::Gemspec::DependencyVersion
Enforce that gem dependency version specifications or a commit reference (branch, ref, or tag) are either required or forbidden.
@example EnforcedStyle: required (default)
# bad Gem::Specification.new do |spec| spec.add_dependency 'parser' end # bad Gem::Specification.new do |spec| spec.add_development_dependency 'parser' end # good Gem::Specification.new do |spec| spec.add_dependency 'parser', '>= 2.3.3.1', '< 3.0' end # good Gem::Specification.new do |spec| spec.add_development_dependency 'parser', '>= 2.3.3.1', '< 3.0' end
@example EnforcedStyle: forbidden
# bad Gem::Specification.new do |spec| spec.add_dependency 'parser', '>= 2.3.3.1', '< 3.0' end # bad Gem::Specification.new do |spec| spec.add_development_dependency 'parser', '>= 2.3.3.1', '< 3.0' end # good Gem::Specification.new do |spec| spec.add_dependency 'parser' end # good Gem::Specification.new do |spec| spec.add_development_dependency 'parser' end
Constants
- FORBIDDEN_MSG
- REQUIRED_MSG
- VERSION_SPECIFICATION_REGEX
Public Instance Methods
on_new_investigation()
click to toggle source
# File lib/rubocop/cop/gemspec/dependency_version.rb, line 77 def on_new_investigation return if processed_source.blank? add_dependency_method_nodes.each do |node| next if allowed_gem?(node) if offense?(node) add_offense(node) opposite_style_detected else correct_style_detected end end end
Private Instance Methods
add_dependency_method?(method_name)
click to toggle source
# File lib/rubocop/cop/gemspec/dependency_version.rb, line 118 def add_dependency_method?(method_name) method_name.to_s.end_with?('_dependency') end
add_dependency_method_nodes()
click to toggle source
# File lib/rubocop/cop/gemspec/dependency_version.rb, line 122 def add_dependency_method_nodes add_dependency_method_declarations(processed_source.ast) end
allowed_gem?(node)
click to toggle source
# File lib/rubocop/cop/gemspec/dependency_version.rb, line 94 def allowed_gem?(node) allowed_gems.include?(node.first_argument.value) end
allowed_gems()
click to toggle source
# File lib/rubocop/cop/gemspec/dependency_version.rb, line 98 def allowed_gems Array(cop_config['AllowedGems']) end
forbidden_offense?(node)
click to toggle source
# File lib/rubocop/cop/gemspec/dependency_version.rb, line 136 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/gemspec/dependency_version.rb, line 142 def forbidden_style? style == :forbidden end
match_block_variable_name?(receiver_name)
click to toggle source
# File lib/rubocop/cop/gemspec/dependency_version.rb, line 112 def match_block_variable_name?(receiver_name) gem_specification(processed_source.ast) do |block_variable_name| return block_variable_name == receiver_name end end
message(range)
click to toggle source
# File lib/rubocop/cop/gemspec/dependency_version.rb, line 102 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/gemspec/dependency_version.rb, line 126 def offense?(node) required_offense?(node) || forbidden_offense?(node) end
required_offense?(node)
click to toggle source
# File lib/rubocop/cop/gemspec/dependency_version.rb, line 130 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/gemspec/dependency_version.rb, line 146 def required_style? style == :required end
version_specification?(expression)
click to toggle source
# File lib/rubocop/cop/gemspec/dependency_version.rb, line 150 def version_specification?(expression) expression.match?(VERSION_SPECIFICATION_REGEX) end