web-repl 0.6 → 0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a9cb6f9d73523c501441de89215c76c8e7343161
4
- data.tar.gz: bdb3396923e7fca4fc2a267162c9d5f1ff81cd53
3
+ metadata.gz: b4e0434060703c3bc75cf67d85d2897d4990da1a
4
+ data.tar.gz: 0378db709e99f75dc4a9e83cf6c017b6159103ac
5
5
  SHA512:
6
- metadata.gz: 32a4b0890411729f1c1fbaec5ad54b0e78c81b6fdf98e54a342c6244d059db54f7386694adadde2d0767d771eb8123995afb2a0c6a007880a1be7a6d7846d357
7
- data.tar.gz: 8abdfd2e5050b6c79671a77e24fb827343104b6b679f34c20986878aa0772153df88a6e24b0fb861fc930f66bf7bef4c36c01f6118ecdd1c699b970a6d9e71fc
6
+ metadata.gz: 814a12b0fb7b606f3d84e4879f570a9f0e9e38c141ef0e58d4bb57120db97e8019181f564d4bba74e7f4e2d27c5d12707b646b97f846dc31703200c10ce1bbc2
7
+ data.tar.gz: 8fcdf3dd69be65c74111f2acaba1400808a50a1d42fde538125259e12de002c5bbb41b7bbe41516f4dfef6bcf2c67a20e790af1f3800a5d16f0ac5e4348bfa33
@@ -6,14 +6,14 @@ require "readline"
6
6
  require "socket"
7
7
 
8
8
  # classes
9
- require "web-repl/messager"
9
+ require "web-repl/messenger"
10
10
  require "web-repl/patch"
11
11
  require "web-repl/repl"
12
12
 
13
13
  # A Javascript REPL that runs in Ruby. Evaluation is done by a web browser instance.
14
14
  module WebRepl
15
15
 
16
- VERSION = "0.6"
16
+ VERSION = "0.7"
17
17
 
18
18
  # Shortcut to REPL.start
19
19
  def self.start(*a)
@@ -1,7 +1,7 @@
1
1
  module WebRepl
2
2
 
3
3
  # Handles sending and receiving messages to/from the socket
4
- class Messager
4
+ class Messenger
5
5
 
6
6
  # @param [EventMachine::WebSocket] socket
7
7
  # @param [Hash] options
@@ -21,7 +21,7 @@ module WebRepl
21
21
  def initialize(config, options = {})
22
22
  @config = config
23
23
  @socket = nil
24
- @messager = nil
24
+ @messenger = nil
25
25
  @buffer = []
26
26
  @debug = options[:debug]
27
27
  end
@@ -30,28 +30,54 @@ module WebRepl
30
30
  # @param [Fixnum, String] statement A Javascript statement to be evaluated
31
31
  # @return [String, nil] The data that was sent to the browser, or nil if sending could not be completed.
32
32
  def evaluate(statement)
33
- @messager.out({ :statement => statement }) unless @messager.nil?
33
+ @messenger.out({ :statement => statement }) unless @messenger.nil?
34
34
  end
35
35
 
36
36
  # Prompt the Ruby user for input and send that input to the browser for evaluation (blocking)
37
37
  # @return [String, nil] The data that was sent to the browser, or nil if sending could not be completed
38
- def gets
38
+ def input(options = {})
39
39
  line = Readline.readline('> ', true)
40
- return nil if line.nil?
41
- if line =~ /^\s*$/ or Readline::HISTORY.to_a[-2] == line
40
+ if invalid_input?(line)
42
41
  Readline::HISTORY.pop
43
- end
44
- statement = line.strip
45
- case statement
46
- when "exit" then exit
42
+ input(options)
47
43
  else
48
- evaluate(statement)
44
+ Readline::HISTORY.pop if repeat_input?(line)
45
+ statement = line.strip
46
+ case statement
47
+ when "exit", "quit" then exit
48
+ else
49
+ evaluate(statement)
50
+ wait_for_response(options)
51
+ end
49
52
  end
50
53
  end
51
54
 
55
+ def repeat_input?(line)
56
+ line == Readline::HISTORY.to_a[-2]
57
+ end
58
+
59
+ def invalid_input?(line)
60
+ line.nil? || line =~ /^\s*$/
61
+ end
62
+
52
63
  # Wait for a response from the browser
53
- def wait_for_response
54
- loop until !@buffer.empty?
64
+ def wait_for_response(options)
65
+ until !@buffer.empty? do
66
+ end
67
+ @buffer.each { |resp| puts_message(resp) }
68
+ @buffer.clear
69
+ input unless !!options[:background]
70
+ end
71
+
72
+ def puts_message(message)
73
+ keys = { :error => :red, :value => :white }
74
+ text = nil
75
+ keys.each do |k,v|
76
+ text ||= message[k].to_s.send(v) unless message[k].nil?
77
+ end
78
+ text ||= "(void)"
79
+ puts(text)
80
+ text
55
81
  end
56
82
 
57
83
  # Start the Websocket connection (blocking)
@@ -62,25 +88,24 @@ module WebRepl
62
88
  EM::WebSocket.run(@config) do |ws|
63
89
  if @socket.nil?
64
90
  @socket = ws
65
- @messager = Messager.new(@socket)
91
+ @messenger = Messenger.new(@socket)
66
92
  configure_event_handling(:background => options[:background], &block)
67
93
  end
68
94
  end
69
95
  end
96
+ Thread.abort_on_exception = true
70
97
  acknowledge_handshake do
71
98
  yield if block_given?
72
- gets unless !!options[:background]
99
+ input(options) unless !!options[:background]
73
100
  end
74
- @thread.join unless !!options[:background]
101
+ #@thread.join unless !!options[:background]
75
102
  end
76
103
 
77
104
  # Execute a block when a connection is made
78
105
  # @return [TrueClass]
79
106
  def acknowledge_handshake(&block)
80
- Thread.new do
81
- loop until !@handshake.nil?
82
- yield
83
- end
107
+ loop until !@handshake.nil?
108
+ yield
84
109
  end
85
110
 
86
111
  # Close the REPL
@@ -102,17 +127,9 @@ module WebRepl
102
127
  end
103
128
 
104
129
  def handle_message_received(raw_message, options = {})
105
- @messager.in(raw_message) do |message|
106
- @buffer.clear
130
+ @messenger.in(raw_message) do |message|
107
131
  @buffer << message
108
- keys = { :error => :red, :value => :white }
109
- text = nil
110
- keys.each do |k,v|
111
- text ||= message[k].to_s.send(v) unless message[k].nil?
112
- end
113
- puts(text)
114
132
  end
115
- gets unless !!options[:background]
116
133
  end
117
134
 
118
135
  # Configure the Websocket event handling
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: web-repl
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.6'
4
+ version: '0.7'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ari Russo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-13 00:00:00.000000000 Z
11
+ date: 2014-05-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rb-readline
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: mocha
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -98,7 +112,7 @@ files:
98
112
  - js/replConnection-0.6.min.js
99
113
  - js/replConnection.js
100
114
  - lib/web-repl.rb
101
- - lib/web-repl/messager.rb
115
+ - lib/web-repl/messenger.rb
102
116
  - lib/web-repl/patch.rb
103
117
  - lib/web-repl/repl.rb
104
118
  - test/helper.rb