Module: StillActive::ArtifactoryClient::AqlClient

Extended by:
AqlClient
Included in:
AqlClient
Defined in:
lib/still_active/artifactory_client.rb

Overview

AQL stands for Artifactory Query Language docs.jfrog.com/artifactory/docs/artifactory-query-language

Constant Summary collapse

SOURCE_URL_PATTERN =
%r{\A(https?://[^/]+\.jfrog\.io/[^/]+)/api/gems/([^/]+)/?\z}
AQL_PATH =
"/api/search/aql"

Instance Method Summary collapse

Instance Method Details

#versions(gem_name:, source_uri:, headers: {}) ⇒ Object



95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/still_active/artifactory_client.rb', line 95

def versions(gem_name:, source_uri:, headers: {})
  artifactory_base, repo_key = parse_source_url(source_uri)
  return [] if artifactory_base.nil?

  base = URI(artifactory_base)
  path = "#{base.path}#{AQL_PATH}"
  query = {
    "name" => { "$match" => "#{gem_name}-*.gem" },
    "repo" => repo_key,
  }
  body = %(items.find(#{JSON.generate(query)}).include("repo", "path", "name", "created"))
  response = HttpHelper.post_json(base, path, body: body, headers: headers.merge("Content-Type" => "text/plain"))
  return [] if response.nil?

  results = response["results"] || []
  build_version_hashes(results: results, gem_name: gem_name)
end