aipim-rails 0.0.139 → 0.0.157
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/aipim +11 -5
- data/lib/aipim-rails/convert_to_html.rb +89 -43
- data/lib/aipim-rails/markdown.rb +7 -13
- data/lib/aipim-rails/parser.rb +83 -49
- data/lib/aipim-rails/parser_helper.rb +6 -1
- data/lib/assets/costum.css +37 -0
- data/lib/assets/costum.js +14 -0
- metadata +18 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bf64999a71e2009004d3fc8e48e3344c63ad9cf8
|
4
|
+
data.tar.gz: cbe8865cdca7702473650c3d490ccee8b8f92925
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a70fd0ad1fdc491ccfe7c183fe35d7b69d942bf715a31131902be39cc73465be79fdc5affc03dcebbd45d323f24fce5f55a7b4312a3c780f12fdf0414d1ad186
|
7
|
+
data.tar.gz: a0c737c7c06962ec2367b6538a081f05c0f5ea2aa4adfc56ca3ba93e18a9d2121a539d873710623a5022ef7931f8cd4839c17e17f7a1417cbb4d2a6ebee16e23
|
data/bin/aipim
CHANGED
@@ -22,8 +22,16 @@ end
|
|
22
22
|
if ARGV[0] == 'generate'
|
23
23
|
system('mkdir -p aipim')
|
24
24
|
system('mkdir -p aipim/screenshots')
|
25
|
+
system('touch aipim/screenshots/empty')
|
26
|
+
system('mkdir -p aipim/html')
|
27
|
+
system('mkdir -p aipim/html/costum')
|
28
|
+
system('cp '+path+'lib/assets/bootstrap.min.css aipim/html')
|
29
|
+
system('cp '+path+'lib/assets/jquery-1.9.1.js aipim/html')
|
30
|
+
system('cp '+path+'lib/assets/costum.css aipim/html/costum')
|
31
|
+
system('cp '+path+'lib/assets/costum.js aipim/html/costum')
|
32
|
+
|
25
33
|
|
26
|
-
width = "
|
34
|
+
width = "1366"
|
27
35
|
height = "768"
|
28
36
|
|
29
37
|
unless ARGV[1].nil?
|
@@ -41,16 +49,14 @@ if ARGV[0] == 'generate'
|
|
41
49
|
f.close
|
42
50
|
|
43
51
|
elsif ARGV[0] == 'html'
|
44
|
-
%x[rm -
|
45
|
-
%x[mkdir -p aipim/html]
|
52
|
+
%x[rm -f aipim/html/*.feature.html]
|
46
53
|
features = []
|
47
54
|
files = get_files
|
48
55
|
files.each do |f|
|
49
56
|
features << Parser.init(f)
|
50
57
|
end
|
58
|
+
ConvertToHtml.index(features)
|
51
59
|
ConvertToHtml.init(features)
|
52
|
-
system('cp '+path+'lib/assets/bootstrap.min.css aipim/html')
|
53
|
-
system('cp '+path+'lib/assets/jquery-1.9.1.js aipim/html')
|
54
60
|
|
55
61
|
elsif ARGV[0] == 'markdown' || ARGV[0] == 'md'
|
56
62
|
%x[rm -rf aipim/markdown]
|
@@ -23,63 +23,109 @@ module ConvertToHtml
|
|
23
23
|
str = get_tag_color(str, "E ", "tag-and")
|
24
24
|
end
|
25
25
|
|
26
|
+
|
27
|
+
def self.index(features)
|
28
|
+
|
29
|
+
output = File.open("aipim/html/index.html", "w")
|
30
|
+
|
31
|
+
output.puts '
|
32
|
+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
33
|
+
<html>
|
34
|
+
<head>
|
35
|
+
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
|
36
|
+
<link href="bootstrap.min.css" rel="stylesheet">
|
37
|
+
<link href="costum/costum.css" rel="stylesheet">
|
38
|
+
<script src="jquery-1.9.1.js"></script>
|
39
|
+
<script src="costum/costum.js"></script>
|
40
|
+
</head>
|
41
|
+
<body>'
|
42
|
+
output.puts '
|
43
|
+
<div class="panel panel-default scenario-index-panel">
|
44
|
+
<div class="panel-body scenario-index-body">
|
45
|
+
<ul class="list-unstyled">'
|
46
|
+
features.each_with_index do |feature,i|
|
47
|
+
output.puts '
|
48
|
+
<li><a href="#">'+(i+1).to_s+'. '+feature[:feature_name]+'</a></li>'
|
49
|
+
end
|
50
|
+
output.puts '
|
51
|
+
</ul>
|
52
|
+
</div>
|
53
|
+
</div>
|
54
|
+
</body>
|
55
|
+
</html>'
|
56
|
+
|
57
|
+
output.close
|
58
|
+
end
|
59
|
+
|
26
60
|
def self.init(features)
|
27
61
|
|
28
|
-
features.
|
62
|
+
features.each_with_index do |feature, i|
|
29
63
|
output = File.open("aipim/html/"+feature[:filename]+".html", "w")
|
30
64
|
|
31
65
|
output.puts '
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
66
|
+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
67
|
+
<html>
|
68
|
+
<head>
|
69
|
+
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
|
70
|
+
<link href="bootstrap.min.css" rel="stylesheet">
|
71
|
+
<link href="costum/costum.css" rel="stylesheet">
|
72
|
+
<script src="jquery-1.9.1.js"></script>
|
73
|
+
<script src="costum/costum.js"></script>
|
74
|
+
</head>
|
75
|
+
<body>'
|
76
|
+
output.puts '
|
77
|
+
<div class="panel panel-default scenario-index-panel">
|
78
|
+
<div class="panel-body scenario-index-body">
|
79
|
+
<ul class="list-unstyled">'
|
80
|
+
features.each_with_index do |t, j|
|
81
|
+
output.puts '
|
82
|
+
<li><a href="'+t[:filename]+'.html">'+(j+1).to_s+'. '+t[:feature_name]+'</a></li>'
|
83
|
+
if i == j
|
43
84
|
output.puts '
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
feature[:scenarios].each_with_index do |scenario,i|
|
85
|
+
<li>
|
86
|
+
<ul class="list-unstyled features-link">'
|
87
|
+
feature[:scenarios].each_with_index do |scenario,k|
|
48
88
|
output.puts '
|
49
|
-
|
89
|
+
<li><a href="#">'+(j+1).to_s+'.'+(k+1).to_s+'. '+scenario[:name]+'</a></li>'
|
50
90
|
end
|
51
91
|
output.puts '
|
52
|
-
|
53
|
-
|
54
|
-
|
92
|
+
</ul>
|
93
|
+
</li>'
|
94
|
+
end
|
95
|
+
end
|
96
|
+
output.puts '
|
97
|
+
</ul>
|
98
|
+
</div>
|
99
|
+
</div>'
|
55
100
|
|
56
|
-
|
101
|
+
feature[:scenarios].each_with_index do |scenario,j|
|
57
102
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
output.puts '
|
71
|
-
</ul>
|
72
|
-
</div>
|
73
|
-
<div class="panel-footer scenario-screenshot">
|
74
|
-
<img src="../screenshots/'+feature[:filename]+'/'+scenario[:screenshot]+'" />
|
75
|
-
</div>
|
76
|
-
</div>'
|
103
|
+
output.puts '
|
104
|
+
<div class="panel panel-default scenario-panel">
|
105
|
+
<div class="panel-heading scenario-name">
|
106
|
+
<h3 class="panel-title">'+(i+1).to_s+'.'+(j+1).to_s+'. '+scenario[:name]+'<span class="pull-right"><a href="#">[índice]</a></span></h3>
|
107
|
+
</div>
|
108
|
+
<div class="panel-body scenario-body">
|
109
|
+
<ul class="list-unstyled">'
|
110
|
+
scenario[:steps].each do |step|
|
111
|
+
output.puts '
|
112
|
+
<li>'+colorize(step)+'</li>'
|
113
|
+
end
|
77
114
|
|
78
|
-
|
115
|
+
output.puts '
|
116
|
+
</ul>
|
117
|
+
</div>
|
118
|
+
|
119
|
+
<div class="panel-footer scenario-screenshot">
|
120
|
+
<a href="../screenshots/'+feature[:filename]+'/'+scenario[:screenshot]+'"><img src="../screenshots/'+feature[:filename]+'/'+scenario[:screenshot]+'" /></a>
|
121
|
+
</div>
|
122
|
+
</div>'
|
123
|
+
|
124
|
+
end
|
79
125
|
|
80
126
|
output.puts '
|
81
|
-
|
82
|
-
|
127
|
+
</body>
|
128
|
+
</html>'
|
83
129
|
|
84
130
|
output.close
|
85
131
|
end
|
data/lib/aipim-rails/markdown.rb
CHANGED
@@ -11,12 +11,6 @@ module Markdown
|
|
11
11
|
#read_content(filename)
|
12
12
|
end
|
13
13
|
|
14
|
-
def self.read_line(file)
|
15
|
-
line = file.gets
|
16
|
-
line = line.gsub("\n", "").split(' ').join(' ') unless line.nil?
|
17
|
-
line
|
18
|
-
end
|
19
|
-
|
20
14
|
def self.write_feature(feature, output)
|
21
15
|
feature[:scenarios].each_with_index do |scenario, i|
|
22
16
|
output.puts "[#{i+1}. #{scenario[:name]}](#) "
|
@@ -35,25 +29,25 @@ module Markdown
|
|
35
29
|
screenshots = %x[\ls aipim/screenshots/#{filename}].split("\n")
|
36
30
|
|
37
31
|
output.puts ""
|
38
|
-
line = read_line(file)
|
32
|
+
line = ParserHelper.read_line(file)
|
39
33
|
while (line)
|
40
34
|
|
41
35
|
if !ParserHelper.is_comando?(line) && !(line.gsub(" ", "") == "")
|
42
36
|
output.puts " #{line} "
|
43
|
-
line = read_line(file)
|
37
|
+
line = ParserHelper.read_line(file)
|
44
38
|
|
45
39
|
elsif ParserHelper.is_marcacao?(line) && ParserHelper.is_screenshot?(line)
|
46
40
|
is_screenshot = true
|
47
|
-
line = read_line(file)
|
41
|
+
line = ParserHelper.read_line(file)
|
48
42
|
|
49
43
|
elsif ParserHelper.is_funcionalidade?(line)
|
50
44
|
output.puts "# #{ParserHelper.get_funcionalidade(line)} #"
|
51
|
-
line = read_line(file)
|
45
|
+
line = ParserHelper.read_line(file)
|
52
46
|
|
53
47
|
elsif ParserHelper.is_cenario?(line)
|
54
48
|
output.puts "> ## #{scenario_counter}. #{ParserHelper.get_cenario(line)} ##"
|
55
49
|
scenario_counter = scenario_counter+1
|
56
|
-
while ((line = read_line(file)) && !ParserHelper.is_comando?(line))
|
50
|
+
while ((line = ParserHelper.read_line(file)) && !ParserHelper.is_comando?(line))
|
57
51
|
output.puts "> #{line} " if !(line.gsub(" ", "") == "")
|
58
52
|
end
|
59
53
|
if is_screenshot
|
@@ -65,10 +59,10 @@ module Markdown
|
|
65
59
|
|
66
60
|
elsif ParserHelper.is_contexto?(line)
|
67
61
|
output.puts "## Contexto : #{ParserHelper.get_contexto(line)} ##"
|
68
|
-
line = read_line(file)
|
62
|
+
line = ParserHelper.read_line(file)
|
69
63
|
|
70
64
|
else
|
71
|
-
line = read_line(file)
|
65
|
+
line = ParserHelper.read_line(file)
|
72
66
|
end
|
73
67
|
end
|
74
68
|
file.close
|
data/lib/aipim-rails/parser.rb
CHANGED
@@ -6,71 +6,105 @@ module Parser
|
|
6
6
|
parser(filename)
|
7
7
|
end
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
|
10
|
+
def self.tag_screenshot(line,file,workset)
|
11
|
+
if line && ParserHelper.is_marcacao?(line) && ParserHelper.is_screenshot?(line)
|
12
|
+
workset[:screenshot] = true
|
13
|
+
line = ParserHelper::read_line(file)
|
14
|
+
end
|
15
|
+
return line, file, workset
|
13
16
|
end
|
14
17
|
|
15
|
-
def self.
|
18
|
+
def self.tag_feature(line,file,workset)
|
19
|
+
if line && ParserHelper.is_funcionalidade?(line)
|
20
|
+
workset[:feature_name] = ParserHelper.get_funcionalidade(line)
|
21
|
+
while ((line = ParserHelper::read_line(file)) && !ParserHelper.is_comando?(line))
|
22
|
+
workset[:feature_description] << line if !(line.gsub(" ", "") == "")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
return line, file, workset
|
26
|
+
end
|
16
27
|
|
17
|
-
|
28
|
+
def self.tag_context(line,file,workset)
|
29
|
+
if line && ParserHelper.is_contexto?(line)
|
30
|
+
while ((line = ParserHelper::read_line(file)) && !ParserHelper.is_comando?(line))
|
31
|
+
workset[:context_description] << line if !(line.gsub(" ", "") == "")
|
32
|
+
end
|
33
|
+
end
|
34
|
+
return line, file, workset
|
35
|
+
end
|
18
36
|
|
19
|
-
|
37
|
+
def self.tag_scenario(line,file,workset)
|
38
|
+
if line && ParserHelper.is_cenario?(line)
|
39
|
+
scenario_name = ParserHelper.get_cenario(line)
|
40
|
+
scenario_steps = []
|
41
|
+
while ((line = ParserHelper::read_line(file)) && !ParserHelper.is_comando?(line))
|
42
|
+
scenario_steps << line if !(line.gsub(" ", "") == "")
|
43
|
+
end
|
44
|
+
if workset[:screenshot]
|
45
|
+
screenshot = workset[:screenshots][workset[:screenshot_counter]].to_s
|
46
|
+
workset[:screenshot_counter] += 1
|
47
|
+
workset[:screenshot] = false
|
48
|
+
end
|
49
|
+
workset[:scenarios] << {name: scenario_name, steps: scenario_steps, screenshot: screenshot}
|
50
|
+
end
|
51
|
+
return line, file, workset
|
52
|
+
end
|
20
53
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
54
|
+
def self.parser(filename)
|
55
|
+
|
56
|
+
# Read input
|
57
|
+
file = read_file(filename)
|
58
|
+
|
59
|
+
# Get screenshot files
|
60
|
+
screenshots = get_screenshot_files(filename)
|
61
|
+
|
62
|
+
workset = {
|
63
|
+
screenshot: false,
|
64
|
+
screenshot_counter: 0,
|
65
|
+
screenshots: screenshots,
|
66
|
+
feature_name: nil,
|
67
|
+
feature_description: [],
|
68
|
+
context_name: nil,
|
69
|
+
context_description: [],
|
70
|
+
scenarios: []
|
71
|
+
}
|
25
72
|
|
26
|
-
line = read_line(file)
|
73
|
+
line = ParserHelper::read_line(file)
|
27
74
|
while (line)
|
28
75
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
elsif ParserHelper.is_contexto?(line)
|
40
|
-
while ((line = read_line(file)) && !ParserHelper.is_comando?(line))
|
41
|
-
context_description << line if !(line.gsub(" ", "") == "")
|
42
|
-
end
|
43
|
-
|
44
|
-
elsif ParserHelper.is_cenario?(line)
|
45
|
-
scenario_name = ParserHelper.get_cenario(line)
|
46
|
-
while ((line = read_line(file)) && !ParserHelper.is_comando?(line))
|
47
|
-
scenario_steps << line if !(line.gsub(" ", "") == "")
|
48
|
-
end
|
49
|
-
if is_screenshot
|
50
|
-
screenshot = screenshots[screenshot_counter].to_s
|
51
|
-
screenshot_counter = screenshot_counter+1
|
52
|
-
is_screenshot = false
|
53
|
-
end
|
54
|
-
scenarios << {name: scenario_name, steps: scenario_steps, screenshot: screenshot}
|
55
|
-
scenario_steps = []
|
56
|
-
screenshot = nil
|
57
|
-
|
58
|
-
else
|
59
|
-
line = read_line(file)
|
60
|
-
end
|
76
|
+
line, file, workset = tag_screenshot(line, file, workset)
|
77
|
+
|
78
|
+
line, file, workset = tag_feature(line, file, workset)
|
79
|
+
|
80
|
+
line, file, workset = tag_context(line, file, workset)
|
81
|
+
|
82
|
+
line, file, workset = tag_scenario(line, file, workset)
|
83
|
+
|
84
|
+
line = ParserHelper::read_line(file) unless ParserHelper.is_comando?(line)
|
61
85
|
end
|
62
86
|
file.close
|
63
87
|
|
64
88
|
feature = {
|
65
|
-
feature_name: feature_name,
|
66
|
-
feature_description: feature_description,
|
67
|
-
context_name: context_name,
|
68
|
-
context_description: context_description,
|
69
|
-
scenarios: scenarios,
|
89
|
+
feature_name: workset[:feature_name],
|
90
|
+
feature_description: workset[:feature_description],
|
91
|
+
context_name: workset[:context_name],
|
92
|
+
context_description: workset[:context_description],
|
93
|
+
scenarios: workset[:scenarios],
|
70
94
|
filename: filename
|
71
95
|
}
|
72
96
|
|
73
97
|
|
74
98
|
end
|
75
99
|
|
100
|
+
def self.read_file(filename)
|
101
|
+
filename = "features/"+filename
|
102
|
+
raise "FileNotFound" unless File.exists?(filename)
|
103
|
+
File.open(filename, "r")
|
104
|
+
end
|
105
|
+
|
106
|
+
def self.get_screenshot_files(filename)
|
107
|
+
%x[\ls aipim/screenshots/#{filename}].split("\n")
|
108
|
+
end
|
109
|
+
|
76
110
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module ParserHelper
|
2
2
|
|
3
3
|
def self.is_comando?(line)
|
4
|
-
is_funcionalidade?(line) || is_cenario?(line) || is_contexto?(line) || is_marcacao?(line)
|
4
|
+
is_funcionalidade?(line) || is_cenario?(line) || is_contexto?(line) || is_marcacao?(line)
|
5
5
|
end
|
6
6
|
|
7
7
|
def self.is_funcionalidade?(line)
|
@@ -40,5 +40,10 @@ module ParserHelper
|
|
40
40
|
return true if line =~ /#.*/
|
41
41
|
end
|
42
42
|
|
43
|
+
def self.read_line(file)
|
44
|
+
line = file.gets
|
45
|
+
line = line.gsub("\n", "").split(' ').join(' ') unless line.nil?
|
46
|
+
line
|
47
|
+
end
|
43
48
|
|
44
49
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
body{
|
2
|
+
padding-left: 20%;
|
3
|
+
padding-right: 20%;
|
4
|
+
padding-top: 10px;
|
5
|
+
}
|
6
|
+
|
7
|
+
.tag-given{
|
8
|
+
color:green;
|
9
|
+
font-weight:bold;
|
10
|
+
}
|
11
|
+
|
12
|
+
.tag-then{
|
13
|
+
color:red;
|
14
|
+
font-weight:bold;
|
15
|
+
}
|
16
|
+
|
17
|
+
.tag-when{
|
18
|
+
color:purple;
|
19
|
+
font-weight:bold;
|
20
|
+
}
|
21
|
+
|
22
|
+
.tag-and{
|
23
|
+
color:yellow;
|
24
|
+
font-weight:bold;
|
25
|
+
}
|
26
|
+
|
27
|
+
.tag-quotes{
|
28
|
+
font-weight:bold;
|
29
|
+
}
|
30
|
+
|
31
|
+
.scenario-screenshot img{
|
32
|
+
width:100%;
|
33
|
+
}
|
34
|
+
|
35
|
+
.features-link{
|
36
|
+
text-indent: 25px;
|
37
|
+
}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
$(document).ready(function(){
|
2
|
+
$('a').click(function(){
|
3
|
+
var titulo = $(this).html();
|
4
|
+
if (titulo == "[índice]") {
|
5
|
+
$('html, body').animate({
|
6
|
+
scrollTop: 0
|
7
|
+
}, 1000);
|
8
|
+
} else {
|
9
|
+
$('html, body').animate({
|
10
|
+
scrollTop: $('h3').filter(':contains("'+titulo+'")').offset().top - 30
|
11
|
+
}, 1000);
|
12
|
+
}
|
13
|
+
});
|
14
|
+
});
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aipim-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.157
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Facta TI
|
@@ -11,7 +11,21 @@ cert_chain: []
|
|
11
11
|
date: 2014-11-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: cucumber-rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: selenium-webdriver
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
16
30
|
requirements:
|
17
31
|
- - '>='
|
@@ -38,6 +52,8 @@ files:
|
|
38
52
|
- lib/webdriver/screenshot.rb
|
39
53
|
- lib/assets/bootstrap.min.css
|
40
54
|
- lib/assets/jquery-1.9.1.js
|
55
|
+
- lib/assets/costum.css
|
56
|
+
- lib/assets/costum.js
|
41
57
|
- lib/aipim-rails/convert_to_html.rb
|
42
58
|
- bin/aipim
|
43
59
|
homepage: http://rubygems.org/gems/aipim
|