Module: Thor::Actions

Overview

Patch some Thor actions

Instance Method Summary collapse

Instance Method Details

#run(command, config = {}) ⇒ Object



86
87
88
89
# File 'lib/builderator/patch/thor-actions.rb', line 86

def run(command, config = {})
  thor_run(command, config)
  fail "Command failed: #{command}" if $?.exitstatus != 0
end

#run_with_input(command, input, config = {}) ⇒ Object

Replace ‘run` with IO::popen to accept STDIN



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/builderator/patch/thor-actions.rb', line 15

def run_with_input(command, input, config = {})
  return unless behavior == :invoke

  destination = relative_to_original_destination_root(destination_root, false)
  desc = "#{command} from #{destination.inspect}"

  if config[:with]
    desc = "#{File.basename(config[:with].to_s)} #{desc}"
    command = "#{config[:with]} #{command}"
  end

  say_status :run, desc, config.fetch(:verbose, true)
  return if options[:pretend]

  output = config.fetch(:stdout, STDOUT)

  IO.popen(command, 'r+') do |io|
    io.write(input)
    io.close_write

    ## Stream output
    loop do
      break if io.eof?

      output.write(io.readpartial(4096))
      output.flush
    end
  end
end

#run_without_bundler(command, config = {}) ⇒ Object

Run an external command without bundler’s injected environment variables (e.g. keep vagrant happy in it’s own little vendor full of unicorns)



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/builderator/patch/thor-actions.rb', line 49

def run_without_bundler(command, config = {})
  destination = relative_to_original_destination_root(destination_root, false)
  desc = "#{command} from #{destination.inspect}"

  if config[:with]
    desc = "#{File.basename(config[:with].to_s)} #{desc}"
    command = "#{config[:with]} #{command}"
  end

  say_status :run, desc, config.fetch(:verbose, true)
  return if options[:pretend]

  output = config.fetch(:stdout, STDOUT)

  Bundler.with_clean_env do
    if config.fetch(:childprocess, false)
      process = ChildProcess.build(*command.split(' '))
      process.io.inherit!

      process.start
      process.wait
      return process.exit_code
    end

    IO.popen(command, 'r+') do |io|
      ## Stream output
      loop do
        break if io.eof?

        output.write(io.readpartial(4096))
        output.flush
      end
    end
  end
end

#template(source, destination, config = {}) ⇒ Object

Make ‘template` load from a sane path and render in the context of Config



94
95
96
97
98
99
# File 'lib/builderator/patch/thor-actions.rb', line 94

def template(source, destination, config = {})
  content = ERB.new(Builderator::Util.source_path(source).binread,
                    nil, '-', '@output_buffer').result(Builderator::Config.instance_eval('binding'))

  create_file Builderator::Util.relative_path(destination), content, config
end

#thor_runObject



85
# File 'lib/builderator/patch/thor-actions.rb', line 85

alias_method :thor_run, :run