class SleepingKingStudios::Tasks::ProcessRunner

Base class for helpers that execute a system process.

Attributes

default_env[R]

@return [Hash] Environment variables to set for the RSpec process.

default_options[R]

@return [Array] Options to pass to RSpec.

Public Class Methods

new(env: {}) click to toggle source

@param env [Hash] Environment variables to set for the RSpec process. @param options [Array] Options to pass to RSpec.

# File lib/sleeping_king_studios/tasks/process_runner.rb, line 10
def initialize env: {}, options: []
  @default_env     = env.dup
  @default_options = options

  return unless ENV['BUNDLE_GEMFILE']

  @default_env[:bundle_gemfile] ||= ENV['BUNDLE_GEMFILE']
end

Private Instance Methods

base_command() click to toggle source
# File lib/sleeping_king_studios/tasks/process_runner.rb, line 27
def base_command
  ':'
end
build_command(**kwargs) click to toggle source
# File lib/sleeping_king_studios/tasks/process_runner.rb, line 31
def build_command **kwargs
  env  = build_environment(**kwargs)
  opts = build_options(**kwargs)

  "#{env} #{base_command} #{opts}".strip
end
build_environment(env:, **_kwargs) click to toggle source
# File lib/sleeping_king_studios/tasks/process_runner.rb, line 38
def build_environment env:, **_kwargs
  default_env.
    merge(env).
    map do |key, value|
      key   = tools.str.underscore(key).upcase
      value = %("#{value}") if value.is_a?(String)

      "#{key}=#{value}"
    end. # map
    join ' '
end
build_options(files: [], options: [], **_kwargs) click to toggle source
# File lib/sleeping_king_studios/tasks/process_runner.rb, line 50
def build_options files: [], options: [], **_kwargs
  (Array(files) + default_options + options).join ' '
end
stream_process(command) click to toggle source
# File lib/sleeping_king_studios/tasks/process_runner.rb, line 54
def stream_process command
  unbundled_env do
    IO.popen(command) do |io|
      loop do
        char = io.getc

        char ? print(char) : break
      end # loop
    end # popen
  end # with_unbundled_env
end
tools() click to toggle source
# File lib/sleeping_king_studios/tasks/process_runner.rb, line 66
def tools
  SleepingKingStudios::Tools::Toolbelt.new
end
unbundled_env() { || ... } click to toggle source
# File lib/sleeping_king_studios/tasks/process_runner.rb, line 70
def unbundled_env
  # :nocov:
  if Bundler.respond_to?(:with_unbundled_env)
    Bundler.with_unbundled_env { yield }
  else
    Bundler.with_clean_env { yield }
  end
  # :nocov:
end