Class: Hirb::Eval

Inherits:
Object
  • Object
show all
Defined in:
lib/hirb/eval.rb

Class Method Summary collapse

Class Method Details

.boom_shakalaka(cmd) ⇒ Object



7
8
9
10
11
12
13
14
# File 'lib/hirb/eval.rb', line 7

def boom_shakalaka(cmd)
  puts "=" * 80
  puts cmd
  puts "=" * 80
  JSON.generate(
    steal_output { Kernel.eval("_ = #{cmd}", $binding) }
  )
end

.steal_output(&b) ⇒ Object



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
44
# File 'lib/hirb/eval.rb', line 16

def steal_output(&b)
  # Hold on to stdout and stderr
  stdout, stderr = $stdout, $stderr
  
  # Redirect stdout and stderr
  $stdout, $stderr = StringIO.new, StringIO.new

  result = nil
  begin
    result = b.call.inspect
  rescue
    $stderr.puts $!
    $stderr.puts $!.backtrace

    stderr.puts $!
    stderr.puts $!.backtrace
  end
  
  r = {
    :result => result,
    :out    => $stdout.string.split("\n"),
    :err    => $stderr.string.split("\n")
  }
  
  # Set stdout and stderr back
  $stdout, $stderr = stdout, stderr
  
  r
end