6 PREFIX_RE = /(>=|<=|<|>|=)/
7 CATEGORY_RE = /\w+-\w+/
9 VERSION_RE = /(\d+(\.\d+)*)+/
10 VERSION_EXT_RE = /[a-z]?(_(alpha|beta|pre|rc|p)\d+)?/
11 PACKAGE_NAME_RE = /[a-zA-Z0-9_-]+/
13 attr_reader :package_name, :version, :version_ext,
14 :prefix, :prefix_ext, :postfix, :origin
18 @prefix_ext, str = $&, $' if /^#{PREFIX_EXT_RE}/ === str
19 @prefix, str = $&, $' if /^#{PREFIX_RE}/ === str
20 @category, str = $1, $' if /^(#{CATEGORY_RE})\// === str
21 @postfix, str = $&, $` if /#{POSTFIX_RE}$/ === str
22 @version, @version_ext, str = $1, $3, $` if /-#{VERSION_RE}(#{VERSION_EXT_RE})/ === str
23 raise "Invalid atom: #{@origin}" unless /^#{PACKAGE_NAME_RE}$/ === str
28 alias_method :name, :package_name
29 attr_accessor :category
32 @category or Portage.category
36 # FIXME: support other gentoo atom prefixes
39 return Gem::Version::Requirement.default unless version
40 full_prefix = "#{prefix_ext}#{prefix}"
41 gem_prefix = if /^(~>|>|>=|=|!=|<=|<)$/ === full_prefix
46 Gem::Version::Requirement.create(["#{gem_prefix} #{version}"])
50 Gem::Dependency.new(package_name, [gem_requirement.to_s])
54 "#{prefix_ext}#{(prefix or "=") if version}#{category+"/" if category}#{package_name}"+
55 "#{"-"+version+version_ext if version}#{postfix}"
60 if str =~ /(.*\/)?(\S+)\.gem$/ # From gem file
62 atom.instance_eval { @origin = str }
69 alias_method :parse, :from_s
72 list.map { |str| parse(str) }
75 def from_gem_dependency(dep, category)
78 dep = Gem::Dependency.new(dep[0], dep[1])
80 prefix, version = *dep.version_requirements.instance_eval { @requirements.first }
81 new("#{prefix}#{category}/#{dep.name}-#{version}")
84 def from_required_ruby_version(spec)
85 spec.required_ruby_version.instance_eval do
86 if @requirements != nil
87 prefix, version = @requirements.first
88 "#{prefix}dev-lang/ruby-#{version}"
95 end # class DependencyAtom