Almirah 0.1.6 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,139 +1,270 @@
1
- class TextLine
1
+ class TextLineToken
2
+ attr_accessor :value
3
+ def initialize()
4
+ @value = ""
5
+ end
6
+ end
2
7
 
3
- @@lazy_doc_id_dict = Hash.new
8
+ class ItalicToken < TextLineToken
9
+ attr_accessor :value
10
+ def initialize()
11
+ @value = "*"
12
+ end
13
+ end
4
14
 
5
- def self.add_lazy_doc_id(id)
6
- doc_id = id.to_s.downcase
7
- @@lazy_doc_id_dict[doc_id] = doc_id
15
+ class BoldToken < TextLineToken
16
+ attr_accessor :value
17
+ def initialize()
18
+ @value = "**"
8
19
  end
20
+ end
9
21
 
10
- def format_string(str)
11
- state = 'default'
12
- prev_state = 'default'
13
- result = ''
14
- stack = ''
15
- prev_c = ''
16
- link_text = ''
17
- link_url = ''
18
- str.each_char do |c|
19
- if c == '*'
20
- if state == 'default'
21
- prev_state, state = change_state(c, state, 'first_asterisk_detected')
22
-
23
- elsif state == 'first_asterisk_detected'
24
- prev_state, state = change_state(c, state, 'second_asterisk_detected')
25
-
26
- elsif state == 'second_asterisk_detected'
27
- prev_state, state = change_state(c, state, 'third_asterisk_detected')
28
-
29
- elsif state == 'second_asterisk_detected'
30
- prev_state, state = change_state(c, state, 'third_asterisk_detected')
31
-
32
- elsif state == 'italic_started'
33
- prev_state, state = change_state(c, state, 'default')
34
- result += italic(stack)
35
-
36
- elsif state == 'bold_started'
37
- prev_state, state = change_state(c, state, 'first_asterisk_after_bold_detected')
38
-
39
- elsif state == 'first_asterisk_after_bold_detected'
40
- prev_state, state = change_state(c, state, 'default')
41
- result += bold(stack)
42
-
43
- elsif state == 'bold_and_italic_started'
44
- prev_state, state = change_state(c, state, 'first_asterisk_after_bold_and_italic_detected')
45
-
46
- elsif state == 'first_asterisk_after_bold_and_italic_detected'
47
- prev_state, state = change_state(c, state, 'second_asterisk_after_bold_and_italic_detected')
48
-
49
- elsif state == 'second_asterisk_after_bold_and_italic_detected'
50
- prev_state, state = change_state(c, state, 'default')
51
- result += bold_and_italic(stack)
22
+ class BoldAndItalicToken < TextLineToken
23
+ attr_accessor :value
24
+ def initialize()
25
+ @value = "***"
26
+ end
27
+ end
52
28
 
53
- else
54
- end
55
- elsif c == '['
56
- if state == 'default'
57
- prev_state, state = change_state(c, state, 'square_bracket_left_detected')
58
- else
59
- end
60
- elsif c == ']'
61
- if state == 'square_bracket_left_detected'
62
- prev_state, state = change_state(c, state, 'default')
63
- result += '[]'
29
+ class ParentheseLeft < TextLineToken
30
+ attr_accessor :value
31
+ def initialize()
32
+ @value = "("
33
+ end
34
+ end
64
35
 
65
- elsif state == 'link_text_started'
66
- prev_state, state = change_state(c, state, 'square_bracket_right_detected')
67
- link_text = stack
36
+ class ParentheseRight < TextLineToken
37
+ attr_accessor :value
38
+ def initialize()
39
+ @value = ")"
40
+ end
41
+ end
68
42
 
69
- else
70
- end
71
- elsif c == '('
72
- if state == 'square_bracket_right_detected'
73
- prev_state, state = change_state(c, state, 'brace_left_detected')
74
- else
75
- result += c
76
- end
77
- elsif c == ')'
78
- if state == 'brace_left_detected'
79
- prev_state, state = change_state(c, state, 'default')
80
- result += '()'
43
+ class SquareBracketLeft < TextLineToken
44
+ attr_accessor :value
45
+ def initialize()
46
+ @value = "["
47
+ end
48
+ end
49
+
50
+ class SquareBracketRight < TextLineToken
51
+ attr_accessor :value
52
+ def initialize()
53
+ @value = "]"
54
+ end
55
+ end
81
56
 
82
- elsif state == 'link_url_started'
83
- prev_state, state = change_state(c, state, 'default')
84
- link_url = stack
85
- result += link(link_text, link_url)
57
+ class SquareBracketRightAndParentheseLeft < TextLineToken
58
+ attr_accessor :value
59
+ def initialize()
60
+ @value = "]("
61
+ end
62
+ end
63
+
64
+ class TextLineParser
65
+ attr_accessor :supported_tokens
66
+
67
+ def initialize()
68
+ @supported_tokens = Array.new
69
+ @supported_tokens.append(BoldAndItalicToken.new)
70
+ @supported_tokens.append(BoldToken.new)
71
+ @supported_tokens.append(ItalicToken.new)
72
+ @supported_tokens.append(SquareBracketRightAndParentheseLeft.new)
73
+ @supported_tokens.append(ParentheseLeft.new)
74
+ @supported_tokens.append(ParentheseRight.new)
75
+ @supported_tokens.append(SquareBracketLeft.new)
76
+ @supported_tokens.append(SquareBracketRight.new)
77
+ @supported_tokens.append(TextLineToken.new)
78
+ end
86
79
 
80
+ def tokenize(str)
81
+ result = Array.new
82
+ sl = str.length
83
+ si = 0
84
+ while si < sl
85
+ @supported_tokens.each do |t|
86
+ tl = t.value.length
87
+ if tl != 0 # literal is the last supported token in the list
88
+ projected_end_position = si+tl-1
89
+ if projected_end_position > sl
90
+ next
91
+ end
92
+ buf = str[si..projected_end_position]
93
+ if buf == t.value
94
+ result.append(t)
95
+ si = projected_end_position +1
96
+ break
97
+ end
87
98
  else
88
- result += c
99
+ if (result.length > 0) and (result[-1].instance_of? TextLineToken)
100
+ literal = result[-1]
101
+ literal.value += str[si]
102
+ else
103
+ literal = TextLineToken.new
104
+ literal.value = str[si]
105
+ result.append(literal)
106
+ end
107
+ si += 1
89
108
  end
90
- else
91
- if state == 'default'
92
- result += c
93
- else
94
- if state == 'first_asterisk_detected'
95
- prev_state, state = change_state(c, state, 'italic_started')
96
- stack = ''
109
+ end
110
+ end
111
+ return result
112
+ end
113
+ end
97
114
 
98
- elsif state == 'second_asterisk_detected'
99
- prev_state, state = change_state(c, state, 'bold_started')
100
- stack = ''
115
+ class TextLineBuilderContext
101
116
 
102
- elsif state == 'third_asterisk_detected'
103
- prev_state, state = change_state(c, state, 'bold_and_italic_started')
104
- stack = ''
105
-
106
- elsif state == 'first_asterisk_after_bold_detected'
107
- prev_state, state = change_state(c, state, 'bold_started')
117
+ def italic(str)
118
+ return str
119
+ end
108
120
 
109
- elsif state == 'first_asterisk_after_bold_and_italic_detected'
110
- prev_state, state = change_state(c, state, 'bold_and_italic_started')
121
+ def bold(str)
122
+ return str
123
+ end
111
124
 
112
- elsif state == 'second_asterisk_after_bold_and_italic_detected'
113
- prev_state, state = change_state(c, state, 'bold_and_italic_started')
125
+ def bold_and_italic(str)
126
+ return str
127
+ end
114
128
 
115
- elsif state == 'square_bracket_left_detected'
116
- prev_state, state = change_state(c, state, 'link_text_started')
117
- stack = ''
129
+ def link(link_text, link_url)
130
+ return link_url
131
+ end
132
+ end
118
133
 
119
- elsif state == 'square_bracket_right_detected'
120
- prev_state, state = change_state(c, state, 'default')
121
- result += stack + c
122
- c = ''
134
+ class TextLineBuilder
135
+ attr_accessor :builder_context
123
136
 
124
- elsif state == 'brace_left_detected'
125
- prev_state, state = change_state(c, state, 'link_url_started')
126
- stack = ''
137
+ def initialize(builder_context)
138
+ @builder_context = builder_context
139
+ end
127
140
 
128
- else
129
- end
130
- stack += c
141
+ def restore(token_list)
142
+ result = ""
143
+ if token_list == nil
144
+ return ""
145
+ end
146
+ sub_list_url_text = nil
147
+ sub_list_url_address = nil
148
+ tl = token_list.length
149
+ ti = 0
150
+ while ti < tl
151
+ case token_list[ti].class.name
152
+ when "ItalicToken"
153
+ is_found = false
154
+ ti_starting_position = ti
155
+ # try to find closing part
156
+ tii = ti + 1
157
+ while tii < tl
158
+ if token_list[tii].instance_of? ItalicToken
159
+ sub_list = token_list[(ti+1)..(tii-1)]
160
+ result += @builder_context.italic(restore(sub_list))
161
+ ti = tii +1
162
+ is_found = true
163
+ break
164
+ end
165
+ tii += 1
166
+ end
167
+ unless is_found
168
+ result += "*"
169
+ ti = ti_starting_position + 1
170
+ end
171
+ when "BoldToken"
172
+ is_found = false
173
+ ti_starting_position = ti
174
+ # try to find closing part
175
+ tii = ti + 1
176
+ while tii < tl
177
+ if token_list[tii].instance_of? BoldToken
178
+ sub_list = token_list[(ti+1)..(tii-1)]
179
+ result += @builder_context.bold(restore(sub_list))
180
+ ti = tii +1
181
+ is_found = true
182
+ break
183
+ end
184
+ tii += 1
185
+ end
186
+ unless is_found
187
+ result += "**"
188
+ ti = ti_starting_position + 1
189
+ end
190
+ when "BoldAndItalicToken"
191
+ is_found = false
192
+ ti_starting_position = ti
193
+ # try to find closing part
194
+ tii = ti + 1
195
+ while tii < tl
196
+ if token_list[tii].instance_of? BoldAndItalicToken
197
+ sub_list = token_list[(ti+1)..(tii-1)]
198
+ result += @builder_context.bold_and_italic(restore(sub_list))
199
+ ti = tii +1
200
+ is_found = true
201
+ break
202
+ end
203
+ tii += 1
204
+ end
205
+ unless is_found
206
+ result += "***"
207
+ ti = ti_starting_position + 1
131
208
  end
209
+ when "SquareBracketLeft"
210
+ # try to find closing part
211
+ is_found = false
212
+ tii = ti + 1
213
+ ti_starting_position = ti
214
+ while tii < tl
215
+ case token_list[tii].class.name
216
+ when "SquareBracketRightAndParentheseLeft"
217
+ sub_list_url_text = token_list[(ti+1)..(tii-1)]
218
+ ti = tii +1
219
+ tiii = ti
220
+ while tiii < tl
221
+ case token_list[tiii].class.name
222
+ when "ParentheseRight"
223
+ sub_list_url_address = token_list[(tii+1)..(tiii-1)]
224
+ ti = tiii +1
225
+ is_found = true
226
+ break
227
+ end
228
+ tiii += 1
229
+ end
230
+ break
231
+ when "SquareBracketRight"
232
+ break
233
+ end
234
+ tii += 1
235
+ end
236
+ if is_found
237
+ result += @builder_context.link(restore(sub_list_url_text), restore(sub_list_url_address))
238
+ else
239
+ result += "["
240
+ ti = ti_starting_position + 1
241
+ end
242
+
243
+ when "TextLineToken", "ParentheseLeft", "ParentheseRight", "SquareBracketLeft", "SquareBracketRight"
244
+ result += token_list[ti].value
245
+ ti += 1
246
+ else
247
+ ti += 1
132
248
  end
133
- prev_c = c
134
249
  end
135
250
  return result
136
251
  end
252
+ end
253
+
254
+ class TextLine < TextLineBuilderContext
255
+
256
+ @@lazy_doc_id_dict = Hash.new
257
+
258
+ def self.add_lazy_doc_id(id)
259
+ doc_id = id.to_s.downcase
260
+ @@lazy_doc_id_dict[doc_id] = doc_id
261
+ end
262
+
263
+ def format_string(str)
264
+ tlp = TextLineParser.new
265
+ tlb = TextLineBuilder.new(self)
266
+ tlb.restore(tlp.tokenize(str))
267
+ end
137
268
 
138
269
  def change_state(c, cur_state, new_state)
139
270
  # puts "[#{c}] Transition: #{cur_state} --> #{new_state}"
@@ -153,7 +284,6 @@ class TextLine
153
284
  end
154
285
 
155
286
  def link(link_text, link_url)
156
-
157
287
  # define default result first
158
288
  result = "<a target=\"_blank\" rel=\"noopener\" href=\"#{link_url}\" class=\"external\">#{link_text}</a>"
159
289
 
@@ -44,7 +44,7 @@ class Index < BaseDocument
44
44
 
45
45
  sorted_items.each do |doc|
46
46
  s = "\t<tr>\n"
47
- 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"
47
+ s += "\t\t<td class=\"item_text\" style='padding: 5px;'><a href=\"./specifications/#{doc.id}/#{doc.id}.html\" class=\"external\"><i class=\"fa fa-file-text-o\" style='background-color: ##{doc.color};'> </i>&nbsp#{doc.title}</a></td>\n"
48
48
  s += "\t\t<td class=\"item_id\" style='width: 7%;'>#{doc.controlled_items.length.to_s}</td>\n"
49
49
  s += "\t\t<td class=\"item_id\" style='width: 7%;'>#{doc.items_with_uplinks_number.to_s}</td>\n"
50
50
  s += "\t\t<td class=\"item_id\" style='width: 7%;'>#{doc.items_with_downlinks_number.to_s}</td>\n"
@@ -97,18 +97,36 @@ class Index < BaseDocument
97
97
  s += "<table class=\"controlled\">\n"
98
98
  s += "\t<thead>\n"
99
99
  s += "\t\t<th>Title</th>\n"
100
+ s += "\t\t<th>Coverage</th>\n"
100
101
  s += "\t\t<th>Top Document</th>\n"
101
102
  s += "\t\t<th>Bottom Document</th>\n"
102
103
  s += "</thead>\n"
103
104
  html_rows.append s
104
105
 
105
106
  sorted_items = @project.traceability_matrices.sort_by { |w| w.id }
107
+ # buble-up design inputs
108
+ design_inputs = []
109
+ others = []
110
+ sorted_items.each do |doc|
111
+ if doc.bottom_doc
112
+ others.append doc
113
+ else
114
+ design_inputs.append doc
115
+ end
116
+ end
117
+ sorted_items = design_inputs + others
106
118
 
107
119
  sorted_items.each do |doc|
108
120
  s = "\t<tr>\n"
121
+ coverage = doc.traced_items.length.to_f / doc.top_doc.controlled_items.length.to_f * 100.0
109
122
  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"
110
- s += "\t\t<td class=\"item_text\" style='width: 25%; padding: 5px;'>#{doc.top_doc.title}</td>\n"
111
- s += "\t\t<td class=\"item_text\" style='width: 25%; padding: 5px;'>#{doc.bottom_doc.title}</td>\n"
123
+ s += "\t\t<td class=\"item_id\" style='width: 7%;'>#{'%.2f' % coverage}%</td>\n"
124
+ s += "\t\t<td class=\"item_text\" style='width: 25%; padding: 5px;'><i class=\"fa fa-file-text-o\" style='background-color: ##{doc.top_doc.color};'> </i>&nbsp#{doc.top_doc.title}</td>\n"
125
+ if doc.bottom_doc
126
+ s += "\t\t<td class=\"item_text\" style='width: 25%; padding: 5px;'><i class=\"fa fa-file-text-o\" style='background-color: ##{doc.bottom_doc.color};'> </i>&nbsp#{doc.bottom_doc.title}</td>\n"
127
+ else
128
+ s += "\t\t<td class=\"item_text\" style='width: 25%; padding: 5px;'><i class=\"fa fa-circle-o\"'> </i>&nbspAll References</td>\n"
129
+ end
112
130
  s += "</tr>\n"
113
131
  html_rows.append s
114
132
  end
@@ -15,6 +15,7 @@ class Specification < BaseDocument
15
15
  attr_accessor :duplicates_list
16
16
  attr_accessor :last_used_id
17
17
  attr_accessor :last_used_id_number
18
+ attr_accessor :color
18
19
 
19
20
  def initialize(fele_path)
20
21
 
@@ -35,6 +36,8 @@ class Specification < BaseDocument
35
36
  @last_used_id = ""
36
37
  @last_used_id_number = 0
37
38
 
39
+ @color = 'bbb'
40
+
38
41
  @id = File.basename(fele_path, File.extname(fele_path)).downcase
39
42
  @up_link_doc_id = Hash.new
40
43
  end
@@ -6,12 +6,14 @@ class Traceability < BaseDocument
6
6
  attr_accessor :bottom_doc
7
7
  attr_accessor :items
8
8
  attr_accessor :is_agregated
9
+ attr_accessor :traced_items
9
10
 
10
11
  def initialize(top_doc, bottom_doc, is_agregated)
11
12
 
12
13
  @top_doc = top_doc
13
14
  @bottom_doc = bottom_doc
14
15
  @is_agregated = is_agregated
16
+ @traced_items = {}
15
17
 
16
18
  @items = Array.new
17
19
  @headings = Array.new
@@ -37,7 +39,11 @@ class Traceability < BaseDocument
37
39
  s = "<h1>#{@title}</h1>\n"
38
40
  s += "<table class=\"controlled\">\n"
39
41
  s += "\t<thead> <th>#</th> <th style='font-weight: bold;'>#{@top_doc.title}</th> "
40
- s += "<th>#</th> <th style='font-weight: bold;'>#{@bottom_doc.title}</th> "
42
+ if @bottom_doc
43
+ s += "<th>#</th> <th style='font-weight: bold;'>#{@bottom_doc.title}</th> "
44
+ else
45
+ s += "<th>#</th> <th style='font-weight: bold;'>All References</th> "
46
+ end
41
47
  s += "<th style='font-weight: bold;'>Document Section</th>"
42
48
  s += "</thead>\n"
43
49
  html_rows.append s
@@ -57,27 +63,36 @@ class Traceability < BaseDocument
57
63
  def render_table_row(top_item)
58
64
  s = ""
59
65
  top_f_text = top_item.format_string( top_item.text )
60
-
66
+ id_color = ""
67
+
61
68
  if top_item.down_links
62
69
 
63
70
  if @is_agregated
64
-
65
- if top_item.down_links.length > 1
66
- id_color = "style='background-color: #fff8c5;'"
67
- else
68
- id_color = ""
69
- end
71
+
72
+ top_item_rendered = false
70
73
 
71
74
  top_item.down_links.each do |bottom_item|
75
+ id_color = "style='background-color: ##{bottom_item.parent_doc.color};'"
72
76
  bottom_f_text = bottom_item.format_string( bottom_item.text )
73
77
  document_section = bottom_item.parent_heading.get_section_info
74
78
  s += "\t<tr>\n"
75
- s += "\t\t<td class=\"item_id\" #{id_color}><a href=\"./../#{top_item.parent_doc.id}/#{top_item.parent_doc.id}.html##{top_item.id}\" class=\"external\">#{top_item.id}</a></td>\n"
79
+ s += "\t\t<td class=\"item_id\"><a href=\"./../#{top_item.parent_doc.id}/#{top_item.parent_doc.id}.html##{top_item.id}\" class=\"external\">#{top_item.id}</a></td>\n"
76
80
  s += "\t\t<td class=\"item_text\" style='width: 34%;'>#{top_f_text}</td>\n"
77
- s += "\t\t<td class=\"item_id\"><a href=\"./../#{bottom_item.parent_doc.id}/#{bottom_item.parent_doc.id}.html##{bottom_item.id}\" class=\"external\">#{bottom_item.id}</a></td>\n"
81
+ s += "\t\t<td class=\"item_id\" #{id_color}><a href=\"./../#{bottom_item.parent_doc.id}/#{bottom_item.parent_doc.id}.html##{bottom_item.id}\" class=\"external\">#{bottom_item.id}</a></td>\n"
78
82
  s += "\t\t<td class=\"item_text\" style='width: 34%;'>#{bottom_f_text}</td>\n"
79
83
  s += "\t\t<td class=\"item_text\" style='width: 16%;'>#{document_section}</td>\n"
80
84
  s += "\t</tr>\n"
85
+ top_item_rendered = true
86
+ @traced_items[top_item.id.to_s.downcase] = top_item
87
+ end
88
+ unless top_item_rendered
89
+ s += "\t<tr>\n"
90
+ s += "\t\t<td class=\"item_id\"><a href=\"./../#{top_item.parent_doc.id}/#{top_item.parent_doc.id}.html##{top_item.id}\" class=\"external\">#{top_item.id}</a></td>\n"
91
+ s += "\t\t<td class=\"item_text\" style='width: 34%;'>#{top_f_text}</td>\n"
92
+ s += "\t\t<td class=\"item_id\"></td>\n"
93
+ s += "\t\t<td class=\"item_text\" style='width: 34%;'></td>\n"
94
+ s += "\t\t<td class=\"item_text\" style='width: 16%;'></td>\n"
95
+ s += "\t</tr>\n"
81
96
  end
82
97
 
83
98
  else
@@ -99,6 +114,7 @@ class Traceability < BaseDocument
99
114
  s += "\t\t<td class=\"item_text\" style='width: 16%;'>#{document_section}</td>\n"
100
115
  s += "\t</tr>\n"
101
116
  top_item_rendered = true
117
+ @traced_items[top_item.id.to_s.downcase] = top_item
102
118
  end
103
119
  end
104
120
  unless top_item_rendered
@@ -12,7 +12,7 @@ class DocSection
12
12
 
13
13
  def to_html
14
14
  s = ''
15
- s += "\t<li><span class=\"fa-li\"><i class=\"fa fa-plus-square-o\"> </i></span>"
15
+ s += "\t<li><span class=\"fa-li\"><i class=\"fa fa-sticky-note-o\"> </i></span>"
16
16
  s += "<a href=\"\#" + @heading.anchor_id.to_s + "\">" + @heading.get_section_info + "</a>\n"
17
17
  if @sections.length >0
18
18
  s += "\t\t<ul class=\"fa-ul\">\n"
@@ -1,4 +1,5 @@
1
1
  require 'fileutils'
2
+ require 'YAML'
2
3
  require_relative "doc_fabric"
3
4
  require_relative "navigation_pane"
4
5
  require_relative "doc_types/traceability"
@@ -15,7 +16,7 @@ class Project
15
16
  attr_accessor :specifications_dictionary
16
17
  attr_accessor :index
17
18
  attr_accessor :project
18
- attr_accessor :on_server
19
+ attr_accessor :project_configuration
19
20
 
20
21
  def initialize(path)
21
22
  @project_root_directory = path
@@ -26,9 +27,19 @@ class Project
26
27
  @specifications_dictionary = Hash.new
27
28
  @index = nil
28
29
  @project = self
29
- @on_server = false
30
+ @project_configuration = {}
31
+ load_project_file()
32
+ FileUtils.remove_dir(@project_root_directory + "/build", true)
33
+ end
30
34
 
31
- FileUtils.remove_dir(@project_root_directory + "/build", true)
35
+ def load_project_file
36
+ begin
37
+ @project_configuration = YAML.load_file(@project_root_directory + '/project.yml')
38
+ rescue Psych::SyntaxError => e
39
+ puts "YAML syntax error: #{e.message}"
40
+ rescue Errno::ENOENT
41
+ puts "Project file not found: project.yml"
42
+ end
32
43
  end
33
44
 
34
45
  def specifications_and_protocols
@@ -90,6 +101,7 @@ class Project
90
101
  Dir.glob( "#{@project_root_directory}/specifications/**/*.md" ).each do |f|
91
102
  doc = DocFabric.create_specification(f)
92
103
  @specifications.append(doc)
104
+ @specifications_dictionary[doc.id.to_s.downcase] = doc
93
105
  end
94
106
  end
95
107
 
@@ -115,6 +127,18 @@ class Project
115
127
  link_two_specifications(c[0], c[1])
116
128
  # puts "Link: #{c[0].id} - #{c[1].id}"
117
129
  end
130
+ # separatelly create design inputs treceability
131
+ if (@project_configuration.key? 'specifications') and (@project_configuration['specifications'].key? 'input')
132
+ @project_configuration['specifications']['input'].each do |i|
133
+ if @specifications_dictionary.has_key? i.to_s.downcase
134
+ document = @specifications_dictionary[i.to_s.downcase]
135
+ if document
136
+ trx = Traceability.new document, nil, true
137
+ @traceability_matrices.append trx
138
+ end
139
+ end
140
+ end
141
+ end
118
142
  end
119
143
 
120
144
  def link_all_protocols
@@ -378,7 +378,7 @@ function modal_close_OnClick(clicked){
378
378
  </div><!-- content -->
379
379
  </div><!-- main -->
380
380
  <div id="footer">
381
- Powered by <a target="_blank" rel="noopener" href="https://www.almirah.site/">Almirah Framework</a>
381
+ Powered by <a target="_blank" rel="noopener" href="https://www.almirah.site/">Almirah Framework (0.1.8)</a>
382
382
  </div><!-- footer -->
383
383
  <!-- The modal window for image zoom -->
384
384
  <div id="image_modal_div" class="modal">
data/lib/almirah.rb CHANGED
@@ -7,9 +7,9 @@ class CLI < Thor
7
7
  def please(project_folder)
8
8
  a = Almirah.new project_folder
9
9
  if options[:results]
10
- a.results( options[:results], false )
10
+ a.results( options[:results] )
11
11
  else
12
- a.default(false)
12
+ a.default()
13
13
  end
14
14
  end
15
15
 
@@ -18,17 +18,6 @@ class CLI < Thor
18
18
  a = Almirah.new project_folder
19
19
  a.transform "docx"
20
20
  end
21
-
22
- option :results
23
- desc "server <project_folder>", "say <project_folder>"
24
- def server(project_folder)
25
- a = Almirah.new project_folder
26
- if options[:results]
27
- a.results( options[:results], true )
28
- else
29
- a.default(true)
30
- end
31
- end
32
21
  end
33
22
 
34
23
  class Almirah
@@ -43,8 +32,7 @@ class Almirah
43
32
  File.expand_path './..', File.dirname(__FILE__)
44
33
  end
45
34
 
46
- def results( test_run, on_server )
47
- @project.on_server = on_server
35
+ def results( test_run )
48
36
  @project.specifications_and_results test_run
49
37
  end
50
38
 
@@ -52,8 +40,7 @@ class Almirah
52
40
  @project.transform file_extension
53
41
  end
54
42
 
55
- def default(on_server)
56
- @project.on_server = on_server
43
+ def default()
57
44
  @project.specifications_and_protocols
58
45
  end
59
46