Almirah 0.2.3 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/almirah/doc_fabric.rb +21 -2
- data/lib/almirah/doc_items/controlled_paragraph.rb +100 -79
- data/lib/almirah/doc_items/controlled_table.rb +180 -137
- data/lib/almirah/doc_items/controlled_table_row.rb +3 -3
- data/lib/almirah/doc_items/markdown_list.rb +2 -2
- data/lib/almirah/doc_items/markdown_table.rb +1 -1
- data/lib/almirah/doc_items/paragraph.rb +1 -1
- data/lib/almirah/doc_parser.rb +6 -6
- data/lib/almirah/doc_types/base_document.rb +1 -0
- data/lib/almirah/doc_types/coverage.rb +4 -1
- data/lib/almirah/doc_types/index.rb +9 -1
- data/lib/almirah/doc_types/traceability.rb +6 -2
- data/lib/almirah/dom/doc_section.rb +21 -24
- data/lib/almirah/dom/document.rb +66 -57
- data/lib/almirah/project.rb +257 -275
- data/lib/almirah/templates/page.html +3 -3
- data/lib/almirah/templates/scripts/main.js +34 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2fa95a589e6285719010318ec666da5cf309ef511cd69cb2ffc6629464d64ae0
|
4
|
+
data.tar.gz: f2c8fd5747f9c5e53417744eac9caa15e2c313987d94c36b8d446434089f14fd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e0071aa202dac9bd73495fb389db3008f83ff5dff9bd61d8d4f957abb935a1727362e51a3e2c6418a7a388ea28d6baef344500ec9ec46256b803982dbd5275cd
|
7
|
+
data.tar.gz: bcfbdf1cbca81f17d3e305723c111a38327ca16f3a8e8c28795e3135041e8a97d64e0baddd1780ae826bec85ddb0cbcf5533908506debde61d1d27e31caf02bf
|
data/lib/almirah/doc_fabric.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
require_relative 'doc_types/base_document'
|
2
2
|
require_relative 'doc_types/specification'
|
3
3
|
require_relative 'doc_types/protocol'
|
4
|
+
require_relative 'doc_types/coverage'
|
4
5
|
require_relative 'doc_parser'
|
5
6
|
require_relative 'dom/document'
|
7
|
+
require_relative 'doc_items/heading'
|
6
8
|
|
7
9
|
class DocFabric
|
8
10
|
@@color_index = 0
|
@@ -31,6 +33,24 @@ class DocFabric
|
|
31
33
|
doc
|
32
34
|
end
|
33
35
|
|
36
|
+
def self.create_coverage_matrix(specification)
|
37
|
+
doc = Coverage.new specification
|
38
|
+
Heading.reset_global_section_number
|
39
|
+
doc.headings << Heading.new(doc, doc.title, 0)
|
40
|
+
# Build dom
|
41
|
+
doc.dom = Document.new(doc.headings)
|
42
|
+
doc
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.create_traceability_document(top_document, bottom_document)
|
46
|
+
doc = Traceability.new top_document, bottom_document
|
47
|
+
Heading.reset_global_section_number
|
48
|
+
doc.headings << Heading.new(doc, doc.title, 0)
|
49
|
+
# Build dom
|
50
|
+
doc.dom = Document.new(doc.headings)
|
51
|
+
doc
|
52
|
+
end
|
53
|
+
|
34
54
|
def self.parse_document(doc)
|
35
55
|
|
36
56
|
file = File.open(doc.path)
|
@@ -40,7 +60,6 @@ class DocFabric
|
|
40
60
|
DocParser.parse(doc, file_lines)
|
41
61
|
|
42
62
|
# Build dom
|
43
|
-
doc.dom = Document.new(doc.headings) if doc.is_a?(Specification)
|
44
|
-
|
63
|
+
doc.dom = Document.new(doc.headings) if doc.is_a?(Specification) || doc.is_a?(Protocol)
|
45
64
|
end
|
46
65
|
end
|
@@ -1,91 +1,112 @@
|
|
1
|
-
require_relative
|
1
|
+
require_relative 'paragraph'
|
2
2
|
|
3
3
|
class ControlledParagraph < Paragraph
|
4
|
+
attr_accessor :id, :up_link_ids, :down_links, :coverage_links
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
def initialize(doc, text, id)
|
7
|
+
super(doc, text)
|
8
|
+
@parent_heading = doc.headings[-1]
|
9
|
+
@id = id
|
10
|
+
@up_link_ids = nil
|
11
|
+
@down_links = nil
|
12
|
+
@coverage_links = nil
|
13
|
+
end
|
9
14
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
@coverage_links = nil
|
15
|
+
def to_html
|
16
|
+
s = ''
|
17
|
+
unless @@html_table_render_in_progress
|
18
|
+
s += "<table class=\"controlled\">\n"
|
19
|
+
s += "\t<thead> <th>#</th> <th></th> <th title=\"Up-links\">UL</th> <th title=\"Down-links\">DL</th> \
|
20
|
+
<th title=\"Test Coverage\">COV</th> </thead>\n"
|
21
|
+
@@html_table_render_in_progress = true # rubocop:disable Style/ClassVars
|
18
22
|
end
|
23
|
+
f_text = format_string(@text)
|
24
|
+
s += "\t<tr>\n"
|
25
|
+
s += "\t\t<td class=\"item_id\"> \
|
26
|
+
<a name=\"#{@id}\" id=\"#{@id}\" href=\"##{@id}\" title=\"Paragraph ID\">#{@id}</a></td>\n"
|
27
|
+
s += "\t\t<td class=\"item_text\">#{f_text}</td>\n"
|
19
28
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
s += "\t<thead> <th>#</th> <th></th> <th title=\"Up-links\">UL</th> <th title=\"Down-links\">DL</th> <th title=\"Test Coverage\">COV</th> </thead>\n"
|
25
|
-
@@html_table_render_in_progress = true
|
29
|
+
if @up_link_ids
|
30
|
+
if @up_link_ids.length == 1
|
31
|
+
if tmp = /^([a-zA-Z]+)-\d+/.match(@up_link_ids[0])
|
32
|
+
up_link_doc_name = tmp[1].downcase
|
26
33
|
end
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
s += "<div id=\"DLS_#{@id}\" style=\"display: none;\">"
|
44
|
-
@up_link_ids.each do |lnk|
|
45
|
-
if tmp = /^([a-zA-Z]+)[-]\d+/.match(lnk)
|
46
|
-
up_link_doc_name = tmp[1].downcase
|
47
|
-
end
|
48
|
-
s += "\t\t\t<a href=\"./../#{up_link_doc_name}/#{up_link_doc_name}.html##{lnk}\" class=\"external\" title=\"Linked to\">#{lnk}</a>\n<br>"
|
49
|
-
end
|
50
|
-
s += "</div>"
|
51
|
-
s += "</td>\n"
|
52
|
-
end
|
53
|
-
else
|
54
|
-
s += "\t\t<td class=\"item_id\"></td>\n"
|
34
|
+
s += "\t\t<td class=\"item_id\">\
|
35
|
+
<a href=\"./../#{up_link_doc_name}/#{up_link_doc_name}.html##{@up_link_ids[0]}\" \
|
36
|
+
class=\"external\" title=\"Linked to\">#{@up_link_ids[0]}</a></td>\n"
|
37
|
+
else
|
38
|
+
s += "\t\t<td class=\"item_id\">"
|
39
|
+
s += "<div id=\"UL_#{@id}\" style=\"display: block;\">"
|
40
|
+
s += "<a href=\"#\" onclick=\"upLink_OnClick(this.parentElement); return false;\" \
|
41
|
+
class=\"external\" title=\"Number of up-links\">#{@up_link_ids.length}</a>"
|
42
|
+
s += '</div>'
|
43
|
+
s += "<div id=\"ULS_#{@id}\" style=\"display: none;\">"
|
44
|
+
@up_link_ids.each do |lnk|
|
45
|
+
if tmp = /^([a-zA-Z]+)-\d+/.match(lnk)
|
46
|
+
up_link_doc_name = tmp[1].downcase
|
47
|
+
end
|
48
|
+
s += "\t\t\t<a href=\"./../#{up_link_doc_name}/#{up_link_doc_name}.html##{lnk}\" \
|
49
|
+
class=\"external\" title=\"Linked to\">#{lnk}</a>\n<br>"
|
55
50
|
end
|
51
|
+
s += '</div>'
|
52
|
+
s += "</td>\n"
|
53
|
+
end
|
54
|
+
else
|
55
|
+
s += "\t\t<td class=\"item_id\"></td>\n"
|
56
|
+
end
|
56
57
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
else
|
76
|
-
s += "\t\t<td class=\"item_id\"></td>\n"
|
58
|
+
if @down_links
|
59
|
+
if tmp = /^([a-zA-Z]+)-\d+/.match(@down_links[0].id) # guessing that all the links refer to one document
|
60
|
+
down_link_doc_name = tmp[1].downcase
|
61
|
+
end
|
62
|
+
if @down_links.length == 1
|
63
|
+
s += "\t\t<td class=\"item_id\">\
|
64
|
+
<a href=\"./../#{down_link_doc_name}/#{down_link_doc_name}.html##{@down_links[0].id}\" \
|
65
|
+
class=\"external\" title=\"Referenced in\">#{@down_links[0].id}</a></td>\n"
|
66
|
+
else
|
67
|
+
s += "\t\t<td class=\"item_id\">"
|
68
|
+
s += "<div id=\"DL_#{@id}\" style=\"display: block;\">"
|
69
|
+
s += "<a href=\"#\" onclick=\"downlink_OnClick(this.parentElement); return false;\" \
|
70
|
+
class=\"external\" title=\"Number of references\">#{@down_links.length}</a>"
|
71
|
+
s += '</div>'
|
72
|
+
s += "<div id=\"DLS_#{@id}\" style=\"display: none;\">"
|
73
|
+
@down_links.each do |lnk|
|
74
|
+
s += "\t\t\t<a href=\"./../#{lnk.parent_doc.id}/#{lnk.parent_doc.id}.html##{lnk.id}\" \
|
75
|
+
class=\"external\" title=\"Referenced in\">#{lnk.id}</a>\n<br>"
|
77
76
|
end
|
77
|
+
s += '</div>'
|
78
|
+
s += "</td>\n"
|
79
|
+
end
|
80
|
+
else
|
81
|
+
s += "\t\t<td class=\"item_id\"></td>\n"
|
82
|
+
end
|
78
83
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
84
|
+
if @coverage_links
|
85
|
+
if tmp = /^(.+)[.]\d+/.match(@coverage_links[0].id) # guessing that all the links refer to one document
|
86
|
+
cov_link_doc_name = tmp[1].downcase
|
87
|
+
end
|
88
|
+
if @coverage_links.length == 1
|
89
|
+
s += "\t\t<td class=\"item_id\">\
|
90
|
+
<a href=\"./../../tests/protocols/#{cov_link_doc_name}/#{cov_link_doc_name}.html\" \
|
91
|
+
class=\"external\" title=\"Number of verification steps\">#{@coverage_links[0].id}</a></td>\n"
|
92
|
+
else
|
93
|
+
s += "\t\t<td class=\"item_id\">"
|
94
|
+
s += "<div id=\"COV_#{@id}\" style=\"display: block;\">"
|
95
|
+
s += "<a href=\"#\" onclick=\"coverageLink_OnClick(this.parentElement); return false;\" \
|
96
|
+
class=\"external\" title=\"Number of verification steps\">#{@coverage_links.length}</a>"
|
97
|
+
s += '</div>'
|
98
|
+
s += "<div id=\"COVS_#{@id}\" style=\"display: none;\">"
|
99
|
+
@coverage_links.each do |lnk|
|
100
|
+
s += "\t\t\t<a href=\"./../../tests/protocols/#{lnk.parent_doc.id}/#{lnk.parent_doc.id}.html##{lnk.id}\" \
|
101
|
+
class=\"external\" title=\"Covered in\">#{lnk.id}</a>\n<br>"
|
86
102
|
end
|
87
|
-
s +=
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
103
|
+
s += '</div>'
|
104
|
+
s += "</td>\n"
|
105
|
+
end
|
106
|
+
else
|
107
|
+
s += "\t\t<td class=\"item_id\"></td>\n"
|
108
|
+
end
|
109
|
+
s += "\t</tr>\n"
|
110
|
+
s
|
111
|
+
end
|
112
|
+
end
|
@@ -1,181 +1,224 @@
|
|
1
|
-
require_relative
|
2
|
-
require_relative
|
1
|
+
require_relative 'controlled_table_row'
|
2
|
+
require_relative 'text_line'
|
3
3
|
|
4
|
-
class ControlledTableColumn < TextLine
|
4
|
+
class ControlledTableColumn < TextLine # rubocop:disable Style/Documentation
|
5
|
+
attr_accessor :text
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
@text = text.strip
|
10
|
-
end
|
7
|
+
def initialize(text) # rubocop:disable Lint/MissingSuper
|
8
|
+
@text = text.strip
|
9
|
+
end
|
11
10
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
11
|
+
def to_html
|
12
|
+
f_text = format_string(@text)
|
13
|
+
"\t\t<td>#{f_text}</td>\n\r"
|
14
|
+
end
|
16
15
|
end
|
17
16
|
|
18
|
-
|
19
17
|
class RegualrColumn < ControlledTableColumn
|
20
|
-
|
21
18
|
end
|
22
19
|
|
20
|
+
class TestStepNumberColumn < ControlledTableColumn # rubocop:disable Style/Documentation
|
21
|
+
attr_accessor :step_number, :row_id
|
23
22
|
|
24
|
-
|
23
|
+
def initialize(text)
|
24
|
+
super
|
25
|
+
@step_number = text.to_i
|
26
|
+
@row_id = ''
|
27
|
+
end
|
25
28
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
@step_number = text.to_i
|
32
|
-
@text = text
|
33
|
-
@row_id = ""
|
34
|
-
end
|
29
|
+
def to_html
|
30
|
+
"\t\t<td style=\"text-align: center;\"><a name=\"#{@row_id}\" id=\"#{@row_id}\" \
|
31
|
+
href=\"##{@row_id}\">#{@text}</a></td>\n\r"
|
32
|
+
end
|
33
|
+
end
|
35
34
|
|
36
|
-
|
37
|
-
|
35
|
+
class TestStepResultColumn < ControlledTableColumn # rubocop:disable Style/Documentation
|
36
|
+
def to_html
|
37
|
+
f_text = format_string(@text)
|
38
|
+
case @text.downcase
|
39
|
+
when 'pass'
|
40
|
+
"\t\t<td style=\"background-color: #cfc;\">#{f_text}</td>\n\r"
|
41
|
+
when 'fail'
|
42
|
+
"\t\t<td style=\"background-color: #fcc;\">#{f_text}</td>\n\r"
|
43
|
+
else
|
44
|
+
"\t\t<td>#{f_text}</td>\n\r"
|
38
45
|
end
|
39
|
-
end
|
40
|
-
|
41
|
-
|
42
|
-
class TestStepResultColumn < ControlledTableColumn
|
46
|
+
end
|
47
|
+
end
|
43
48
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
49
|
+
class TestStepReferenceColumn < ControlledTableColumn # rubocop:disable Style/Documentation
|
50
|
+
attr_accessor :up_link_ids, :up_link_doc_ids, :parent_row
|
51
|
+
|
52
|
+
def initialize(parent_row, text)
|
53
|
+
super(text)
|
54
|
+
@up_link_ids = nil
|
55
|
+
@up_link_doc_ids = {}
|
56
|
+
@parent_row = parent_row
|
57
|
+
|
58
|
+
up_links = nil
|
59
|
+
|
60
|
+
# check if it contains the uplink (one or many)
|
61
|
+
first_pos = text.length # for trailing commas
|
62
|
+
tmp = text.scan(/(>\[(?>[^\[\]]|\g<0>)*\])/) # >[SRS-001], >[SYS-002]
|
63
|
+
unless tmp.empty?
|
64
|
+
up_links = []
|
65
|
+
tmp.each do |ul|
|
66
|
+
lnk = ul[0]
|
67
|
+
# do not add links for the self document
|
68
|
+
doc_id = /([a-zA-Z]+)-\d+/.match(lnk) # SRS
|
69
|
+
up_links << lnk.upcase if doc_id # (doc_id) and (doc_id[1].downcase != doc.id.downcase)
|
70
|
+
# try to find the real end of text
|
71
|
+
pos = text.index(lnk)
|
72
|
+
first_pos = pos if pos < first_pos
|
73
|
+
# remove uplink from text
|
74
|
+
text = text.split(lnk, 1).join('')
|
75
|
+
end
|
76
|
+
# remove trailing commas and spaces
|
77
|
+
if text.length > first_pos
|
78
|
+
first_pos -= 1
|
79
|
+
text = text[0..first_pos].strip
|
80
|
+
end
|
53
81
|
end
|
54
|
-
end
|
55
82
|
|
83
|
+
if up_links # rubocop:disable Style/GuardClause
|
84
|
+
up_links.uniq! # remove duplicates
|
85
|
+
# doc.items_with_uplinks_number += 1 # for statistics
|
86
|
+
up_links.each do |ul|
|
87
|
+
next unless tmp = />\[(\S*)\]$/.match(ul) # >[SRS-001]
|
56
88
|
|
57
|
-
|
89
|
+
up_link_id = tmp[1]
|
58
90
|
|
59
|
-
|
60
|
-
attr_accessor :up_link_doc_id
|
91
|
+
@up_link_ids ||= []
|
61
92
|
|
62
|
-
|
63
|
-
|
64
|
-
@up_link = nil
|
65
|
-
@up_link_doc_id = nil
|
93
|
+
@up_link_ids.append(up_link_id)
|
66
94
|
|
67
|
-
if tmp =
|
68
|
-
|
69
|
-
if tmp = /^([a-zA-Z]+)[-]\d+/.match(@up_link) # SRS
|
70
|
-
@up_link_doc_id = tmp[1].downcase
|
71
|
-
end
|
95
|
+
if tmp = /^([a-zA-Z]+)-\d+/.match(up_link_id) # SRS
|
96
|
+
@up_link_doc_ids[tmp[1].downcase.to_s] = tmp[1].downcase # multiple documents could be up-linked
|
72
97
|
end
|
98
|
+
end
|
73
99
|
end
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
100
|
+
end
|
101
|
+
|
102
|
+
def to_html # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
|
103
|
+
s = ''
|
104
|
+
if @up_link_ids
|
105
|
+
if @up_link_ids.length == 1
|
106
|
+
if tmp = /^([a-zA-Z]+)-\d+/.match(@up_link_ids[0])
|
107
|
+
up_link_doc_name = tmp[1].downcase
|
108
|
+
end
|
109
|
+
s += "\t\t<td class=\"item_id\" style=\"text-align: center;\">\
|
110
|
+
<a href=\"./../../../specifications/#{up_link_doc_name}/#{up_link_doc_name}.html##{@up_link_ids[0]}\" \
|
111
|
+
class=\"external\" title=\"Linked to\">#{@up_link_ids[0]}</a></td>\n"
|
112
|
+
else
|
113
|
+
s += "\t\t<td class=\"item_id\" style=\"text-align: center;\">"
|
114
|
+
s += "<div id=\"COV_#{@parent_row.id}\" style=\"display: block;\">"
|
115
|
+
s += "<a href=\"#\" onclick=\"coverageLink_OnClick(this.parentElement); return false;\" \
|
116
|
+
class=\"external\" title=\"Number of verified items\">#{@up_link_ids.length}</a>"
|
117
|
+
s += '</div>'
|
118
|
+
s += "<div id=\"COVS_#{@parent_row.id}\" style=\"display: none;\">"
|
119
|
+
@up_link_ids.each do |lnk|
|
120
|
+
if tmp = /^([a-zA-Z]+)-\d+/.match(lnk)
|
121
|
+
up_link_doc_name = tmp[1].downcase
|
122
|
+
end
|
123
|
+
s += "\t\t\t<a href=\"./../../../specifications/#{up_link_doc_name}/#{up_link_doc_name}.html##{lnk}\" \
|
124
|
+
class=\"external\" title=\"Verifies\">#{lnk}</a>\n<br>"
|
80
125
|
end
|
126
|
+
s += '</div>'
|
127
|
+
s += "</td>\n"
|
128
|
+
end
|
129
|
+
else
|
130
|
+
"\t\t<td style=\"text-align: center;\"></td>\n\r"
|
81
131
|
end
|
82
|
-
|
132
|
+
end
|
83
133
|
end
|
84
134
|
|
135
|
+
class ControlledTable < DocItem # rubocop:disable Style/Documentation
|
136
|
+
attr_accessor :column_names, :rows, :is_separator_detected
|
137
|
+
|
138
|
+
def initialize(doc, markdown_table) # rubocop:disable Lint/MissingSuper
|
139
|
+
@parent_doc = doc
|
140
|
+
@parent_heading = doc.headings[-1]
|
85
141
|
|
86
|
-
|
142
|
+
@column_names = markdown_table.column_names
|
143
|
+
@is_separator_detected = markdown_table.is_separator_detected
|
144
|
+
# copy and re-format existing rows
|
145
|
+
@rows = []
|
87
146
|
|
88
|
-
|
89
|
-
|
90
|
-
|
147
|
+
markdown_table.rows.each do |r|
|
148
|
+
@rows.append(format_columns(r))
|
149
|
+
end
|
150
|
+
end
|
91
151
|
|
92
|
-
|
93
|
-
|
94
|
-
@parent_heading = doc.headings[-1]
|
152
|
+
def add_row(row)
|
153
|
+
columns = row.split('|')
|
95
154
|
|
96
|
-
|
97
|
-
@is_separator_detected = markdown_table.is_separator_detected
|
98
|
-
# copy and re-format existing rows
|
99
|
-
@rows = Array.new
|
155
|
+
@rows.append(format_columns(columns))
|
100
156
|
|
101
|
-
|
102
|
-
|
103
|
-
end
|
104
|
-
end
|
157
|
+
true
|
158
|
+
end
|
105
159
|
|
106
|
-
|
160
|
+
def format_columns(columns) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
|
161
|
+
new_row = ControlledTableRow.new
|
162
|
+
new_row.parent_doc = @parent_doc
|
107
163
|
|
108
|
-
|
164
|
+
columns.each_with_index do |element, index|
|
165
|
+
if index.zero? # it is expected that test step id is placed in the first columl
|
109
166
|
|
110
|
-
|
167
|
+
col = TestStepNumberColumn.new element
|
168
|
+
new_row.columns.append col
|
169
|
+
new_row.id = "#{@parent_doc.id}.#{col.text}"
|
170
|
+
col.row_id = new_row.id
|
111
171
|
|
112
|
-
|
113
|
-
end
|
172
|
+
elsif index + 1 == columns.length # it is expected that a link is placed to the last column only
|
114
173
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
if index == 0 # it is expected that test step id is placed in the first columl
|
123
|
-
|
124
|
-
col = TestStepNumberColumn.new element
|
125
|
-
new_row.columns.append col
|
126
|
-
new_row.id = @parent_doc.id + '.' + col.text
|
127
|
-
col.row_id = new_row.id
|
128
|
-
|
129
|
-
elsif index + 1 == columns.length # it is expected that a link is placed to the last column only
|
130
|
-
|
131
|
-
col = TestStepReferenceColumn.new element
|
132
|
-
new_row.columns.append col
|
133
|
-
# save uplink key but do not rewrite
|
134
|
-
if col.up_link_doc_id != nil
|
135
|
-
|
136
|
-
@parent_doc.up_link_docs[ col.up_link_doc_id.to_s ] = col.up_link_doc_id
|
137
|
-
|
138
|
-
# save reference to the test step
|
139
|
-
new_row.up_link = col.up_link
|
140
|
-
@parent_doc.controlled_items.append new_row
|
141
|
-
end
|
142
|
-
|
143
|
-
elsif index + 2 == columns.length # it is expected that test step result is placed to the pre-last column only
|
144
|
-
|
145
|
-
col = TestStepResultColumn.new element
|
146
|
-
new_row.columns.append col
|
147
|
-
|
148
|
-
else
|
149
|
-
col = RegualrColumn.new element
|
150
|
-
new_row.columns.append col
|
151
|
-
end
|
152
|
-
end
|
153
|
-
return new_row
|
154
|
-
end
|
174
|
+
col = TestStepReferenceColumn.new(new_row, element)
|
175
|
+
new_row.columns << col
|
176
|
+
# save uplink key but do not rewrite
|
177
|
+
unless col.up_link_doc_ids.empty?
|
178
|
+
col.up_link_doc_ids.each do |key, value|
|
179
|
+
@parent_doc.up_link_docs[key] = value
|
155
180
|
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
@@html_table_render_in_progress = false
|
181
|
+
# save reference to the test step
|
182
|
+
new_row.up_link_ids = col.up_link_ids
|
183
|
+
@parent_doc.controlled_items.append new_row
|
184
|
+
end
|
161
185
|
end
|
162
|
-
|
163
|
-
s += "<table class=\"markdown_table\">\n"
|
164
|
-
s += "\t<thead>"
|
165
186
|
|
166
|
-
|
167
|
-
s += " <th>#{h}</th>"
|
168
|
-
end
|
187
|
+
elsif index + 2 == columns.length # it is expected that test step result is placed to the pre-last column only
|
169
188
|
|
170
|
-
|
189
|
+
col = TestStepResultColumn.new element
|
190
|
+
new_row.columns.append col
|
171
191
|
|
172
|
-
|
173
|
-
|
174
|
-
|
192
|
+
else
|
193
|
+
col = RegualrColumn.new element
|
194
|
+
new_row.columns.append col
|
195
|
+
end
|
196
|
+
end
|
197
|
+
new_row
|
198
|
+
end
|
199
|
+
|
200
|
+
def to_html # rubocop:disable Metrics/MethodLength
|
201
|
+
s = ''
|
202
|
+
if @@html_table_render_in_progress
|
203
|
+
s += "</table>\n"
|
204
|
+
@@html_table_render_in_progress = false # rubocop:disable Style/ClassVars
|
205
|
+
end
|
175
206
|
|
176
|
-
|
207
|
+
s += "<table class=\"markdown_table\">\n"
|
208
|
+
s += "\t<thead>"
|
177
209
|
|
178
|
-
|
210
|
+
@column_names.each do |h|
|
211
|
+
s += " <th>#{h}</th>"
|
179
212
|
end
|
180
213
|
|
181
|
-
|
214
|
+
s += " </thead>\n"
|
215
|
+
|
216
|
+
@rows.each do |row|
|
217
|
+
s += row.to_html
|
218
|
+
end
|
219
|
+
|
220
|
+
s += "</table>\n"
|
221
|
+
|
222
|
+
s
|
223
|
+
end
|
224
|
+
end
|
@@ -3,13 +3,13 @@ require_relative "doc_item"
|
|
3
3
|
class ControlledTableRow < DocItem
|
4
4
|
|
5
5
|
attr_accessor :id
|
6
|
-
attr_accessor :
|
6
|
+
attr_accessor :up_link_ids
|
7
7
|
attr_accessor :columns
|
8
8
|
|
9
9
|
def initialize
|
10
10
|
@id = ""
|
11
|
-
@
|
12
|
-
@columns =
|
11
|
+
@up_link_ids = nil
|
12
|
+
@columns = []
|
13
13
|
end
|
14
14
|
|
15
15
|
def to_html
|
@@ -21,7 +21,7 @@ class MarkdownList < DocItem
|
|
21
21
|
@@lists_stack.push(self)
|
22
22
|
end
|
23
23
|
|
24
|
-
def
|
24
|
+
def add_row(raw_text)
|
25
25
|
pos = calculate_text_position(raw_text)
|
26
26
|
row = raw_text[pos..-1]
|
27
27
|
|
@@ -44,7 +44,7 @@ class MarkdownList < DocItem
|
|
44
44
|
prev_lists_stack_item.rows[-1] = nested_list
|
45
45
|
end
|
46
46
|
|
47
|
-
nested_list.
|
47
|
+
nested_list.add_row(raw_text)
|
48
48
|
|
49
49
|
elsif pos < @@lists_stack[-1].indent_position
|
50
50
|
|