Module: Legion::Extensions::GemSource
- Defined in:
- lib/legion/extensions/gem_source.rb
Constant Summary collapse
- DEFAULT_SOURCE =
'https://rubygems.org'
Class Method Summary collapse
- .apply_credentials! ⇒ Object
- .configured_sources ⇒ Object
- .install_gem(name, version: nil, gem_bin: nil, source_override: nil) ⇒ Object
- .setup! ⇒ Object
- .source_args_for_cli ⇒ Object
- .source_urls ⇒ Object
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.}" if defined?(Legion::Logging) end end |
.configured_sources ⇒ Object
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_cli ⇒ Object
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_urls ⇒ Object
20 21 22 |
# File 'lib/legion/extensions/gem_source.rb', line 20 def source_urls configured_sources.map { |s| s[:url] }.compact end |