module Rakeleak

Constants

VERSION

Public Class Methods

run(params) click to toggle source
# File lib/rakeleak.rb, line 8
def self.run(params)
  task_name = params[:id]
  Rake::Task[task_name].reenable

  task = -> { capture_stdout { Rake::Task[task_name].invoke(*args(params)) } }
  if params[:env].present? && (params[:env] =~ /\A\S+\s*=\s*.+/) == 0
    with_env(params[:env]) { task.call }
  else
    task.call
  end
end
tasks() click to toggle source
# File lib/rakeleak.rb, line 4
def self.tasks
  Rake::Task.tasks
end

Private Class Methods

args(params) click to toggle source
# File lib/rakeleak.rb, line 45
def self.args(params)
  Rake::Task[params[:id]].arg_names.map{|arg| params[arg] }.reject(&:nil?)
end
capture_stdout() { || ... } click to toggle source
# File lib/rakeleak.rb, line 32
def self.capture_stdout
  stdout = $stdout
  trap = StringIO.new
  $stdout = trap
  $stdout.sync = true

  yield if block_given?

  trap.string
ensure
  $stdout = stdout
end
with_env(env) { || ... } click to toggle source
# File lib/rakeleak.rb, line 22
def self.with_env(env)
  key, value = env.strip.split(/\s*=\s*/)
  prev_value = ENV[key]
  ENV[key] = value

  yield
ensure
  prev_value.nil? ? ENV.delete(key) : ENV[key] = prev_value
end