def need(*specs)
named = specs.flatten.inject({}) do |seen, spec|
if Hash === spec && (spec.keys & ActsAsArtifact::ARTIFACT_ATTRIBUTES).empty?
spec.each_pair do |name, spec|
if Array === spec
seen[name] ||= spec.map { |s| ArtifactRequirement.new(s) }
else
artifact = ArtifactRequirement.new(spec)
artifact.name = name
seen[artifact.name] ||= artifact
end
end
else
artifact = ArtifactRequirement.new(spec)
seen[artifact.name] ||= artifact
end
seen
end
named.each_pair do |name, artifact|
if Array === artifact
artifact.each do |a|
unvers = a.unversioned_spec
previous = registry[unvers]
if previous && previous.selected? && a.satisfied_by?(previous)
a.version = previous.version
end
registry[unvers] = a
end
group(name, *(artifact.map { |a| a.unversioned_spec } + [{:namespace => self}]))
else
unvers = artifact.unversioned_spec
previous = registry.get(unvers, true)
if previous && previous.selected? && artifact.satisfied_by?(previous)
artifact.version = previous.version
artifact.selected!
end
registry[unvers] = artifact
registry.alias name, unvers unless name.to_s[/^\s*$/]
end
end
self
end