Class: WebRepl::REPL
- Inherits:
-
Object
- Object
- WebRepl::REPL
- Defined in:
- lib/web-repl/repl.rb
Overview
The main REPL object
Instance Attribute Summary collapse
-
#thread ⇒ Object
readonly
Returns the value of attribute thread.
Class Method Summary collapse
-
.start(config, options = {}) ⇒ WebRepl::REPL
Start a repl connection.
Instance Method Summary collapse
-
#acknowledge_handshake(&block) ⇒ TrueClass
Execute a block when a connection is made.
-
#close ⇒ Object
Close the REPL.
-
#evaluate(statement) ⇒ String?
Send a statement to the browser for evaluation.
-
#gets ⇒ String?
Prompt the Ruby user for input and send that input to the browser for evaluation (blocking).
-
#initialize(config, options = {}) ⇒ REPL
constructor
A new instance of REPL.
-
#start(options = {}, &block) ⇒ Object
Start the Websocket connection (blocking).
-
#wait_for_response ⇒ Object
Wait for a response from the browser.
Constructor Details
#initialize(config, options = {}) ⇒ REPL
Returns a new instance of REPL.
21 22 23 24 25 26 27 |
# File 'lib/web-repl/repl.rb', line 21 def initialize(config, = {}) @config = config @socket = nil = nil @buffer = [] @debug = [:debug] end |
Instance Attribute Details
#thread ⇒ Object (readonly)
Returns the value of attribute thread.
6 7 8 |
# File 'lib/web-repl/repl.rb', line 6 def thread @thread end |
Class Method Details
.start(config, options = {}) ⇒ WebRepl::REPL
Start a repl connection
14 15 16 |
# File 'lib/web-repl/repl.rb', line 14 def self.start(config, = {}) new(config, ).tap { |repl| repl.start() } end |
Instance Method Details
#acknowledge_handshake(&block) ⇒ TrueClass
Execute a block when a connection is made
79 80 81 82 83 84 |
# File 'lib/web-repl/repl.rb', line 79 def acknowledge_handshake(&block) Thread.new do loop until !@handshake.nil? yield end end |
#close ⇒ Object
Close the REPL
87 88 89 90 |
# File 'lib/web-repl/repl.rb', line 87 def close @socket.close unless @socket.nil? @thread.kill unless @thread.nil? end |
#evaluate(statement) ⇒ String?
Send a statement to the browser for evaluation
32 33 34 |
# File 'lib/web-repl/repl.rb', line 32 def evaluate(statement) .out({ :statement => statement }) unless .nil? end |
#gets ⇒ String?
Prompt the Ruby user for input and send that input to the browser for evaluation (blocking)
38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/web-repl/repl.rb', line 38 def gets line = Readline.readline('> ', true) return nil if line.nil? if line =~ /^\s*$/ or Readline::HISTORY.to_a[-2] == line Readline::HISTORY.pop end statement = line.strip case statement when "exit" then exit else evaluate(statement) end end |
#start(options = {}, &block) ⇒ Object
Start the Websocket connection (blocking)
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/web-repl/repl.rb', line 60 def start( = {}, &block) @thread = Thread.new do EM::WebSocket.run(@config) do |ws| if @socket.nil? @socket = ws = Messager.new(@socket) configure_event_handling(:background => [:background], &block) end end end acknowledge_handshake do yield if block_given? gets unless !![:background] end @thread.join unless !![:background] end |
#wait_for_response ⇒ Object
Wait for a response from the browser
53 54 55 |
# File 'lib/web-repl/repl.rb', line 53 def wait_for_response loop until !@buffer.empty? end |