Almirah 0.2.3 → 0.2.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/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
|
|