class PrivateGemServer::Source

Constants

SUBCLASSES

Attributes

name[R]

Public Class Methods

create(name, properties, sources) click to toggle source
# File lib/private_gem_server/source.rb, line 15
def self.create(name, properties, sources)
  SUBCLASSES[properties['type'].to_sym].new name, properties, sources
end
new(name, properties, sources) click to toggle source
# File lib/private_gem_server/source.rb, line 19
def initialize(name, properties, sources)
  @name = name
  @properties = properties
  @sources = sources
end

Public Instance Methods

refresh!() click to toggle source
# File lib/private_gem_server/source.rb, line 25
def refresh!
  raise 'Not implemented'
end

Protected Instance Methods

e(text) click to toggle source
# File lib/private_gem_server/source.rb, line 55
def e(text)
  Shellwords.escape text
end
logger() click to toggle source
# File lib/private_gem_server/source.rb, line 31
def logger
  PrivateGemServer.logger
end
run!(path, args: [], env: {}, cwd: nil, input: nil, output: nil, error: nil) click to toggle source
# File lib/private_gem_server/source.rb, line 35
def run!(path, args: [], env: {}, cwd: nil, input: nil, output: nil, error: nil)
  cmd = ([path] + args.map { |arg| e arg }).join ' '
  opts = {}
  opts[:chdir] = cwd.to_s if cwd
  env = env.map { |k, v| [k.to_s, v.to_s] }.to_h
  msg = env.map { |k, v| "#{e k}=#{e v}" }
  msg << "cd #{e cwd};" if cwd
  msg << cmd
  logger.debug msg.join(' ')
  Open3.popen3 env, cmd, opts do |i, o, e, t|
    i << input if input; i.close
    {o => output, e => error}.each do |source, target|
      result = source.read
      target << result if target
      source.close
    end
    t.value.exitstatus
  end
end