Almirah 0.2.5 → 0.2.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/bin/almirah +4 -4
  3. data/lib/almirah/doc_fabric.rb +65 -65
  4. data/lib/almirah/doc_items/blockquote.rb +21 -21
  5. data/lib/almirah/doc_items/code_block.rb +26 -26
  6. data/lib/almirah/doc_items/controlled_paragraph.rb +112 -112
  7. data/lib/almirah/doc_items/controlled_table.rb +224 -224
  8. data/lib/almirah/doc_items/controlled_table_row.rb +22 -22
  9. data/lib/almirah/doc_items/doc_footer.rb +16 -16
  10. data/lib/almirah/doc_items/doc_item.rb +22 -22
  11. data/lib/almirah/doc_items/frontmatter.rb +9 -9
  12. data/lib/almirah/doc_items/heading.rb +93 -93
  13. data/lib/almirah/doc_items/image.rb +27 -27
  14. data/lib/almirah/doc_items/markdown_list.rb +156 -156
  15. data/lib/almirah/doc_items/markdown_table.rb +97 -61
  16. data/lib/almirah/doc_items/paragraph.rb +25 -25
  17. data/lib/almirah/doc_items/text_line.rb +296 -296
  18. data/lib/almirah/doc_items/todo_block.rb +21 -21
  19. data/lib/almirah/doc_parser.rb +379 -378
  20. data/lib/almirah/doc_types/base_document.rb +64 -64
  21. data/lib/almirah/doc_types/coverage.rb +95 -80
  22. data/lib/almirah/doc_types/index.rb +173 -173
  23. data/lib/almirah/doc_types/persistent_document.rb +17 -17
  24. data/lib/almirah/doc_types/protocol.rb +24 -24
  25. data/lib/almirah/doc_types/specification.rb +67 -67
  26. data/lib/almirah/doc_types/traceability.rb +142 -142
  27. data/lib/almirah/dom/doc_section.rb +25 -25
  28. data/lib/almirah/dom/document.rb +78 -78
  29. data/lib/almirah/navigation_pane.rb +16 -16
  30. data/lib/almirah/project.rb +287 -287
  31. data/lib/almirah/project_configuration.rb +41 -41
  32. data/lib/almirah/project_template.rb +298 -298
  33. data/lib/almirah/project_utility.rb +52 -0
  34. data/lib/almirah/search/specifications_db.rb +79 -79
  35. data/lib/almirah/templates/css/main.css +300 -300
  36. data/lib/almirah/templates/css/search.css +40 -40
  37. data/lib/almirah/templates/page.html +42 -42
  38. data/lib/almirah/templates/scripts/main.js +111 -111
  39. data/lib/almirah/templates/scripts/orama_search.js +138 -138
  40. data/lib/almirah.rb +93 -58
  41. metadata +4 -3
@@ -1,287 +1,287 @@
1
- # frozen_string_literal: true
2
-
3
- require 'fileutils'
4
- require_relative 'doc_fabric'
5
- require_relative 'navigation_pane'
6
- require_relative 'doc_types/traceability'
7
- require_relative 'doc_types/index'
8
- require_relative 'search/specifications_db'
9
-
10
- class Project # rubocop:disable Metrics/ClassLength,Style/Documentation
11
- attr_accessor :specifications, :protocols, :traceability_matrices, :coverage_matrices, :specifications_dictionary,
12
- :index, :project, :configuration
13
-
14
- def initialize(configuration)
15
- @configuration = configuration
16
- @specifications = []
17
- @protocols = []
18
- @traceability_matrices = []
19
- @coverage_matrices = []
20
- @specifications_dictionary = {}
21
- @covered_specifications_dictionary = {}
22
- @index = nil
23
- @project = self
24
- FileUtils.remove_dir("#{@configuration.project_root_directory}/build", true)
25
- copy_resources
26
- end
27
-
28
- def copy_resources
29
- # scripts
30
- gem_root = File.expand_path './../..', File.dirname(__FILE__)
31
- src_folder = "#{gem_root}/lib/almirah/templates/scripts"
32
- dst_folder = "#{@configuration.project_root_directory}/build/scripts"
33
- FileUtils.mkdir_p(dst_folder)
34
- FileUtils.copy_entry(src_folder, dst_folder)
35
- # css
36
- src_folder = "#{gem_root}/lib/almirah/templates/css"
37
- dst_folder = "#{@configuration.project_root_directory}/build/css"
38
- FileUtils.mkdir_p(dst_folder)
39
- FileUtils.copy_entry(src_folder, dst_folder)
40
- end
41
-
42
- def specifications_and_protocols # rubocop:disable Metrics/MethodLength
43
- parse_all_specifications
44
- parse_all_protocols
45
- link_all_specifications
46
- link_all_protocols
47
- check_wrong_specification_referenced
48
- create_index
49
- render_all_specifications(@specifications)
50
- render_all_specifications(@traceability_matrices)
51
- render_all_specifications(@coverage_matrices)
52
- render_all_protocols
53
- render_index
54
- create_search_data
55
- end
56
-
57
- def specifications_and_results(test_run) # rubocop:disable Metrics/MethodLength
58
- parse_all_specifications
59
- parse_test_run test_run
60
- link_all_specifications
61
- link_all_protocols
62
- check_wrong_specification_referenced
63
- create_index
64
- render_all_specifications(@specifications)
65
- render_all_specifications(@traceability_matrices)
66
- render_all_specifications(@coverage_matrices)
67
- render_all_protocols
68
- render_index
69
- create_search_data
70
- end
71
-
72
- def parse_all_specifications
73
- path = @configuration.project_root_directory
74
- # do a lasy pass first to get the list of documents id
75
- Dir.glob("#{path}/specifications/**/*.md").each do |f|
76
- DocFabric.add_lazy_doc_id(f)
77
- end
78
- # parse documents in the second pass
79
- Dir.glob("#{path}/specifications/**/*.md").each do |f| # rubocop:disable Style/CombinableLoops
80
- doc = DocFabric.create_specification(f)
81
- @specifications.append(doc)
82
- @specifications_dictionary[doc.id.to_s.downcase] = doc
83
- end
84
- end
85
-
86
- def parse_all_protocols
87
- path = @configuration.project_root_directory
88
- Dir.glob("#{path}/tests/protocols/**/*.md").each do |f|
89
- doc = DocFabric.create_protocol(f)
90
- @protocols.append(doc)
91
- end
92
- end
93
-
94
- def parse_test_run(test_run)
95
- path = @configuration.project_root_directory
96
- Dir.glob("#{path}/tests/runs/#{test_run}/**/*.md").each do |f|
97
- doc = DocFabric.create_protocol(f)
98
- @protocols.append(doc)
99
- end
100
- end
101
-
102
- def link_all_specifications # rubocop:disable Metrics/MethodLength
103
- comb_list = @specifications.combination(2)
104
- comb_list.each do |c|
105
- link_two_specifications(c[0], c[1])
106
- # puts "Link: #{c[0].id} - #{c[1].id}"
107
- end
108
- # separatelly create design inputs treceability
109
- @configuration.get_design_inputs.each do |i|
110
- next unless @specifications_dictionary.key? i.to_s.downcase
111
-
112
- document = @specifications_dictionary[i.to_s.downcase]
113
- if document
114
- doc = DocFabric.create_traceability_document(document, nil)
115
- @traceability_matrices.append doc
116
- end
117
- end
118
- end
119
-
120
- def link_all_protocols # rubocop:disable Metrics/MethodLength
121
- @protocols.each do |p|
122
- @specifications.each do |s|
123
- if p.up_link_docs.key?(s.id.to_s)
124
- link_protocol_to_spec(p, s)
125
- @covered_specifications_dictionary[s.id.to_s] = s
126
- end
127
- end
128
- end
129
- # create coverage documents
130
- @covered_specifications_dictionary.each do |_key, value|
131
- doc = DocFabric.create_coverage_matrix(value)
132
- @coverage_matrices.append doc
133
- end
134
- end
135
-
136
- def check_wrong_specification_referenced # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
137
- available_specification_ids = {}
138
-
139
- @specifications.each do |s|
140
- available_specification_ids[s.id.to_s.downcase] = s
141
- end
142
-
143
- @specifications.each do |s| # rubocop:disable Style/CombinableLoops
144
- s.up_link_docs.each do |key, _value|
145
- next if available_specification_ids.key?(key)
146
-
147
- # now key points to the doc_id that does not exist
148
- wrong_doc_id = key
149
- # find the item that reference to it
150
- s.controlled_items.each do |item|
151
- next if item.up_link_ids.nil?
152
-
153
- item.up_link_ids.each do |up_link_id|
154
- next unless tmp = /^([a-zA-Z]+)-\d+/.match(up_link_id) # SRS
155
-
156
- if tmp[1].downcase == wrong_doc_id
157
- # we got it finally!
158
- s.wrong_links_hash[up_link_id.to_s] = item
159
- end
160
- end
161
- end
162
- end
163
- end
164
- end
165
-
166
- def link_two_specifications(doc_a, doc_b) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
167
- if doc_b.up_link_docs.key?(doc_a.id.to_s)
168
- top_document = doc_a
169
- bottom_document = doc_b
170
- elsif doc_a.up_link_docs.key?(doc_b.id.to_s)
171
- top_document = doc_b
172
- bottom_document = doc_a
173
- else
174
- return # no links
175
- end
176
- # puts "Link: #{doc_a.id} - #{doc_b.id}"
177
- bottom_document.controlled_items.each do |item|
178
- next unless item.up_link_ids
179
-
180
- item.up_link_ids.each do |up_lnk|
181
- if top_document.dictionary.key?(up_lnk.to_s)
182
-
183
- top_item = top_document.dictionary[up_lnk.to_s]
184
-
185
- unless top_item.down_links
186
- top_item.down_links = []
187
- top_document.items_with_downlinks_number += 1 # for statistics
188
- end
189
- top_item.down_links.append(item)
190
- elsif tmp = /^([a-zA-Z]+)-\d+/.match(up_lnk)
191
- # check if there is a non existing link with the right doc_id
192
- if tmp[1].downcase == top_document.id.downcase
193
- bottom_document.wrong_links_hash[up_lnk] = item
194
- end # SRS
195
- end
196
- end
197
- end
198
- # create treceability document
199
- doc = DocFabric.create_traceability_document(top_document, bottom_document)
200
- @traceability_matrices.append doc
201
- end
202
-
203
- def link_protocol_to_spec(protocol, specification) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
204
- top_document = specification
205
- bottom_document = protocol
206
-
207
- bottom_document.controlled_items.each do |item|
208
- next unless item.up_link_ids
209
-
210
- item.up_link_ids.each do |up_lnk|
211
- if top_document.dictionary.key?(up_lnk.to_s)
212
-
213
- top_item = top_document.dictionary[up_lnk.to_s]
214
-
215
- unless top_item.coverage_links
216
- top_item.coverage_links = []
217
- top_document.items_with_coverage_number += 1 # for statistics
218
- end
219
- top_item.coverage_links.append(item)
220
- elsif tmp = /^([a-zA-Z]+)-\d+/.match(up_lnk)
221
- # check if there is a non existing link with the right doc_id
222
- if tmp[1].downcase == top_document.id.downcase
223
- bottom_document.wrong_links_hash[up_lnk] = item
224
- end # SRS
225
- end
226
- end
227
- end
228
- end
229
-
230
- def create_index
231
- @index = Index.new(@project)
232
- end
233
-
234
- def render_all_specifications(spec_list) # rubocop:disable Metrics/MethodLength
235
- path = @configuration.project_root_directory
236
-
237
- FileUtils.mkdir_p("#{path}/build/specifications")
238
-
239
- spec_list.each do |doc|
240
- doc.to_console
241
-
242
- img_src_dir = "#{path}/specifications/#{doc.id}/img"
243
- img_dst_dir = "#{path}/build/specifications/#{doc.id}/img"
244
-
245
- FileUtils.mkdir_p(img_dst_dir)
246
-
247
- FileUtils.copy_entry(img_src_dir, img_dst_dir) if File.directory?(img_src_dir)
248
-
249
- nav_pane = NavigationPane.new(doc)
250
- doc.to_html(nav_pane, "#{path}/build/specifications/")
251
- end
252
- end
253
-
254
- def render_all_protocols
255
- path = @configuration.project_root_directory
256
-
257
- FileUtils.mkdir_p("#{path}/build/tests/protocols")
258
-
259
- @protocols.each do |doc|
260
- img_src_dir = "#{path}/tests/protocols/#{doc.id}/img"
261
- img_dst_dir = "#{path}/build/tests/protocols/#{doc.id}/img"
262
-
263
- FileUtils.mkdir_p(img_dst_dir)
264
-
265
- FileUtils.copy_entry(img_src_dir, img_dst_dir) if File.directory?(img_src_dir)
266
-
267
- nav_pane = NavigationPane.new(doc)
268
- doc.to_html(nav_pane, "#{path}/build/tests/protocols/")
269
- end
270
- end
271
-
272
- def render_index
273
- path = @configuration.project_root_directory
274
-
275
- doc = @index
276
- doc.to_console
277
-
278
- doc.to_html("#{path}/build/")
279
- end
280
-
281
- def create_search_data
282
- db = SpecificationsDb.new @specifications
283
- data_path = "#{@configuration.project_root_directory}/build/data"
284
- FileUtils.mkdir_p(data_path)
285
- db.save(data_path)
286
- end
287
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'fileutils'
4
+ require_relative 'doc_fabric'
5
+ require_relative 'navigation_pane'
6
+ require_relative 'doc_types/traceability'
7
+ require_relative 'doc_types/index'
8
+ require_relative 'search/specifications_db'
9
+
10
+ class Project # rubocop:disable Metrics/ClassLength,Style/Documentation
11
+ attr_accessor :specifications, :protocols, :traceability_matrices, :coverage_matrices, :specifications_dictionary,
12
+ :index, :project, :configuration
13
+
14
+ def initialize(configuration)
15
+ @configuration = configuration
16
+ @specifications = []
17
+ @protocols = []
18
+ @traceability_matrices = []
19
+ @coverage_matrices = []
20
+ @specifications_dictionary = {}
21
+ @covered_specifications_dictionary = {}
22
+ @index = nil
23
+ @project = self
24
+ FileUtils.remove_dir("#{@configuration.project_root_directory}/build", true)
25
+ copy_resources
26
+ end
27
+
28
+ def copy_resources
29
+ # scripts
30
+ gem_root = File.expand_path './../..', File.dirname(__FILE__)
31
+ src_folder = "#{gem_root}/lib/almirah/templates/scripts"
32
+ dst_folder = "#{@configuration.project_root_directory}/build/scripts"
33
+ FileUtils.mkdir_p(dst_folder)
34
+ FileUtils.copy_entry(src_folder, dst_folder)
35
+ # css
36
+ src_folder = "#{gem_root}/lib/almirah/templates/css"
37
+ dst_folder = "#{@configuration.project_root_directory}/build/css"
38
+ FileUtils.mkdir_p(dst_folder)
39
+ FileUtils.copy_entry(src_folder, dst_folder)
40
+ end
41
+
42
+ def specifications_and_protocols # rubocop:disable Metrics/MethodLength
43
+ parse_all_specifications
44
+ parse_all_protocols
45
+ link_all_specifications
46
+ link_all_protocols
47
+ check_wrong_specification_referenced
48
+ create_index
49
+ render_all_specifications(@specifications)
50
+ render_all_specifications(@traceability_matrices)
51
+ render_all_specifications(@coverage_matrices)
52
+ render_all_protocols
53
+ render_index
54
+ create_search_data
55
+ end
56
+
57
+ def specifications_and_results(test_run) # rubocop:disable Metrics/MethodLength
58
+ parse_all_specifications
59
+ parse_test_run test_run
60
+ link_all_specifications
61
+ link_all_protocols
62
+ check_wrong_specification_referenced
63
+ create_index
64
+ render_all_specifications(@specifications)
65
+ render_all_specifications(@traceability_matrices)
66
+ render_all_specifications(@coverage_matrices)
67
+ render_all_protocols
68
+ render_index
69
+ create_search_data
70
+ end
71
+
72
+ def parse_all_specifications
73
+ path = @configuration.project_root_directory
74
+ # do a lasy pass first to get the list of documents id
75
+ Dir.glob("#{path}/specifications/**/*.md").each do |f|
76
+ DocFabric.add_lazy_doc_id(f)
77
+ end
78
+ # parse documents in the second pass
79
+ Dir.glob("#{path}/specifications/**/*.md").each do |f| # rubocop:disable Style/CombinableLoops
80
+ doc = DocFabric.create_specification(f)
81
+ @specifications.append(doc)
82
+ @specifications_dictionary[doc.id.to_s.downcase] = doc
83
+ end
84
+ end
85
+
86
+ def parse_all_protocols
87
+ path = @configuration.project_root_directory
88
+ Dir.glob("#{path}/tests/protocols/**/*.md").each do |f|
89
+ doc = DocFabric.create_protocol(f)
90
+ @protocols.append(doc)
91
+ end
92
+ end
93
+
94
+ def parse_test_run(test_run)
95
+ path = @configuration.project_root_directory
96
+ Dir.glob("#{path}/tests/runs/#{test_run}/**/*.md").each do |f|
97
+ doc = DocFabric.create_protocol(f)
98
+ @protocols.append(doc)
99
+ end
100
+ end
101
+
102
+ def link_all_specifications # rubocop:disable Metrics/MethodLength
103
+ comb_list = @specifications.combination(2)
104
+ comb_list.each do |c|
105
+ link_two_specifications(c[0], c[1])
106
+ # puts "Link: #{c[0].id} - #{c[1].id}"
107
+ end
108
+ # separatelly create design inputs treceability
109
+ @configuration.get_design_inputs.each do |i|
110
+ next unless @specifications_dictionary.key? i.to_s.downcase
111
+
112
+ document = @specifications_dictionary[i.to_s.downcase]
113
+ if document
114
+ doc = DocFabric.create_traceability_document(document, nil)
115
+ @traceability_matrices.append doc
116
+ end
117
+ end
118
+ end
119
+
120
+ def link_all_protocols # rubocop:disable Metrics/MethodLength
121
+ @protocols.each do |p|
122
+ @specifications.each do |s|
123
+ if p.up_link_docs.key?(s.id.to_s)
124
+ link_protocol_to_spec(p, s)
125
+ @covered_specifications_dictionary[s.id.to_s] = s
126
+ end
127
+ end
128
+ end
129
+ # create coverage documents
130
+ @covered_specifications_dictionary.each do |_key, value|
131
+ doc = DocFabric.create_coverage_matrix(value)
132
+ @coverage_matrices.append doc
133
+ end
134
+ end
135
+
136
+ def check_wrong_specification_referenced # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
137
+ available_specification_ids = {}
138
+
139
+ @specifications.each do |s|
140
+ available_specification_ids[s.id.to_s.downcase] = s
141
+ end
142
+
143
+ @specifications.each do |s| # rubocop:disable Style/CombinableLoops
144
+ s.up_link_docs.each do |key, _value|
145
+ next if available_specification_ids.key?(key)
146
+
147
+ # now key points to the doc_id that does not exist
148
+ wrong_doc_id = key
149
+ # find the item that reference to it
150
+ s.controlled_items.each do |item|
151
+ next if item.up_link_ids.nil?
152
+
153
+ item.up_link_ids.each do |up_link_id|
154
+ next unless tmp = /^([a-zA-Z]+)-\d+/.match(up_link_id) # SRS
155
+
156
+ if tmp[1].downcase == wrong_doc_id
157
+ # we got it finally!
158
+ s.wrong_links_hash[up_link_id.to_s] = item
159
+ end
160
+ end
161
+ end
162
+ end
163
+ end
164
+ end
165
+
166
+ def link_two_specifications(doc_a, doc_b) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
167
+ if doc_b.up_link_docs.key?(doc_a.id.to_s)
168
+ top_document = doc_a
169
+ bottom_document = doc_b
170
+ elsif doc_a.up_link_docs.key?(doc_b.id.to_s)
171
+ top_document = doc_b
172
+ bottom_document = doc_a
173
+ else
174
+ return # no links
175
+ end
176
+ # puts "Link: #{doc_a.id} - #{doc_b.id}"
177
+ bottom_document.controlled_items.each do |item|
178
+ next unless item.up_link_ids
179
+
180
+ item.up_link_ids.each do |up_lnk|
181
+ if top_document.dictionary.key?(up_lnk.to_s)
182
+
183
+ top_item = top_document.dictionary[up_lnk.to_s]
184
+
185
+ unless top_item.down_links
186
+ top_item.down_links = []
187
+ top_document.items_with_downlinks_number += 1 # for statistics
188
+ end
189
+ top_item.down_links.append(item)
190
+ elsif tmp = /^([a-zA-Z]+)-\d+/.match(up_lnk)
191
+ # check if there is a non existing link with the right doc_id
192
+ if tmp[1].downcase == top_document.id.downcase
193
+ bottom_document.wrong_links_hash[up_lnk] = item
194
+ end # SRS
195
+ end
196
+ end
197
+ end
198
+ # create treceability document
199
+ doc = DocFabric.create_traceability_document(top_document, bottom_document)
200
+ @traceability_matrices.append doc
201
+ end
202
+
203
+ def link_protocol_to_spec(protocol, specification) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
204
+ top_document = specification
205
+ bottom_document = protocol
206
+
207
+ bottom_document.controlled_items.each do |item|
208
+ next unless item.up_link_ids
209
+
210
+ item.up_link_ids.each do |up_lnk|
211
+ if top_document.dictionary.key?(up_lnk.to_s)
212
+
213
+ top_item = top_document.dictionary[up_lnk.to_s]
214
+
215
+ unless top_item.coverage_links
216
+ top_item.coverage_links = []
217
+ top_document.items_with_coverage_number += 1 # for statistics
218
+ end
219
+ top_item.coverage_links.append(item)
220
+ elsif tmp = /^([a-zA-Z]+)-\d+/.match(up_lnk)
221
+ # check if there is a non existing link with the right doc_id
222
+ if tmp[1].downcase == top_document.id.downcase
223
+ bottom_document.wrong_links_hash[up_lnk] = item
224
+ end # SRS
225
+ end
226
+ end
227
+ end
228
+ end
229
+
230
+ def create_index
231
+ @index = Index.new(@project)
232
+ end
233
+
234
+ def render_all_specifications(spec_list) # rubocop:disable Metrics/MethodLength
235
+ path = @configuration.project_root_directory
236
+
237
+ FileUtils.mkdir_p("#{path}/build/specifications")
238
+
239
+ spec_list.each do |doc|
240
+ doc.to_console
241
+
242
+ img_src_dir = "#{path}/specifications/#{doc.id}/img"
243
+ img_dst_dir = "#{path}/build/specifications/#{doc.id}/img"
244
+
245
+ FileUtils.mkdir_p(img_dst_dir)
246
+
247
+ FileUtils.copy_entry(img_src_dir, img_dst_dir) if File.directory?(img_src_dir)
248
+
249
+ nav_pane = NavigationPane.new(doc)
250
+ doc.to_html(nav_pane, "#{path}/build/specifications/")
251
+ end
252
+ end
253
+
254
+ def render_all_protocols
255
+ path = @configuration.project_root_directory
256
+
257
+ FileUtils.mkdir_p("#{path}/build/tests/protocols")
258
+
259
+ @protocols.each do |doc|
260
+ img_src_dir = "#{path}/tests/protocols/#{doc.id}/img"
261
+ img_dst_dir = "#{path}/build/tests/protocols/#{doc.id}/img"
262
+
263
+ FileUtils.mkdir_p(img_dst_dir)
264
+
265
+ FileUtils.copy_entry(img_src_dir, img_dst_dir) if File.directory?(img_src_dir)
266
+
267
+ nav_pane = NavigationPane.new(doc)
268
+ doc.to_html(nav_pane, "#{path}/build/tests/protocols/")
269
+ end
270
+ end
271
+
272
+ def render_index
273
+ path = @configuration.project_root_directory
274
+
275
+ doc = @index
276
+ doc.to_console
277
+
278
+ doc.to_html("#{path}/build/")
279
+ end
280
+
281
+ def create_search_data
282
+ db = SpecificationsDb.new @specifications
283
+ data_path = "#{@configuration.project_root_directory}/build/data"
284
+ FileUtils.mkdir_p(data_path)
285
+ db.save(data_path)
286
+ end
287
+ end
@@ -1,42 +1,42 @@
1
- require 'yaml'
2
-
3
- class ProjectConfiguration
4
-
5
- attr_accessor :project_root_directory
6
- attr_accessor :parameters
7
-
8
- def initialize(path)
9
- @project_root_directory = path
10
- @parameters = {}
11
- load_project_file()
12
- end
13
-
14
- def load_project_file
15
- begin
16
- @parameters = YAML.load_file(@project_root_directory + '/project.yml')
17
- rescue Psych::SyntaxError => e
18
- puts "YAML syntax error: #{e.message}"
19
- rescue Errno::ENOENT
20
- puts "Project file not found: project.yml"
21
- end
22
- end
23
-
24
- def get_design_inputs
25
- if (@parameters.key? 'specifications') and (@parameters['specifications'].key? 'input')
26
- return @parameters['specifications']['input']
27
- end
28
- return []
29
- end
30
-
31
- def is_spec_db_shall_be_created
32
- if (@parameters.key? 'output')
33
- @parameters['output'].each do |p|
34
- if p == 'specifications_db'
35
- return true
36
- end
37
- end
38
- end
39
- return false
40
- end
41
-
1
+ require 'yaml'
2
+
3
+ class ProjectConfiguration
4
+
5
+ attr_accessor :project_root_directory
6
+ attr_accessor :parameters
7
+
8
+ def initialize(path)
9
+ @project_root_directory = path
10
+ @parameters = {}
11
+ load_project_file()
12
+ end
13
+
14
+ def load_project_file
15
+ begin
16
+ @parameters = YAML.load_file(@project_root_directory + '/project.yml')
17
+ rescue Psych::SyntaxError => e
18
+ puts "YAML syntax error: #{e.message}"
19
+ rescue Errno::ENOENT
20
+ puts "Project file not found: project.yml"
21
+ end
22
+ end
23
+
24
+ def get_design_inputs
25
+ if (@parameters.key? 'specifications') and (@parameters['specifications'].key? 'input')
26
+ return @parameters['specifications']['input']
27
+ end
28
+ return []
29
+ end
30
+
31
+ def is_spec_db_shall_be_created
32
+ if (@parameters.key? 'output')
33
+ @parameters['output'].each do |p|
34
+ if p == 'specifications_db'
35
+ return true
36
+ end
37
+ end
38
+ end
39
+ return false
40
+ end
41
+
42
42
  end