Class: ShellProxy

Inherits:
Object
  • Object
show all
Includes:
Escaping
Defined in:
lib/shell-proxy.rb

Instance Method Summary collapse

Methods included from Escaping

#__escapinate

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(sym, *args) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/shell-proxy.rb', line 77

def method_missing(sym, *args)
  opts = case args[-1]
         when Hash
           args.pop
         else
           {}
         end

  stub = CmdStub.new(@cmd_buffer)

  cmd = sym.to_s
  cmd << " #{__process_opts(opts)}" unless opts.empty?
  cmd << " #{__process_args(args)}"  unless args.empty?
  @cmd_buffer << cmd
  stub
end

Instance Method Details

#__case(value, &block) ⇒ Object



49
50
51
# File 'lib/shell-proxy.rb', line 49

def __case(value, &block)
  CaseStub.new(__escapinate(value), &block).__handle(@cmd_buffer)
end

#__chdir(dir, &block) ⇒ Object



42
43
44
45
46
47
# File 'lib/shell-proxy.rb', line 42

def __chdir(dir, &block)
  __subshell do
    cd(dir)
    yield
  end
end

#__emit(str) ⇒ Object



98
99
100
# File 'lib/shell-proxy.rb', line 98

def __emit(str)
  __writer.flush
end

#__eval(str) ⇒ Object



94
95
96
# File 'lib/shell-proxy.rb', line 94

def __eval(str)
  @cmd_buffer << str
end

#__for(over, iter, &block) ⇒ Object



53
54
55
# File 'lib/shell-proxy.rb', line 53

def __for(over, iter, &block)
  ForStub.new(over, iter, &block).__handle(@cmd_buffer)
end

#__function(name, &block) ⇒ Object



69
70
71
72
73
74
75
# File 'lib/shell-proxy.rb', line 69

def __function(name, &block)
  @cmd_buffer << "function #{name}() {"
  @cmd_buffer.indent
  yield
  @cmd_buffer.undent
  @cmd_buffer << "}"
end

#__if(condition, &block) ⇒ Object



57
58
59
# File 'lib/shell-proxy.rb', line 57

def __if(condition, &block)
  IfStub.new(condition, &block).__handle(@cmd_buffer)
end

#__main__(writer = nil, &block) ⇒ Object



28
29
30
31
32
# File 'lib/shell-proxy.rb', line 28

def __main__(writer = nil, &block)
  @cmd_buffer = CmdBuffer.new
  instance_exec(&block)
  @cmd_buffer.write(writer || __writer)
end

#__process_and_escape(opts) ⇒ Object



120
121
122
123
124
125
126
127
# File 'lib/shell-proxy.rb', line 120

def __process_and_escape(opts)
  opts.each do |k, v|
    k = k.to_s
    k = (k.length == 1 ? "-" : "--") + k
    yield __escapinate(k)
    yield __escapinate(v) unless v.nil?
  end
end

#__process_args(args) ⇒ Object



106
107
108
109
110
# File 'lib/shell-proxy.rb', line 106

def __process_args(args)
  args.map do |v|
    __escapinate(v)
  end.join(" ")
end

#__process_opts(opts) ⇒ Object



112
113
114
115
116
117
118
# File 'lib/shell-proxy.rb', line 112

def __process_opts(opts)
  outputs = []
  __process_and_escape(opts) do |value|
    outputs << value
  end
  outputs.join(" ")
end

#__return(val) ⇒ Object



65
66
67
# File 'lib/shell-proxy.rb', line 65

def __return(val)
  __eval("return #{__escapinate(val)}")
end

#__set(variable, value) ⇒ Object



61
62
63
# File 'lib/shell-proxy.rb', line 61

def __set(variable, value)
  __eval("#{variable}=#{__escapinate(value)}")
end

#__subshell(&block) ⇒ Object



34
35
36
37
38
39
40
# File 'lib/shell-proxy.rb', line 34

def __subshell(&block)
  @cmd_buffer << "("
  @cmd_buffer.indent
  yield
  @cmd_buffer.undent
  @cmd_buffer << ")"
end

#__writerObject



102
103
104
# File 'lib/shell-proxy.rb', line 102

def __writer
  @writer ||= ShellWriter.new($stdout)
end