class MavenCentralRepo

Attributes

artifactId[R]
groupId[R]
id[R]
pom[R]
version[R]

Public Class Methods

new(id) click to toggle source
# File lib/mvn-get/mvn-get.rb, line 78
def initialize(id)

  @id = id
  d = MavenCentral.id2dict(@id)
  raise "not a correct id. please use 'groupId:artifactId' or 'groupId:artifactId:version'" if d.nil?

  # use lastest version by default
  if d["version"] == nil || d["version"].strip == ""
    d["version"] = MavenCentral.fetch_lastest_version(d["groupId"], d["artifactId"])
    @id = MavenCentral.dict2id(d)
  end

  @groupId, @artifactId, @version = d["groupId"], d["artifactId"], d["version"]

  pom_url = MavenCentral.extract_url_from_dict(d)
  body = MavenCentral.request(pom_url)
  @pom = Hash.from_xml( body )
end

Public Instance Methods

<=>(other) click to toggle source
# File lib/mvn-get/mvn-get.rb, line 156
def <=>(other)
  id <=> other.id
end
==(other) click to toggle source
# File lib/mvn-get/mvn-get.rb, line 152
def ==(other)
  other.class == MavenCentralRepo and id == other.id
end
dependencies(ignore_test_lib = true) click to toggle source
# File lib/mvn-get/mvn-get.rb, line 97
def dependencies(ignore_test_lib = true)
  return [] if @pom["project"]["dependencies"].nil? or
    (@pom["project"]["dependencies"].class == String and @pom["project"]["dependencies"].strip == "")
  [@pom["project"]["dependencies"]["dependency"]].flatten.map{|x| 
    next if ignore_test_lib and x["scope"] and x["scope"].strip == "test"
    if x["version"] =~ /\s*[$]{\s*project[.]version\s*}\s*/
      x["version"] = @version
    end
    "#{x["groupId"]}:#{x["artifactId"]}:#{x["version"]}" 
  }.compact.sort!
end
download(path = ".") click to toggle source
# File lib/mvn-get/mvn-get.rb, line 160
def download(path = ".")
  url = jar_url
  open(File.join(path, url.split("/").last), "w") { |f|
    f.write MavenCentral.request(url)
  }
end
inspect() click to toggle source
# File lib/mvn-get/mvn-get.rb, line 148
def inspect
  @id
end
jar_url() click to toggle source
# File lib/mvn-get/mvn-get.rb, line 109
def jar_url
  MavenCentral.extract_url_from_id(@id, "jar")
end
recursive_dependencies(ignore_test_lib = true, only_select_lastest_version = true) click to toggle source
# File lib/mvn-get/mvn-get.rb, line 113
def recursive_dependencies(ignore_test_lib = true, only_select_lastest_version = true)
  return [] if dependencies(ignore_test_lib) == []
  return @_recursive_dependencies[ignore_test_lib][only_select_lastest_version] if @_recursive_dependencies and @_recursive_dependencies[ignore_test_lib] and @_recursive_dependencies[ignore_test_lib][only_select_lastest_version]

  
  res = []
  deps = dependencies(ignore_test_lib)
  while not deps.empty?
    d = deps.shift
    if not res.map{|x| x.id }.include?(d)
      r = MavenCentralRepo.new(d)
      if not res.include?(r)
        if only_select_lastest_version == false or
          (only_select_lastest_version == true and 
            ( not res.any?{|x| r.groupId == x.groupId and r.artifactId == x.artifactId } or
             res.any?{|x| r.groupId == x.groupId and r.artifactId == x.artifactId and r.version < x.version }) # lexicographic order
          )
            deps += r.dependencies
            res << r
        end
      end
    end
  end

  if only_select_lastest_version
    res = res.group_by{|x| "#{x.groupId}:#{x.artifactId}" }.map{|k, v| v.reduce{|s, x| if s.version <=> x.version then x else s end } }.flatten
  end

  res.sort!
  @_recursive_dependencies ||= {}
  @_recursive_dependencies[ignore_test_lib] ||= {}
  @_recursive_dependencies[ignore_test_lib][only_select_lastest_version] = res
  return res
end