Almirah 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -7,7 +7,7 @@ class Paragraph < DocItem
7
7
  def initialize(doc, text)
8
8
  @parent_doc = doc
9
9
  @parent_heading = doc.headings[-1]
10
- @text = text
10
+ @text = text.strip
11
11
  end
12
12
 
13
13
  def getTextWithoutSpaces
@@ -153,10 +153,10 @@ class DocParser
153
153
  row = res[2]
154
154
 
155
155
  if temp_md_list
156
- temp_md_list.addRow(s)
156
+ temp_md_list.add_row(s)
157
157
  else
158
158
  item = MarkdownList.new(doc, false)
159
- item.addRow(s)
159
+ item.add_row(s)
160
160
  temp_md_list = item
161
161
  end
162
162
 
@@ -167,10 +167,10 @@ class DocParser
167
167
  row = res[1]
168
168
 
169
169
  if temp_md_list
170
- temp_md_list.addRow(s)
170
+ temp_md_list.add_row(s)
171
171
  else
172
172
  item = MarkdownList.new(doc, true)
173
- item.addRow(s)
173
+ item.add_row(s)
174
174
  temp_md_list = item
175
175
  end
176
176
 
@@ -208,7 +208,7 @@ class DocParser
208
208
  temp_md_table = ControlledTable.new(doc, temp_md_table)
209
209
  end
210
210
  end
211
- temp_md_table.addRow(row)
211
+ temp_md_table.add_row(row)
212
212
  else
213
213
  # replece table heading with regular paragraph
214
214
  item = Paragraph.new(doc, temp_md_table.heading_row)
@@ -279,7 +279,7 @@ class DocParser
279
279
  temp_md_table = process_temp_table(doc, temp_md_table)
280
280
  if temp_md_list
281
281
  if MarkdownList.unordered_list_item?(s) || MarkdownList.ordered_list_item?(s)
282
- temp_md_list.addRow(s)
282
+ temp_md_list.add_row(s)
283
283
  next
284
284
  else
285
285
  doc.items.append temp_md_list
@@ -4,6 +4,7 @@ class BaseDocument
4
4
  attr_accessor :title
5
5
  attr_accessor :id
6
6
  attr_accessor :dom
7
+ attr_accessor :headings
7
8
 
8
9
  def initialize()
9
10
  @items = Array.new
@@ -4,14 +4,16 @@ class Coverage < BaseDocument
4
4
 
5
5
  attr_accessor :top_doc
6
6
  attr_accessor :bottom_doc
7
+ attr_accessor :covered_items
7
8
 
8
9
  def initialize(top_doc)
9
10
  super()
10
11
  @top_doc = top_doc
11
- @bottom_doc = bottom_doc
12
+ @bottom_doc = nil
12
13
 
13
14
  @id = top_doc.id + "-" + "tests"
14
15
  @title = "Coverage Matrix: " + @id
16
+ @covered_items = {}
15
17
  end
16
18
 
17
19
  def to_console
@@ -64,6 +66,7 @@ class Coverage < BaseDocument
64
66
  s += "\t\t<td class=\"item_id\" #{test_step_color}><a href=\"./../../tests/protocols/#{bottom_item.parent_doc.id}/#{bottom_item.parent_doc.id}.html##{bottom_item.id}\" class=\"external\">#{bottom_item.id}</a></td>\n"
65
67
  s += "\t\t<td class=\"item_text\" style='width: 42%;'>#{bottom_item.columns[1].text}</td>\n"
66
68
  s += "\t</tr>\n"
69
+ @covered_items[top_item.id.to_s.downcase] = top_item
67
70
  end
68
71
  else
69
72
  s += "\t<tr>\n"
@@ -136,6 +136,9 @@ class Index < BaseDocument
136
136
  s += "<table class=\"controlled\">\n"
137
137
  s += "\t<thead>\n"
138
138
  s += "\t\t<th>Title</th>\n"
139
+ s += "\t\t<th title=\"The ratio of Controlled Paragraphs mentioned in test protocols \
140
+ and total number of Controlled Paragraphs\">Coverage</th>\n"
141
+ s += "\t\t<th title=\"Numbers of passed and failed test steps\">Test Results</th>\n"
139
142
  s += "\t\t<th>Specification Covered</th>\n"
140
143
  s += "</thead>\n"
141
144
  html_rows.append s
@@ -144,8 +147,13 @@ class Index < BaseDocument
144
147
 
145
148
  sorted_items.each do |doc|
146
149
  s = "\t<tr>\n"
150
+ coverage = doc.covered_items.length.to_f / doc.top_doc.controlled_items.length * 100.0
147
151
  s += "\t\t<td class=\"item_text\" style='padding: 5px;'><a href=\"./specifications/#{doc.id}/#{doc.id}.html\" class=\"external\">#{doc.title}</a></td>\n"
148
- s += "\t\t<td class=\"item_text\" style='width: 25%; padding: 5px;'>#{doc.top_doc.title}</td>\n"
152
+ s += "\t\t<td class=\"item_id\" style='width: 7%;'>#{'%.2f' % coverage}%</td>\n"
153
+ s += "\t\t<td class=\"item_id\" style='width: 7%;'> n/a </td>\n"
154
+ s += "\t\t<td class=\"item_text\" style='width: 25%; padding: 5px;'>\
155
+ <i class=\"fa fa-file-text-o\" style='background-color: ##{doc.top_doc.color};'> </i>\
156
+ #{doc.top_doc.title}</td>\n"
149
157
  s += "</tr>\n"
150
158
  html_rows.append s
151
159
  end
@@ -8,11 +8,15 @@ class Traceability < BaseDocument
8
8
  attr_accessor :is_agregated
9
9
  attr_accessor :traced_items
10
10
 
11
- def initialize(top_doc, bottom_doc, is_agregated)
11
+ def initialize(top_doc, bottom_doc)
12
12
  super()
13
13
  @top_doc = top_doc
14
14
  @bottom_doc = bottom_doc
15
- @is_agregated = is_agregated
15
+ @is_agregated = if bottom_doc
16
+ false
17
+ else
18
+ true
19
+ end
16
20
  @traced_items = {}
17
21
 
18
22
  if @is_agregated
@@ -1,28 +1,25 @@
1
1
  class DocSection
2
+ attr_accessor :sections, :heading, :parent_section
2
3
 
3
- attr_accessor :sections
4
- attr_accessor :heading
5
- attr_accessor :parent_section
4
+ def initialize(heading)
5
+ @sections = []
6
+ @heading = heading
7
+ @parent_section = nil
8
+ end
6
9
 
7
- def initialize(heading)
8
- @sections = Array.new
9
- @heading = heading
10
- @parent_section = nil
10
+ def to_html # rubocop:disable Metrics/MethodLength
11
+ s = ''
12
+ s += "\t<li onclick=\"nav_toggle_expand_list(this, event)\">" \
13
+ '<span class="fa-li"><i class="fa fa-minus-square-o"> </i></span>'
14
+ s += "<a href=\"##{@heading.anchor_id}\">#{@heading.get_section_info}</a>\n"
15
+ unless @sections.empty?
16
+ s += "\t\t<ul class=\"fa-ul\">\n"
17
+ @sections.each do |sub_section|
18
+ s += sub_section.to_html
19
+ end
20
+ s += "\t\t</ul>\n"
11
21
  end
12
-
13
- def to_html
14
- s = ''
15
- s += "\t<li><span class=\"fa-li\"><i class=\"fa fa-square-o\"> </i></span>"
16
- s += "<a href=\"\#" + @heading.anchor_id.to_s + "\">" + @heading.get_section_info + "</a>\n"
17
- if @sections.length >0
18
- s += "\t\t<ul class=\"fa-ul\">\n"
19
- @sections.each do |sub_section|
20
- s += sub_section.to_html()
21
- end
22
- s += "\t\t</ul>\n"
23
- end
24
- s += "</li>\n"
25
- return s
26
- end
27
-
28
- end
22
+ s += "</li>\n"
23
+ s
24
+ end
25
+ end
@@ -1,63 +1,72 @@
1
- require_relative "doc_section"
1
+ require_relative 'doc_section'
2
2
 
3
3
  class Document
4
-
5
- attr_accessor :root_section
6
-
7
- @@sections_stack = Array.new
8
-
9
- def initialize(headings_list)
10
- @root_section = nil
11
-
12
- build_sections_tree(headings_list)
13
- end
14
-
15
- def build_sections_tree(headings_list)
16
-
17
- headings_list.each do |h|
18
-
19
- if @root_section == nil
20
-
21
- s = DocSection.new(h)
22
- s.parent_section = nil
23
- @root_section = s
24
- @@sections_stack.push s
25
-
26
- elsif @@sections_stack[-1].heading.level == h.level
27
-
28
- s = DocSection.new(h)
29
- @@sections_stack[-2].sections.append(s)
30
- @@sections_stack[-1] = s
31
-
32
- elsif h.level > @@sections_stack[-1].heading.level
33
-
34
- s = DocSection.new(h)
35
- @@sections_stack[-1].sections.append(s)
36
- @@sections_stack.push s
37
-
38
- else
39
- while h.level < @@sections_stack[-1].heading.level
40
- @@sections_stack.pop
41
- end
42
-
43
- s = DocSection.new(h)
44
- @@sections_stack[-2].sections.append(s)
45
- @@sections_stack[-1] = s
46
- end
4
+ attr_accessor :root_section
5
+
6
+ def initialize(headings_list)
7
+ @root_section = nil
8
+
9
+ build_sections_tree(headings_list)
10
+ end
11
+
12
+ def build_sections_tree(headings_list)
13
+ sections_stack = []
14
+ headings_list.each do |h|
15
+ if @root_section.nil?
16
+
17
+ s = DocSection.new(h)
18
+ s.parent_section = nil
19
+ @root_section = s
20
+ sections_stack.push s
21
+ # one more artificial section copy if root is not a Document Title (level 0)
22
+ if h.level.positive?
23
+ a = DocSection.new(h)
24
+ a.parent_section = @root_section
25
+ @root_section.sections.append(a)
26
+ sections_stack.push a
47
27
  end
48
- end
49
28
 
50
- def section_tree_to_html
51
- s = ''
52
- s += "<a href=\"\#" + @root_section.heading.anchor_id.to_s + "\">" + @root_section.heading.get_section_info + "</a>\n"
53
- if @root_section.sections.length >0
54
- s += "\t<ul class=\"fa-ul\" style=\"margin-top: 2px;\">\n"
55
- @root_section.sections.each do |sub_section|
56
- s += sub_section.to_html()
57
- end
58
- s += "\t</ul>\n"
29
+ elsif sections_stack[-1].heading.level == h.level
30
+
31
+ s = DocSection.new(h)
32
+ s.parent_section = sections_stack[-1].parent_section
33
+ sections_stack[-1].parent_section.sections.append(s)
34
+ sections_stack[-1] = s
35
+
36
+ elsif h.level > sections_stack[-1].heading.level
37
+
38
+ s = DocSection.new(h)
39
+ s.parent_section = sections_stack[-1]
40
+ sections_stack[-1].sections.append(s)
41
+ sections_stack.push s
42
+
43
+ else
44
+ sections_stack.pop while h.level < sections_stack[-1].heading.level
45
+ sections_stack.push @root_section if sections_stack.empty?
46
+ s = DocSection.new(h)
47
+ if h.level == sections_stack[-1].heading.level
48
+ s.parent_section = sections_stack[-1].parent_section
49
+ sections_stack[-1].parent_section.sections.append(s)
50
+ else
51
+ s.parent_section = sections_stack[-1]
52
+ sections_stack[-1].sections.append(s)
59
53
  end
60
-
61
- return s
54
+ sections_stack[-1] = s
55
+ end
62
56
  end
63
- end
57
+ end
58
+
59
+ def section_tree_to_html
60
+ s = ''
61
+ s += "<a href=\"##{@root_section.heading.anchor_id}\">#{@root_section.heading.get_section_info}</a>\n"
62
+ unless @root_section.sections.empty?
63
+ s += "\t<ul class=\"fa-ul\" style=\"margin-top: 2px;\">\n"
64
+ @root_section.sections.each do |sub_section|
65
+ s += sub_section.to_html
66
+ end
67
+ s += "\t</ul>\n"
68
+ end
69
+
70
+ s
71
+ end
72
+ end