validate_dependencies()
public
Implementation for Specification#validate_dependencies
Show source
def validate_dependencies
seen = Gem::Dependency::TYPES.inject({}) { |types, type| types.merge({ type => {}}) }
error_messages = []
warning_messages = []
dependencies.each do |dep|
if prev = seen[dep.type][dep.name]
error_messages << duplicate dependency on
end
seen[dep.type][dep.name] = dep
prerelease_dep = dep.requirements_list.any? do |req|
Gem::Requirement.new(req).prerelease?
end
warning_messages << "prerelease dependency on #{dep} is not recommended" if
prerelease_dep && !version.prerelease?
open_ended = dep.requirement.requirements.all? do |op, version|
not version.prerelease? and (op == '>' or op == '>=')
end
if open_ended
op, dep_version = dep.requirement.requirements.first
segments = dep_version.segments
base = segments.first 2
recommendation = if (op == '>' || op == '>=') && segments == [0]
" use a bounded requirement, such as '~> x.y'"
else
bugfix = if op == '>'
", '> #{dep_version}'"
elsif op == '>=' and base != segments
", '>= #{dep_version}'"
end
" if #{dep.name} is semantically versioned, use:\n" " add_#{dep.type}_dependency '#{dep.name}', '~> #{base.join '.'}'#{bugfix}"
end
warning_messages << ["open-ended dependency on #{dep} is not recommended", recommendation].join("\n") + "\n"
end
end
if error_messages.any?
error error_messages.join
end
if warning_messages.any?
warning_messages.each { |warning_message| warning warning_message }
end
end