module Pkgwat

Constants

BODHI_ARCH
BODHI_REALEASE
BUGS_URL
BUGZILLA_RELEASEA
BUILDS_URL
CHANGELOG_URL
CONTENT_URL
KOJI_BUILD_STATES
PACKAGES_URL
PACKAGES_URL_LIST
PACKAGE_NAME
UPDATES_URL
VERSION

Attributes

debug[RW]

Public Class Methods

check_gem(name, version, distros, throw_ex = false) click to toggle source
# File lib/pkgwat.rb, line 26
def self.check_gem(name, version, distros, throw_ex = false)
  versions = get_versions(name)
  distros = Array(distros) # convert distros to an array if not already

  matches = distros.each_with_object([]) do |distro, results|
    distro_match = versions.detect { |v| v["release"] == distro }
    if distro_match
      distro_version = distro_match["stable_version"][/\A(\S+)-.*\z/, 1] # get the actual gem version
      match = compare_versions(version, distro_version)
      results << distro_match["release"] if match
    end
  end

  matches.any? ? matches : false
end
compare_versions(version1, version2) click to toggle source
# File lib/pkgwat.rb, line 42
def self.compare_versions(version1, version2)
  return false if version1.nil? || version1.to_s.length < 1 || version2.nil? || version2.to_s.length < 1
  Gem::Version.new(version1) == Gem::Version.new(version2)
end
get_bugs(pattern, version='all', num=nil, start =0) click to toggle source

this function queries for and returns a list of then open BUGS

# File lib/pkgwat.rb, line 76
def self.get_bugs(pattern, version='all', num=nil, start =0)
  if BUGZILLA_RELEASEA[0][version].nil?
    version = BUGZILLA_RELEASEA[0]['all']
  else
    version = BUGZILLA_RELEASEA[0][version]
  end
  num ||= total_rows(pattern, "bugs", BUGS_URL)

  query = {"filters"=> {"package"=> pattern, "version"=> version}, "rows_per_page"=> num, "start_row"=> start}
  url = BUGS_URL + "/" + query.to_json
  uri = URI.parse(URI.escape(url)) 
  response = submit_request(uri)
  parse_results(response.body)  
end
get_builds(pattern, state='all', num=nil, start =0) click to toggle source

this function queries for and returns a list of the BUILDS

# File lib/pkgwat.rb, line 92
def self.get_builds(pattern, state='all', num=nil, start =0)
  if KOJI_BUILD_STATES[0][state].nil?
    state = KOJI_BUILD_STATES[0]['all']
  else
    state = KOJI_BUILD_STATES[0][state]
  end
  num ||= total_rows(pattern, "builds", BUILDS_URL)
  query = {"rows_per_page"=> num, "start_row"=> start, "filters"=> {"state"=> state, "package"=> pattern}}
  url = BUILDS_URL + "/" + query.to_json
  uri = URI.parse(URI.escape(url))
  response = submit_request(uri)
  parse_results(response.body)
end
get_changelog(pattern, num=nil, start=0) click to toggle source
# File lib/pkgwat.rb, line 106
def self.get_changelog(pattern, num=nil, start=0)
  num ||= total_rows(pattern, "builds", BUILDS_URL)
  build_id = get_builds(pattern)[0]['build_id']
  query = {"filters"=> {"build_id"=> build_id}, "rows_per_page"=> num, "start_row"=> start}
  url = CHANGELOG_URL + "/" + query.to_json
  uri = URI.parse(URI.escape(url))
  response = submit_request(uri)
  parse_results(response.body)
end
get_contents(pattern, arch='x86_64', release='Rawhide') click to toggle source
# File lib/pkgwat.rb, line 116
def self.get_contents(pattern, arch='x86_64', release='Rawhide')
  if !BODHI_ARCH.include? arch
    return "Invalid yum arch."
  end
  if !BODHI_REALEASE.include? release
    return "Invalid bodhi release."
  end
  url = CONTENT_URL + "?package=#{pattern}&arch=#{arch}&repo=#{release}"
  uri = URI.parse(URI.escape(url))
  response = submit_request(uri)
  JSON.parse(response.body)
end
get_package(pattern) click to toggle source

this function just queries for and returns a single package

# File lib/pkgwat.rb, line 71
def self.get_package(pattern)
  get_packages(pattern, 0, 1).first
end
get_packages(pattern, start=0, num=nil) click to toggle source

this function queries and returns the specified number of packages starting at the specified row

# File lib/pkgwat.rb, line 60
def self.get_packages(pattern, start=0, num=nil)
  num ||= total_rows(pattern, "packages", PACKAGES_URL_LIST)
  query = {"filters"=>{"search"=>pattern}, "rows_per_page"=>num, "start_row"=>start}
  url = PACKAGES_URL_LIST + "/" + query.to_json
  uri = URI.parse(URI.escape(url))
  response = submit_request(uri)
  clean_response = Sanitize.clean(response.body)
  parse_results(clean_response)
end
get_releases(pattern, num=nil, start=0) click to toggle source
# File lib/pkgwat.rb, line 129
def self.get_releases(pattern, num=nil, start=0)
  num ||= total_rows(pattern, "releases", PACKAGES_URL)
  query = {"filters"=> {"package"=> pattern}, "rows_per_page"=> num, "start_row"=> start}
  url = PACKAGES_URL + "/" + query.to_json
  uri = URI.parse(URI.escape(url))
  response = submit_request(uri)
  parse_results(response.body)
end
get_updates(pattern, status, release, num=nil, start=0) click to toggle source
# File lib/pkgwat.rb, line 138
def self.get_updates(pattern, status, release, num=nil, start=0)
  num ||= total_rows(pattern, "updates", UPDATES_URL)
  if !BODHI_REALEASE.include? status
    return "Invalid bodhi state."
  end
  if !BODHI_REALEASE.include? release
    return "Invalid bodhi release."
  end
  if status == "all"
    status = ""
  end
  if release == "all"
    release = ""
  end
  query = {"rows_per_page"=> num, "start_row"=> start, "filters"=> {"package"=> pattern, "release" => release, "state"=> status}}
  url = PACKAGES_URL + "/" + query.to_json
  uri = URI.parse(URI.escape(url))
  response = submit_request(uri)
  parse_results(response.body)
end
get_versions(gem_name) click to toggle source
# File lib/pkgwat.rb, line 47
def self.get_versions(gem_name)
  uri = search_url(gem_name)
  response = submit_request(uri)
  raise "Could not connect to packages API (#{response.inspect})" unless response.code == "200"
  parse_results(response.body)
end
package_name(gem) click to toggle source
# File lib/pkgwat.rb, line 54
def self.package_name(gem)
  PACKAGE_NAME.gsub(":gem", gem)
end
parse_results(results) click to toggle source
# File lib/pkgwat.rb, line 178
def self.parse_results(results)
  results = JSON.parse(results)
  results["rows"]
end
search_params(gem) click to toggle source
# File lib/pkgwat.rb, line 159
def self.search_params(gem)
  filters = { :package => package_name(gem) }
  { :filters => filters }
end
search_url(gem) click to toggle source
# File lib/pkgwat.rb, line 164
def self.search_url(gem)
  query = search_params(gem)
  url = PACKAGES_URL + "/" + query.to_json
  URI.parse(URI.escape(url))
end
submit_request(uri) click to toggle source
# File lib/pkgwat.rb, line 170
def self.submit_request(uri)
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE #TODO: verify
  request = Net::HTTP::Get.new(uri.request_uri)
  http.request(request)
end

Private Class Methods

total_rows(pattern, type, type_url) click to toggle source
# File lib/pkgwat.rb, line 185
def self.total_rows(pattern, type, type_url)
  if type == "packages"
    query = {"filters"=>{"search"=>pattern}, "rows_per_page"=>10, "start_row"=>0}
  elsif type == "builds"
    query = {"rows_per_page"=> 10, "start_row"=> 0, "filters"=> {"state"=> "", "package"=> pattern}}
  elsif type == "bugs"
    query = {"filters"=> {"package"=> pattern, "version"=> ""}, "rows_per_page"=> 10, "start_row"=> 0}
  elsif type == "releases"
    query = {"filters"=> {"package"=> pattern}, "rows_per_page"=> 10, "start_row"=> 0}
  elsif type == "updates"
    query = {"rows_per_page"=> 10, "start_row"=> 0, "filters"=> {"package"=> pattern, "release" => "all", "state"=> "all"}}
  end
  url = type_url + "/" + query.to_json
  uri = URI.parse(URI.escape(url)) 
  response = submit_request(uri)
  JSON.parse(response.body)["total_rows"]
end