Class: ShellEvalContext
Constant Summary collapse
- WHITELISTED_METHODS =
i[actions wtf? cancel safe unsafe safe? help] .freeze
Instance Method Summary collapse
-
#initialize(interface, interface_m, send_q: ::Queue.new, results_q: ::Queue.new) ⇒ ShellEvalContext
constructor
A new instance of ShellEvalContext.
- #method_missing(m, *args, &block) ⇒ Object
- #process_pending ⇒ Object
- #respond_to_missing?(m, include_private) ⇒ Boolean
Constructor Details
#initialize(interface, interface_m, send_q: ::Queue.new, results_q: ::Queue.new) ⇒ ShellEvalContext
Returns a new instance of ShellEvalContext.
121 122 123 124 125 126 |
# File 'lib/roby/app/scripts/shell.rb', line 121 def initialize(interface, interface_m, send_q: ::Queue.new, results_q: ::Queue.new) @__interface = interface @__interface_m = interface_m @__send = send_q @__results = results_q end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(m, *args, &block) ⇒ Object
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/roby/app/scripts/shell.rb', line 132 def method_missing(m, *args, &block) if WHITELISTED_METHODS.include?(m) return @__interface.send(m, *args, &block) end @__send.push(::Kernel.lambda do @__interface.send(m, *args, &block) end) result, error = @__results.pop if error raise error elsif result.kind_of?(@__interface_m::ShellSubcommand) ::ShellEvalContext.new( result, @__interface_m, send_q: @__send, results_q: @__results ) else result end end |
Instance Method Details
#process_pending ⇒ Object
152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
# File 'lib/roby/app/scripts/shell.rb', line 152 def process_pending loop do begin command = @__send.pop(true) begin result = command.call @__results.push([result, nil]) rescue ::Exception => e @__results.push([nil, e]) end rescue ::ThreadError break end end end |
#respond_to_missing?(m, include_private) ⇒ Boolean
128 129 130 |
# File 'lib/roby/app/scripts/shell.rb', line 128 def respond_to_missing?(m, include_private) @__interface.respond_to?(m, include_private) end |