web-repl 0.2 → 0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/js/replConnection-0.3.min.js +1 -0
- data/js/replConnection.js +9 -2
- data/lib/web-repl.rb +2 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b5ade737ee82d2cde19f9d7bf3241fbc27eec52c
|
4
|
+
data.tar.gz: ea558223a3d3695dde067d9687c7e11d086c4348
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4f0e00b0c62aa6d2e4539a0ae72e685f35c32de08ac9f86a8e582b8539d81bf0785925a5de5b21bf2cea9153f19d85b7c703efbda932ab89281666e18e0cb05e
|
7
|
+
data.tar.gz: a5000ac001d4fac7a801ff93887e30a30c1a7adc6e6227ce625658d45e163d3047f953967351735db0a6a549c58c0b7d0b44c6efefab80460fe65a1633f39a20
|
data/README.md
CHANGED
@@ -12,7 +12,7 @@ I've been working on a toy project recently that requires browser content to be
|
|
12
12
|
|
13
13
|
There are similar tools that run in nodejs and other languages but this is convenient for me because my project uses a Ruby backend anyway.
|
14
14
|
|
15
|
-
|
15
|
+
Under the hood, communication is done with JSON over Websocket. Note that there's no extra attention to security here other than what is generally implicit with a Websocket, so please use at your own discretion.
|
16
16
|
|
17
17
|
#### Usage
|
18
18
|
|
@@ -32,7 +32,7 @@ To enable the browser side of this, include something like this in the head of y
|
|
32
32
|
|
33
33
|
The javascript assets for this project are located in the [/js directory](https://github.com/arirusso/web-repl/tree/master/js).
|
34
34
|
|
35
|
-
There is also a full example of a webpage (with [rack](http://rack.github.io/) configuration) in the [/examples/page directory](https://github.com/arirusso/web-repl/tree/master/examples/page)
|
35
|
+
There is also a full example of a webpage (with simple [rack](http://rack.github.io/) webserver configuration) in the [/examples/page directory](https://github.com/arirusso/web-repl/tree/master/examples/page)
|
36
36
|
|
37
37
|
###### REPL
|
38
38
|
|
@@ -0,0 +1 @@
|
|
1
|
+
function ReplConnection(e,t,n){if(n===null){n={}}this.debug=!!n.debug;this.reconnect=!!n.reconnect;this.retryTime=n.retryTime||1e3;this.onReceive=n.onReceive;this.host=e;this.port=t;this.active=false;this.socket;this.supported="WebSocket"in window;if(this.supported){console.log("REPL: socket ok")}else{console.log("REPL: socket not supported")}}ReplConnection.prototype.eval=function(statement,options){options=typeof options==="undefined"?{}:options;response={};try{if(typeof options.eval==="function"){response.value=options.eval(statement)}else{response.value=eval(statement)}}catch(err){response.error=err.message}return response};ReplConnection.prototype.initSocket=function(e){if(this.socket!==undefined&&this.socket!==null){this.socket.close()}var t="ws://"+this.host+":"+this.port+"/echo";this.socket=new WebSocket(t);e()};ReplConnection.prototype.handleSocketOpen=function(){this.active=true;console.log("REPL: socket ready")};ReplConnection.prototype.tryConnection=function(){console.log("REPL: waiting for connection");if(this.reconnect){var e=this;window.setTimeout(function(){e.start()},this.retryTime)}};ReplConnection.prototype.handleSocketClose=function(e){if(!this.active){this.tryConnection()}else{console.log("REPL: socket closed");this.active=false;if(this.reconnect){this.tryConnection()}}};ReplConnection.prototype.handleMessageReceived=function(e){if(this.debug){console.log("REPL: message received");console.log(e)}var t=JSON.parse(e.data);var n=t.timestamp;t.timestamp=new Date(n);if(this.onReceive!==undefined){this.onReceive(t)}var r=this.eval(t.statement);var i=this.prepareJSONResponse(r);if(this.debug){console.log("REPL: replying ");console.log(i)}this.socket.send(i)};ReplConnection.prototype.prepareJSONResponse=function(e){var t;try{e.timestamp=(new Date).getTime();t=JSON.stringify(e)}catch(n){e.value=null;e.error=n.message;t=this.prepareJSONResponse(e)}return t};ReplConnection.prototype.initEventHandling=function(){var e=this;this.socket.onopen=function(){e.handleSocketOpen()};this.socket.onclose=function(t){e.handleSocketClose(t)};this.socket.onmessage=function(t){e.handleMessageReceived(t)}};ReplConnection.prototype.start=function(e){if(this.supported){var t=this;this.initSocket(function(){t.initEventHandling();if(e!==undefined){e(t)}})}}
|
data/js/replConnection.js
CHANGED
@@ -20,10 +20,17 @@ function ReplConnection(host, port, options) {
|
|
20
20
|
}
|
21
21
|
|
22
22
|
// This is the "eval" for the REPL
|
23
|
-
|
23
|
+
// statement: the statement to evaluate
|
24
|
+
// options: eval: a custom eval function
|
25
|
+
ReplConnection.prototype.eval = function(statement, options) {
|
26
|
+
options = (typeof options === "undefined") ? {} : options;
|
24
27
|
response = {}
|
25
28
|
try {
|
26
|
-
|
29
|
+
if (typeof options.eval === "function") {
|
30
|
+
response.value = options.eval(statement);
|
31
|
+
} else {
|
32
|
+
response.value = eval(statement);
|
33
|
+
}
|
27
34
|
} catch(err) {
|
28
35
|
response.error = err.message;
|
29
36
|
}
|
data/lib/web-repl.rb
CHANGED
@@ -10,9 +10,10 @@ require "web-repl/messager"
|
|
10
10
|
require "web-repl/patch"
|
11
11
|
require "web-repl/repl"
|
12
12
|
|
13
|
+
# A Javascript REPL that runs in Ruby. Evaluation is done by a web browser instance.
|
13
14
|
module WebRepl
|
14
15
|
|
15
|
-
VERSION = "0.
|
16
|
+
VERSION = "0.3"
|
16
17
|
|
17
18
|
# Shortcut to REPL.start
|
18
19
|
def self.start(*a)
|
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.
|
4
|
+
version: '0.3'
|
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-
|
11
|
+
date: 2014-05-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colorize
|
@@ -92,6 +92,7 @@ files:
|
|
92
92
|
- README.md
|
93
93
|
- bin/web-repl
|
94
94
|
- js/replConnection-0.1.min.js
|
95
|
+
- js/replConnection-0.3.min.js
|
95
96
|
- js/replConnection.js
|
96
97
|
- lib/web-repl.rb
|
97
98
|
- lib/web-repl/messager.rb
|