class Librarian::Ansible::Source::Galaxy

Public Class Methods

from_lock_options(environment, options) click to toggle source
# File lib/librarian/ansible/source/galaxy.rb, line 23
def from_lock_options(environment, options)
  Git.from_lock_options(environment, options)
end
from_spec_args(environment, uri, options) click to toggle source
# File lib/librarian/ansible/source/galaxy.rb, line 27
def from_spec_args(environment, uri, options)
  Git.from_spec_args(environment, github_url(uri), options)
end
galaxy_api=(galaxy_api) click to toggle source
# File lib/librarian/ansible/source/galaxy.rb, line 15
def galaxy_api=(galaxy_api)
  @@galaxy_api = galaxy_api
end
lock_name() click to toggle source
# File lib/librarian/ansible/source/galaxy.rb, line 19
def lock_name
  Git.lock_name
end

Private Class Methods

github_url(uri) click to toggle source
# File lib/librarian/ansible/source/galaxy.rb, line 33
def github_url(uri)
  package = nil
  # because both name and username can contain dots, we have
  # to check every combination until package will be found
  segments = uri.split('.')
  (0..segments.size - 2).each do |pivot|
    username = segments[0..pivot].join('.')
    name = segments[pivot + 1..-1].join('.')
    package = lookup_package(username, name)
  end
  raise Error, "Could not find package: #{uri}" if package.nil?
  "https://github.com/#{package['github_user']}/#{package['github_repo']}"
end
lookup_package(username, name) click to toggle source
# File lib/librarian/ansible/source/galaxy.rb, line 47
def lookup_package(username, name)
  conn = Faraday.new(:url => @@galaxy_api)

  url = "#{@@galaxy_api}/roles/?name=#{name}&format=json"
  loop do
    response = conn.get(url)
    if response.status != 200
      raise Error, 'Could not read package from galaxy API.'
    else
      json = JSON.parse(response.body)

      break if json['results'].nil?

      package = json['results'].find do |r|
        r['summary_fields']['namespace']['name'] == username &&
          r['name'] == name
      end
      return package if package

      break unless json['next']
      url = File.join(@@galaxy_api, json['next'])
    end
  end
end