def requirement_hash(spec = self)
result = {}
if String === spec
parts = spec.split(/\s*->\s*/, 3).map(&:strip)
case parts.size
when 1
result[:spec] = Artifact.to_hash(parts.first)
when 2
if /^\w+$/ === parts.first
result[:name] = parts.first
result[:spec] = Artifact.to_hash(parts.last)
else
result[:spec] = Artifact.to_hash(parts.first)
result[:requirement] = VersionRequirement.create(parts.last)
end
when 3
result[:name] = parts.first
result[:spec] = Artifact.to_hash(parts[1])
result[:requirement] = VersionRequirement.create(parts.last)
end
else
result[:spec] = Artifact.to_hash(spec)
end
result[:name] ||= result[:spec][:id].to_s.to_sym
result[:requirement] ||= VersionRequirement.create(result[:spec][:version])
result
end