boojs 0.0.16 → 0.0.17
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +9 -2
- data/bin/boojs +27 -3
- data/lib/boojs/version.rb +1 -1
- data/lib/boojs.rb +7 -4
- data/spec/cli_spec.rb +40 -26
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e7fd9c711425ee30d94d93e2783416e5b20c0f5c
|
4
|
+
data.tar.gz: 0a56b113946a5b6adfb68c15c3094361e528df99
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 53fc0ef3f58d229db48ef8cb23d8bee35f7961fd403f1e0995ff4328e2cb9ba088bbab731581f88804461368fc4c7fecb7b0c3a214826445e03276205b9f2c0e
|
7
|
+
data.tar.gz: 06064c7b0fd99e359ee59eb2e2c419ea826b17b837d076e102190bba2a8d1fd49b6beca0087cd4bb4f7aeffbf3cdc328dbfa6f119028b0d74278e77ed74d026a
|
data/README.md
CHANGED
@@ -24,12 +24,13 @@ gem install boojs
|
|
24
24
|
# Usage
|
25
25
|
#### SYNOPSIS
|
26
26
|
```sh
|
27
|
-
boojs [-e statement] [-v file] [file]
|
27
|
+
boojs [-e statement] [-t timeout] [-v file] [file]
|
28
28
|
```
|
29
29
|
|
30
30
|
#### DESCRIPTION
|
31
31
|
The following options are available:
|
32
|
-
* `-e` - Pass a javascript statement to execute after the file (if a file is provided) and then immediately terminate.
|
32
|
+
* `-e` - Pass a javascript statement to execute after the file (if a file is provided) and then immediately terminate unless `-t` is set.
|
33
|
+
* `-t` - Close the program after N seconds have passed, unless an exception is raised
|
33
34
|
* `-v` - Verify that a file contains no javascript syntax errors. Returns 0 if there are no errors.
|
34
35
|
|
35
36
|
#### EXAMPLES
|
@@ -48,6 +49,12 @@ Execute a javascript statement, and then immediately exit. Exceptions will retur
|
|
48
49
|
(sh)>boojs -e "console.log(document);"
|
49
50
|
```
|
50
51
|
|
52
|
+
Execute a javascript statement, and then wait 4 seconds before exiting. Exceptions will return 1 and end execution early.
|
53
|
+
```sh
|
54
|
+
(sh)>boojs -e "console.log(document); -t 4"
|
55
|
+
```
|
56
|
+
|
57
|
+
|
51
58
|
Verify that a file contains no javascript runtime initialization errors
|
52
59
|
```sh
|
53
60
|
(sh)>boojs -v code.js
|
data/bin/boojs
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
require 'boojs'
|
3
3
|
require 'optparse'
|
4
4
|
require 'phantomjs'
|
5
|
+
require 'timeout'
|
5
6
|
|
6
7
|
#Parse
|
7
8
|
##########################################
|
@@ -17,19 +18,42 @@ parser = OptionParser.new do |opts|
|
|
17
18
|
opts.on "-e COMMAND" do |c|
|
18
19
|
@c = c
|
19
20
|
end
|
21
|
+
|
22
|
+
#Timeout
|
23
|
+
opts.on "-t TIMEOUT" do |t|
|
24
|
+
@t = t.to_i
|
25
|
+
end
|
20
26
|
end
|
21
27
|
parser.parse!
|
22
28
|
file = ARGV.pop
|
23
29
|
##########################################
|
24
30
|
|
25
31
|
|
32
|
+
#Pipe with with a optional file and optional execute command
|
33
|
+
pipe_proc = Proc.new do
|
34
|
+
if file
|
35
|
+
BooJS.pipe File.read(file), @c, !@t.nil?
|
36
|
+
else
|
37
|
+
BooJS.pipe nil, @c, !@t.nil?
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
#This takes a long time
|
42
|
+
$phantomjs_path = Phantomjs.path
|
43
|
+
|
26
44
|
#Run verify or run stdin/stdout mode?
|
27
45
|
if @vfile
|
28
46
|
BooJS.verify File.read(@file)
|
29
47
|
else
|
30
|
-
if
|
31
|
-
|
48
|
+
if @t
|
49
|
+
begin
|
50
|
+
Timeout::timeout(@t) do
|
51
|
+
pipe_proc.call
|
52
|
+
end
|
53
|
+
rescue Timeout::Error
|
54
|
+
exit 0
|
55
|
+
end
|
32
56
|
else
|
33
|
-
|
57
|
+
pipe_proc.call
|
34
58
|
end
|
35
59
|
end
|
data/lib/boojs/version.rb
CHANGED
data/lib/boojs.rb
CHANGED
@@ -30,7 +30,7 @@ module BooJS
|
|
30
30
|
|
31
31
|
#Optionally, accept code to inject and a command to run
|
32
32
|
#If the command is nil, this is not executed as a oneshot
|
33
|
-
def self.pipe(str=nil, cmd=nil)
|
33
|
+
def self.pipe(str=nil, cmd=nil, will_timeout=false)
|
34
34
|
js = %{
|
35
35
|
var system = require('system');
|
36
36
|
function __spec_ping(str) {
|
@@ -56,15 +56,18 @@ module BooJS
|
|
56
56
|
#Repl
|
57
57
|
if cmd
|
58
58
|
js += "\n#{cmd}"
|
59
|
-
|
59
|
+
|
60
|
+
js += "\nphantom.exit(1)" unless will_timeout
|
60
61
|
else
|
61
62
|
js += "\nwhile (true) { var line = system.stdin.readLine(); eval(line); }"
|
62
63
|
end
|
63
64
|
|
64
|
-
phantom = Phantomjs.path
|
65
65
|
tmp = Tempfile.new(SecureRandom.hex)
|
66
66
|
tmp.puts js
|
67
67
|
tmp.close
|
68
|
-
|
68
|
+
ret = system("#{$phantomjs_path} #{tmp.path}")
|
69
|
+
|
70
|
+
tmp.unlink
|
71
|
+
exit ret
|
69
72
|
end
|
70
73
|
end
|
data/spec/cli_spec.rb
CHANGED
@@ -5,7 +5,7 @@ require 'securerandom'
|
|
5
5
|
describe "CLI" do
|
6
6
|
before(:each) do
|
7
7
|
#Laziness
|
8
|
-
`ps -ax | grep phantomjs | grep -v
|
8
|
+
`ps -ax | grep phantomjs | grep -v grep | awk '{print $1}' | xargs kill -9`
|
9
9
|
end
|
10
10
|
|
11
11
|
it "Will not exit in pipe mode" do
|
@@ -19,31 +19,45 @@ describe "CLI" do
|
|
19
19
|
expect(@finished).to eq(false)
|
20
20
|
end
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
22
|
+
it "Will exit in pipe mode if -t is set" do
|
23
|
+
@finished = false
|
24
|
+
Thread.new do
|
25
|
+
system("ruby -I./lib ./bin/boojs -t 2")
|
26
|
+
@finished = true
|
27
|
+
end
|
28
|
+
|
29
|
+
expect(@finished).to eq(false)
|
30
|
+
sleep 4
|
31
|
+
expect(@finished).to eq(true)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "Will exit in execute mode if -t is set and return a 0 value" do
|
35
|
+
@finished = false
|
36
|
+
Thread.new do
|
37
|
+
@return = system %{ruby -I./lib ./bin/boojs -t 2 -e "console.log('hello');"}
|
38
|
+
@finished = true
|
39
|
+
end
|
40
|
+
|
41
|
+
expect(@finished).to eq(false)
|
42
|
+
sleep 4
|
43
|
+
expect(@finished).to eq(true)
|
44
|
+
|
45
|
+
expect(@return).to eq(true)
|
46
|
+
end
|
47
|
+
|
48
|
+
it "Will exit in execute mode if -t is set and return a 1 value for a bad command" do
|
49
|
+
@finished = false
|
50
|
+
Thread.new do
|
51
|
+
@return = system %{ruby -I./lib ./bin/boojs -t 2 -e "no_such_variable;"}
|
52
|
+
@finished = true
|
53
|
+
end
|
54
|
+
|
55
|
+
expect(@finished).to eq(false)
|
56
|
+
sleep 4
|
57
|
+
expect(@finished).to eq(true)
|
58
|
+
|
59
|
+
expect(@return).not_to eq(true)
|
60
|
+
end
|
47
61
|
|
48
62
|
it "Replies with pong$KEY when given ping('$key')" do
|
49
63
|
key = SecureRandom.hex
|