Module: Legion::Extensions::GemSource

Defined in:
lib/legion/extensions/gem_source.rb

Constant Summary collapse

DEFAULT_SOURCE =
'https://rubygems.org'

Class Method Summary collapse

Class Method Details

.apply_credentials!Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/legion/extensions/gem_source.rb', line 51

def apply_credentials!
  configured_sources.each do |source|
    cred = source[:credentials] || source[:token]
    next unless cred

    url = source[:url]
    resolved = resolve_credential(cred)
    next unless resolved

    Gem.configuration.set_api_key(url, resolved)
  rescue StandardError => e
    Legion::Logging.debug "GemSource: credential setup failed for #{url}: #{e.message}" if defined?(Legion::Logging)
  end
end

.configured_sourcesObject



9
10
11
12
13
14
15
16
17
18
# File 'lib/legion/extensions/gem_source.rb', line 9

def configured_sources
  raw = begin
    Legion::Settings.dig(:extensions, :sources)
  rescue StandardError
    nil
  end
  return [{ url: DEFAULT_SOURCE }] unless raw.is_a?(Array) && raw.any?

  raw.map { |s| s.is_a?(Hash) ? s : { url: s.to_s } }
end

.install_gem(name, version: nil, gem_bin: nil, source_override: nil) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/legion/extensions/gem_source.rb', line 31

def install_gem(name, version: nil, gem_bin: nil, source_override: nil)
  require 'open3'
  gem_bin ||= File.join(RbConfig::CONFIG['bindir'], 'gem')
  args = [gem_bin, 'install', name, '--no-document']
  args.push('-v', version) if version

  if source_override
    args.push('--source', source_override, '--clear-sources')
  else
    urls = source_urls
    unless urls.empty? || urls == [DEFAULT_SOURCE]
      urls.each { |url| args.push('--source', url) }
      args.push('--clear-sources')
    end
  end

  stdout, stderr, status = Open3.capture3(*args)
  { success: status.success?, output: "#{stdout}\n#{stderr}".strip, command: args.join(' ') }
end

.setup!Object



66
67
68
69
70
71
72
73
74
75
# File 'lib/legion/extensions/gem_source.rb', line 66

def setup!
  apply_credentials!

  urls = source_urls
  return if urls.empty? || urls == [DEFAULT_SOURCE]

  urls.each do |url|
    Gem.sources << url unless Gem.sources.include?(url)
  end
end

.source_args_for_cliObject



24
25
26
27
28
29
# File 'lib/legion/extensions/gem_source.rb', line 24

def source_args_for_cli
  urls = source_urls
  return '' if urls.empty? || urls == [DEFAULT_SOURCE]

  "#{urls.map { |url| "--source #{url}" }.join(' ')} --clear-sources"
end

.source_urlsObject



20
21
22
# File 'lib/legion/extensions/gem_source.rb', line 20

def source_urls
  configured_sources.map { |s| s[:url] }.compact
end