class Kontena::PluginManager::RubygemsClient

Constants

ACCEPT
HTTPOK
JSON_MIME

Public Instance Methods

client() click to toggle source
# File lib/kontena/plugin_manager/rubygems_client.rb, line 31
def client
  return @client if @client
  @client = Net::HTTP.new('rubygems.org', 443)
  @client.use_ssl = true
  @client
end
get(path, query = nil) click to toggle source
# File lib/kontena/plugin_manager/rubygems_client.rb, line 50
def get(path, query = nil)
  Kontena.logger.debug { "Requesting GET #{path}" }
  response = client.request(get_request(request_path(path, query)))
  Kontena.logger.debug { "Response #{response.code}" }
  raise "Server responded with #{response.code} (#{response.class.name})" unless response.code == HTTPOK
  JSON.parse(response.body)
end
get_request(path) click to toggle source
# File lib/kontena/plugin_manager/rubygems_client.rb, line 44
def get_request(path)
  request = Net::HTTP::Get.new(path)
  request[ACCEPT] = JSON_MIME
  request
end
latest_version(gem_name, pre: false) click to toggle source

Get the latest version number from rubygems @param plugin_name [String] @param pre [Boolean] include prerelease versions

# File lib/kontena/plugin_manager/rubygems_client.rb, line 26
def latest_version(gem_name, pre: false)
  return versions(gem_name).first if pre
  versions(gem_name).find { |version| !version.prerelease? }
end
request_path(path, query = nil) click to toggle source
# File lib/kontena/plugin_manager/rubygems_client.rb, line 38
def request_path(path, query = nil)
  uri = URI(path)
  uri.query = URI.encode_www_form(query) if query
  uri.to_s
end
versions(gem_name) click to toggle source
# File lib/kontena/plugin_manager/rubygems_client.rb, line 18
def versions(gem_name)
  response = get("/api/v1/versions/#{gem_name}.json")
  response.map { |version| Gem::Version.new(version["number"]) }.sort.reverse
end