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.
-
#initialize(config, options = {}) ⇒ REPL
constructor
A new instance of REPL.
-
#input(options = {}) ⇒ String?
Prompt the Ruby user for input and send that input to the browser for evaluation (blocking).
- #invalid_input?(line) ⇒ Boolean
- #puts_message(message) ⇒ Object
-
#ready? ⇒ Boolean
Is the socket ready?.
- #repeat_input?(line) ⇒ Boolean
-
#start(options = {}, &block) ⇒ Object
Start the Websocket connection (blocking).
-
#wait_for_response(options) ⇒ 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 @messenger = 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
116 117 118 119 |
# File 'lib/web-repl/repl.rb', line 116 def acknowledge_handshake(&block) loop until !@handshake.nil? yield end |
#close ⇒ Object
Close the REPL
122 123 124 125 |
# File 'lib/web-repl/repl.rb', line 122 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) @messenger.out({ :statement => statement }) unless @messenger.nil? end |
#input(options = {}) ⇒ 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 51 52 53 |
# File 'lib/web-repl/repl.rb', line 38 def input( = {}) line = Readline.readline('> ', true) if invalid_input?(line) Readline::HISTORY.pop input() else Readline::HISTORY.pop if repeat_input?(line) statement = line.strip case statement when "exit", "quit" then exit else evaluate(statement) wait_for_response() end end end |
#invalid_input?(line) ⇒ Boolean
59 60 61 |
# File 'lib/web-repl/repl.rb', line 59 def invalid_input?(line) line.nil? || line =~ /^\s*$/ end |
#puts_message(message) ⇒ Object
72 73 74 75 76 77 78 79 80 81 |
# File 'lib/web-repl/repl.rb', line 72 def () keys = { :error => :red, :value => :white } text = nil keys.each do |k,v| text ||= [k].to_s.send(v) unless [k].nil? end text ||= "(void)" puts(text) text end |
#ready? ⇒ Boolean
Is the socket ready?
85 86 87 |
# File 'lib/web-repl/repl.rb', line 85 def ready? !@socket.nil? && !@messenger.nil? && !@handshake.nil? end |
#repeat_input?(line) ⇒ Boolean
55 56 57 |
# File 'lib/web-repl/repl.rb', line 55 def repeat_input?(line) line == Readline::HISTORY.to_a[-2] end |
#start(options = {}, &block) ⇒ Object
Start the Websocket connection (blocking)
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/web-repl/repl.rb', line 92 def start( = {}, &block) @thread = Thread.new do begin EM::WebSocket.run(@config) do |ws| if @socket.nil? @socket = ws @messenger = Messenger.new(@socket) configure_event_handling(:background => [:background], &block) end end rescue Exception => exception Thread.main.raise(exception) end end Thread.abort_on_exception = true acknowledge_handshake do yield if block_given? input() unless !![:background] end #@thread.join unless !!options[:background] end |
#wait_for_response(options) ⇒ Object
Wait for a response from the browser
64 65 66 67 68 69 70 |
# File 'lib/web-repl/repl.rb', line 64 def wait_for_response() until !@buffer.empty? do end @buffer.each { |resp| (resp) } @buffer.clear input unless !![:background] end |