script_executor 1.7.3 → 1.7.4
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/CHANGES +1 -1
- data/lib/script_executor/script_locator.rb +10 -2
- data/lib/script_executor/scripts_parser.rb +15 -30
- data/lib/script_executor/scripts_transform.rb +50 -0
- data/lib/script_executor/version.rb +1 -1
- data/spec/base_provision_spec.rb +1 -1
- data/spec/scripts_parser_spec.rb +40 -6
- data/spec/support/script1.sh +2 -2
- metadata +3 -3
- data/lib/script_executor/scripts_transformer.rb +0 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 73c1c08d24e34a3c848c5514f9468ac6da34a109
|
4
|
+
data.tar.gz: 21361a7deed4aa7961730300d9e8a774c52223d4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3a49c7dcae66dcb6ac84fe3f37d7317c55a25a8807e4bb46f788a010e4dd3936a926316bceb2a1f013debac9711e48cc0b086678924bfb98e28244c8c178fc7a
|
7
|
+
data.tar.gz: 38543fcc57931bfdfe4a52c988fd581e59ba4ecd5bfc9baefd050f57562500fc3972bb4d6c955322104827e9d0c008e6e793a9b26752847bceba6e7ea0a1d777
|
data/CHANGES
CHANGED
@@ -1,15 +1,23 @@
|
|
1
1
|
require 'erb'
|
2
2
|
require 'text_interpolator'
|
3
|
+
|
3
4
|
require 'script_executor/scripts_parser'
|
5
|
+
require 'script_executor/scripts_transform'
|
4
6
|
|
5
7
|
module ScriptLocator
|
6
8
|
|
7
9
|
def scripts file
|
8
10
|
data = extract_data file
|
9
11
|
|
10
|
-
|
12
|
+
begin
|
13
|
+
scripts_parser = ScriptsParser.new
|
14
|
+
parsed_content = scripts_parser.parse data
|
11
15
|
|
12
|
-
|
16
|
+
transformer = ScriptsTransform.new
|
17
|
+
transformer.transform(parsed_content)
|
18
|
+
rescue Parslet::ParseFailed => failure
|
19
|
+
puts failure.cause.ascii_tree
|
20
|
+
end
|
13
21
|
end
|
14
22
|
|
15
23
|
def evaluate_script_body content, env, type=:erb
|
@@ -1,42 +1,27 @@
|
|
1
1
|
require 'parslet'
|
2
2
|
|
3
|
-
require 'script_executor/scripts_transformer'
|
4
|
-
|
5
3
|
class ScriptsParser < Parslet::Parser
|
6
4
|
root :language
|
7
5
|
|
8
|
-
|
9
|
-
rule(:language) { (shebang.as(:shebang).maybe >> ignored.as(:ignored).maybe >> scripts.as(:scripts)).as(:language) }
|
10
|
-
|
11
|
-
rule(:shebang) { str('#') >> str('!') >> match['\w\d_/\s'].repeat(1) }
|
12
|
-
rule(:ignored) { comment.repeat }
|
13
|
-
rule(:scripts) { script.repeat }
|
14
|
-
|
15
|
-
rule(:script) { emptyLines >> (name >> comment.maybe >> code).as(:script) }
|
16
|
-
rule(:comment) { emptyLines >> spaces >> (str('#') >> spaces >> (newline.absent? >> any).repeat.as(:comment)) >> newline }
|
17
|
-
rule(:name) { spaces >> str('[') >> spaces >> spaces >> nameChars.as(:name) >> spaces >> str(']') >> spaces >> newline }
|
18
|
-
|
19
|
-
rule(:code) { (emptyLines >> codeLine.repeat.maybe >> emptyLines).as(:code) }
|
20
|
-
rule(:codeLine) { emptyLines >> codeChars.as(:codeLine) >> newline }
|
6
|
+
rule(:language) { (shebang.as(:shebang).maybe >> empty_lines >> comment.repeat(0).as(:ignored) >> empty_lines >> scripts).as(:language) }
|
21
7
|
|
22
|
-
rule(:
|
23
|
-
rule(:codeChars) { match['(.*)\w\d $_#"<>{}\'\/\.%=!\-+/\*|:~@'].repeat(1) }
|
8
|
+
rule(:shebang) { str('#') >> str('!') >> match['\w\d_/\s'].repeat(1) }
|
24
9
|
|
25
|
-
rule(:
|
26
|
-
rule(:emptyLine) { spaces >> newline }
|
27
|
-
rule(:newline) { str("\n") >> str("\r").maybe }
|
10
|
+
rule(:comment) { (str(';') | str('#')) >> spaces >> (newline.absent? >> any).repeat(0).as(:comment) >> eol }
|
28
11
|
|
29
|
-
rule(:
|
12
|
+
rule(:scripts) { script.repeat(0).as(:scripts) }
|
30
13
|
|
31
|
-
|
32
|
-
|
33
|
-
parsed_content = super content + "\n"
|
14
|
+
rule(:name) { spaces >> str('[') >> spaces >> name_chars.as(:name) >> str(']') >> eol }
|
15
|
+
rule(:name_chars) { match['\w\d_'].repeat(1) }
|
34
16
|
|
35
|
-
|
17
|
+
rule(:script) { (name >> empty_lines >> (name.absent? >> (comment | code_line)).repeat(0)).as(:script) }
|
18
|
+
rule(:code_line) { (newline.absent? >> code_chars).repeat(1).as(:code_line) >> eol }
|
19
|
+
rule(:code_chars) { any }
|
36
20
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
21
|
+
rule(:empty_lines) { empty_line.repeat(0) }
|
22
|
+
rule(:empty_line) { spaces >> newline }
|
23
|
+
rule(:newline) { str("\n") >> match("\r").maybe }
|
24
|
+
rule(:spaces) { match["\s\t "].repeat(0) }
|
25
|
+
rule(:eol) { (newline.repeat(0) | eof) }
|
26
|
+
rule(:eof) { any.absent? }
|
42
27
|
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'parslet'
|
2
|
+
|
3
|
+
class ScriptsTransform < Parslet::Transform
|
4
|
+
|
5
|
+
rule(:language => subtree(:language)) do
|
6
|
+
language.delete(:ignored)
|
7
|
+
|
8
|
+
new_scripts = {}
|
9
|
+
|
10
|
+
language[:scripts].each do |el|
|
11
|
+
script = el[:script]
|
12
|
+
|
13
|
+
name = script[0][:name].to_sym
|
14
|
+
|
15
|
+
has_main_comment = script[1][:comment] != nil
|
16
|
+
|
17
|
+
main_comment = has_main_comment ? script[1][:comment].to_s : ''
|
18
|
+
|
19
|
+
start_index = has_main_comment ? 2 : 1
|
20
|
+
|
21
|
+
code = []
|
22
|
+
|
23
|
+
(start_index..script.size-1).each do |index|
|
24
|
+
script_node = script[index]
|
25
|
+
|
26
|
+
comment = script_node[:comment]
|
27
|
+
|
28
|
+
if comment && comment.to_s !~ /^[\s;#]+$/
|
29
|
+
code << '# ' + comment.to_s
|
30
|
+
end
|
31
|
+
|
32
|
+
code_line = script_node[:code_line]
|
33
|
+
|
34
|
+
if code_line
|
35
|
+
code << code_line.to_s
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
new_scripts[name] = {comment: main_comment, code: code}
|
40
|
+
end
|
41
|
+
|
42
|
+
language[:scripts] = new_scripts
|
43
|
+
|
44
|
+
language
|
45
|
+
end
|
46
|
+
|
47
|
+
def transform content
|
48
|
+
apply(content)[:scripts]
|
49
|
+
end
|
50
|
+
end
|
data/spec/base_provision_spec.rb
CHANGED
data/spec/scripts_parser_spec.rb
CHANGED
@@ -1,16 +1,19 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
require 'script_executor/scripts_parser'
|
4
|
-
require 'script_executor/
|
4
|
+
require 'script_executor/scripts_transform'
|
5
5
|
|
6
6
|
describe ScriptsParser do
|
7
|
+
|
7
8
|
describe "#parse" do
|
8
9
|
it "parses content from file 1" do
|
9
10
|
content = File.read('spec/support/script1.sh')
|
10
11
|
|
11
12
|
parsed_content = subject.parse(content)
|
12
13
|
|
13
|
-
ap parsed_content
|
14
|
+
#ap parsed_content
|
15
|
+
|
16
|
+
ap transform parsed_content
|
14
17
|
end
|
15
18
|
|
16
19
|
it "parses content from file 2" do
|
@@ -18,7 +21,9 @@ describe ScriptsParser do
|
|
18
21
|
|
19
22
|
parsed_content = subject.parse(content)
|
20
23
|
|
21
|
-
ap parsed_content
|
24
|
+
#ap parsed_content
|
25
|
+
|
26
|
+
ap transform parsed_content
|
22
27
|
end
|
23
28
|
|
24
29
|
it "parses content from file 3" do
|
@@ -26,7 +31,9 @@ describe ScriptsParser do
|
|
26
31
|
|
27
32
|
parsed_content = subject.parse(content)
|
28
33
|
|
29
|
-
ap parsed_content
|
34
|
+
#ap parsed_content
|
35
|
+
|
36
|
+
ap transform parsed_content
|
30
37
|
end
|
31
38
|
|
32
39
|
it "parses content from file 4" do
|
@@ -34,7 +41,9 @@ describe ScriptsParser do
|
|
34
41
|
|
35
42
|
parsed_content = subject.parse(content)
|
36
43
|
|
37
|
-
ap parsed_content
|
44
|
+
#ap parsed_content
|
45
|
+
|
46
|
+
ap transform parsed_content
|
38
47
|
end
|
39
48
|
|
40
49
|
it "parses content from file 5" do
|
@@ -42,7 +51,32 @@ describe ScriptsParser do
|
|
42
51
|
|
43
52
|
parsed_content = subject.parse(content)
|
44
53
|
|
45
|
-
ap parsed_content
|
54
|
+
#ap parsed_content
|
55
|
+
|
56
|
+
ap transform parsed_content
|
46
57
|
end
|
58
|
+
|
59
|
+
# it "test" do
|
60
|
+
# content = <<-DATA
|
61
|
+
# #!/usr/bin/env bash
|
62
|
+
#
|
63
|
+
# # Some description
|
64
|
+
# [name]
|
65
|
+
#
|
66
|
+
# # some comment
|
67
|
+
# aaa
|
68
|
+
# bbb
|
69
|
+
# DATA
|
70
|
+
#
|
71
|
+
# parsed_content = subject.parse(content)
|
72
|
+
#
|
73
|
+
# ap parsed_content
|
74
|
+
# end
|
75
|
+
end
|
76
|
+
|
77
|
+
def transform content
|
78
|
+
script_transform = ScriptsTransform.new
|
79
|
+
|
80
|
+
script_transform.transform content
|
47
81
|
end
|
48
82
|
end
|
data/spec/support/script1.sh
CHANGED
@@ -76,7 +76,7 @@ sudo apt-get install -y node
|
|
76
76
|
|
77
77
|
|
78
78
|
#######################################
|
79
|
-
[rbenv]
|
79
|
+
[rbenv ]
|
80
80
|
# Installs node
|
81
81
|
|
82
82
|
sudo apt-get install -y rbenv
|
@@ -93,4 +93,4 @@ sudo apt-get install -y libqt4-dev
|
|
93
93
|
sudo apt-get install -y libqtwebkit-dev
|
94
94
|
|
95
95
|
# to support headless
|
96
|
-
sudo apt-get install -y xvfb
|
96
|
+
sudo apt-get install -y xvfb
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: script_executor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.7.
|
4
|
+
version: 1.7.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexander Shvets
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-10-
|
11
|
+
date: 2015-10-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: highline
|
@@ -161,7 +161,7 @@ files:
|
|
161
161
|
- lib/script_executor/script_executor.rb
|
162
162
|
- lib/script_executor/script_locator.rb
|
163
163
|
- lib/script_executor/scripts_parser.rb
|
164
|
-
- lib/script_executor/
|
164
|
+
- lib/script_executor/scripts_transform.rb
|
165
165
|
- lib/script_executor/version.rb
|
166
166
|
- lib/script_locator.rb
|
167
167
|
- script_executor.gemspec
|
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'parslet'
|
2
|
-
|
3
|
-
class ScriptsTransformer < Parslet::Transform
|
4
|
-
rule(:language => subtree(:language)) do
|
5
|
-
language.delete(:ignored)
|
6
|
-
|
7
|
-
new_scripts = {}
|
8
|
-
|
9
|
-
language[:scripts].each do |script|
|
10
|
-
name = script[:script][:name].to_sym
|
11
|
-
comment = script[:script][:comment].to_s
|
12
|
-
code = script[:script][:code]
|
13
|
-
|
14
|
-
code.each_with_index do |codeLine, index|
|
15
|
-
code[index] = codeLine[:codeLine].to_s
|
16
|
-
end
|
17
|
-
|
18
|
-
new_scripts[name] = {comment: comment, code: code}
|
19
|
-
end
|
20
|
-
|
21
|
-
language[:scripts] = new_scripts
|
22
|
-
|
23
|
-
language
|
24
|
-
end
|
25
|
-
end
|