Almirah 0.2.4 → 0.2.6
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/bin/almirah +4 -4
- data/lib/almirah/doc_fabric.rb +65 -65
- data/lib/almirah/doc_items/blockquote.rb +21 -21
- data/lib/almirah/doc_items/code_block.rb +26 -26
- data/lib/almirah/doc_items/controlled_paragraph.rb +112 -112
- data/lib/almirah/doc_items/controlled_table.rb +224 -224
- data/lib/almirah/doc_items/controlled_table_row.rb +22 -22
- data/lib/almirah/doc_items/doc_footer.rb +16 -16
- data/lib/almirah/doc_items/doc_item.rb +22 -20
- data/lib/almirah/doc_items/frontmatter.rb +9 -0
- data/lib/almirah/doc_items/heading.rb +93 -93
- data/lib/almirah/doc_items/image.rb +27 -27
- data/lib/almirah/doc_items/markdown_list.rb +156 -158
- data/lib/almirah/doc_items/markdown_table.rb +61 -63
- data/lib/almirah/doc_items/paragraph.rb +25 -27
- data/lib/almirah/doc_items/text_line.rb +296 -296
- data/lib/almirah/doc_items/todo_block.rb +21 -21
- data/lib/almirah/doc_parser.rb +378 -330
- data/lib/almirah/doc_types/base_document.rb +64 -70
- data/lib/almirah/doc_types/coverage.rb +95 -81
- data/lib/almirah/doc_types/index.rb +173 -169
- data/lib/almirah/doc_types/persistent_document.rb +17 -20
- data/lib/almirah/doc_types/protocol.rb +24 -24
- data/lib/almirah/doc_types/specification.rb +67 -67
- data/lib/almirah/doc_types/traceability.rb +142 -142
- data/lib/almirah/dom/doc_section.rb +25 -25
- data/lib/almirah/dom/document.rb +78 -72
- data/lib/almirah/navigation_pane.rb +16 -16
- data/lib/almirah/project.rb +287 -306
- data/lib/almirah/project_configuration.rb +41 -41
- data/lib/almirah/project_template.rb +298 -0
- data/lib/almirah/project_utility.rb +52 -0
- data/lib/almirah/search/specifications_db.rb +79 -83
- data/lib/almirah/templates/css/main.css +300 -300
- data/lib/almirah/templates/css/search.css +40 -40
- data/lib/almirah/templates/page.html +42 -42
- data/lib/almirah/templates/scripts/main.js +111 -111
- data/lib/almirah/templates/scripts/orama_search.js +138 -138
- data/lib/almirah.rb +93 -49
- metadata +28 -5
| @@ -1,169 +1,173 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
             | 
| 3 | 
            -
             | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
                 | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
                 | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
             | 
| 57 | 
            -
             | 
| 58 | 
            -
             | 
| 59 | 
            -
             | 
| 60 | 
            -
             | 
| 61 | 
            -
             | 
| 62 | 
            -
             | 
| 63 | 
            -
             | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 67 | 
            -
             | 
| 68 | 
            -
             | 
| 69 | 
            -
             | 
| 70 | 
            -
             | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 73 | 
            -
             | 
| 74 | 
            -
             | 
| 75 | 
            -
             | 
| 76 | 
            -
             | 
| 77 | 
            -
             | 
| 78 | 
            -
             | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 81 | 
            -
             | 
| 82 | 
            -
                             | 
| 83 | 
            -
             | 
| 84 | 
            -
                             | 
| 85 | 
            -
             | 
| 86 | 
            -
             | 
| 87 | 
            -
             | 
| 88 | 
            -
             | 
| 89 | 
            -
             | 
| 90 | 
            -
             | 
| 91 | 
            -
             | 
| 92 | 
            -
             | 
| 93 | 
            -
             | 
| 94 | 
            -
             | 
| 95 | 
            -
             | 
| 96 | 
            -
             | 
| 97 | 
            -
             | 
| 98 | 
            -
             | 
| 99 | 
            -
             | 
| 100 | 
            -
             | 
| 101 | 
            -
             | 
| 102 | 
            -
             | 
| 103 | 
            -
             | 
| 104 | 
            -
             | 
| 105 | 
            -
             | 
| 106 | 
            -
             | 
| 107 | 
            -
             | 
| 108 | 
            -
             | 
| 109 | 
            -
             | 
| 110 | 
            -
             | 
| 111 | 
            -
             | 
| 112 | 
            -
             | 
| 113 | 
            -
             | 
| 114 | 
            -
             | 
| 115 | 
            -
             | 
| 116 | 
            -
             | 
| 117 | 
            -
             | 
| 118 | 
            -
             | 
| 119 | 
            -
             | 
| 120 | 
            -
             | 
| 121 | 
            -
             | 
| 122 | 
            -
             | 
| 123 | 
            -
             | 
| 124 | 
            -
             | 
| 125 | 
            -
             | 
| 126 | 
            -
             | 
| 127 | 
            -
             | 
| 128 | 
            -
             | 
| 129 | 
            -
             | 
| 130 | 
            -
             | 
| 131 | 
            -
             | 
| 132 | 
            -
             | 
| 133 | 
            -
             | 
| 134 | 
            -
             | 
| 135 | 
            -
             | 
| 136 | 
            -
             | 
| 137 | 
            -
             | 
| 138 | 
            -
             | 
| 139 | 
            -
             | 
| 140 | 
            -
             | 
| 141 | 
            -
             | 
| 142 | 
            -
             | 
| 143 | 
            -
             | 
| 144 | 
            -
             | 
| 145 | 
            -
             | 
| 146 | 
            -
             | 
| 147 | 
            -
             | 
| 148 | 
            -
             | 
| 149 | 
            -
             | 
| 150 | 
            -
             | 
| 151 | 
            -
             | 
| 152 | 
            -
             | 
| 153 | 
            -
             | 
| 154 | 
            -
             | 
| 155 | 
            -
             | 
| 156 | 
            -
             | 
| 157 | 
            -
             | 
| 158 | 
            -
             | 
| 159 | 
            -
             | 
| 160 | 
            -
             | 
| 161 | 
            -
                     | 
| 162 | 
            -
             | 
| 163 | 
            -
             | 
| 164 | 
            -
             | 
| 165 | 
            -
             | 
| 166 | 
            -
             | 
| 167 | 
            -
             | 
| 168 | 
            -
             | 
| 169 | 
            -
            end
         | 
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require_relative 'base_document'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            class Index < BaseDocument # rubocop:disable Metrics/ClassLength,Style/Documentation
         | 
| 6 | 
            +
              attr_accessor :project
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              def initialize(project)
         | 
| 9 | 
            +
                super()
         | 
| 10 | 
            +
                @project = project
         | 
| 11 | 
            +
                @title = 'Document Index'
         | 
| 12 | 
            +
                @id = 'index'
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              def to_console
         | 
| 16 | 
            +
                puts "\e[36mIndex: #{@id}\e[0m"
         | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              def to_html(output_file_path) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
         | 
| 20 | 
            +
                html_rows = []
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                html_rows.append('')
         | 
| 23 | 
            +
                s = "<h1>#{@title}</h1>\n"
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                # Specifications
         | 
| 26 | 
            +
                s = "<h2>Specifications</h2>\n"
         | 
| 27 | 
            +
                s += "<table class=\"controlled\">\n"
         | 
| 28 | 
            +
                s += "\t<thead>\n"
         | 
| 29 | 
            +
                s += "\t\t<th title=\"Document title\">Title</th>\n"
         | 
| 30 | 
            +
                s += "\t\t<th title=\"Number of Controlled Paragraphs\">Items</th>\n"
         | 
| 31 | 
            +
                s += "\t\t<th title=\"Number of Controlled Paragraphs with up-links\">Items<br>w/ Up-links</th>\n"
         | 
| 32 | 
            +
                s += "\t\t<th title=\"Number of references from other documents\">Items<br>w/ Down-links</th>\n"
         | 
| 33 | 
            +
                s += "\t\t<th title=\"Number of Controlled Paragraphs mentioned in Test Cases\">Covered <br>by Tests</th>\n"
         | 
| 34 | 
            +
                s += "\t\t<th title=\"Number of Controlled Paragraphs that have the same ID\">Duplicated<br>IDs</th>\n"
         | 
| 35 | 
            +
                s += "\t\t<th title=\"Number of Controlled Paragraphs that link to non-existing items\">Wrong<br>links</th>\n"
         | 
| 36 | 
            +
                s += "\t\t<th title=\"Number of 'TODO:' blocks in document\">TODOs</th>\n"
         | 
| 37 | 
            +
                s += "\t\t<th title=\"The last Controlled Paragraph sequence number (ID) used in the document\">Last Used<br>ID</th>\n"
         | 
| 38 | 
            +
                s += "</thead>\n"
         | 
| 39 | 
            +
                html_rows.append s
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                sorted_items = @project.specifications.sort_by(&:id)
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                sorted_items.each do |doc| # rubocop:disable Metrics/BlockLength
         | 
| 44 | 
            +
                  s = "\t<tr>\n"
         | 
| 45 | 
            +
                  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> #{doc.title}</a></td>\n"
         | 
| 46 | 
            +
                  s += "\t\t<td class=\"item_id\" style='width: 7%;'>#{doc.controlled_items.length}</td>\n"
         | 
| 47 | 
            +
                  s += "\t\t<td class=\"item_id\" style='width: 7%;'>#{doc.items_with_uplinks_number}</td>\n"
         | 
| 48 | 
            +
                  s += "\t\t<td class=\"item_id\" style='width: 7%;'>#{doc.items_with_downlinks_number}</td>\n"
         | 
| 49 | 
            +
                  s += "\t\t<td class=\"item_id\" style='width: 7%;'>#{doc.items_with_coverage_number}</td>\n"
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                  if doc.duplicated_ids_number.positive?
         | 
| 52 | 
            +
                    s += "\t\t<td class=\"item_id\" style='width: 7%; background-color: #fcc;'>"
         | 
| 53 | 
            +
                    s += "<div id=\"DL_#{doc.id}\" style=\"display: block;\">"
         | 
| 54 | 
            +
                    s += "<a  href=\"#\" onclick=\"downlink_OnClick(this.parentElement); return false;\" class=\"external\" title=\"Number of Controlled Paragraphs that have the same ID\">#{doc.duplicated_ids_number}</a>"
         | 
| 55 | 
            +
                    s += '</div>'
         | 
| 56 | 
            +
                    s += "<div id=\"DLS_#{doc.id}\" style=\"display: none;\">"
         | 
| 57 | 
            +
                    doc.duplicates_list.each do |lnk|
         | 
| 58 | 
            +
                      s += "\t\t\t<a href=\"./specifications/#{doc.id}/#{doc.id}.html##{lnk.id}\" class=\"external\" title=\"Controlled Paragraph with duplicated ID\">#{lnk.id}</a>\n<br>"
         | 
| 59 | 
            +
                    end
         | 
| 60 | 
            +
                    s += '</div>'
         | 
| 61 | 
            +
                    s += "</td>\n"
         | 
| 62 | 
            +
                  else
         | 
| 63 | 
            +
                    s += "\t\t<td class=\"item_id\" style='width: 7%;'>#{doc.duplicated_ids_number}</td>\n"
         | 
| 64 | 
            +
                  end
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                  if !doc.wrong_links_hash.empty?
         | 
| 67 | 
            +
                    s += "\t\t<td class=\"item_id\" style='width: 7%; background-color: #fcc;'>"
         | 
| 68 | 
            +
                    s += "<div id=\"DL_#{doc.id}wl\" style=\"display: block;\">"
         | 
| 69 | 
            +
                    s += "<a  href=\"#\" onclick=\"downlink_OnClick(this.parentElement); return false;\" class=\"external\" title=\"Number of Controlled Paragraphs that link to non-existing items\">#{doc.wrong_links_hash.length}</a>"
         | 
| 70 | 
            +
                    s += '</div>'
         | 
| 71 | 
            +
                    s += "<div id=\"DLS_#{doc.id}wl\" style=\"display: none;\">"
         | 
| 72 | 
            +
                    doc.wrong_links_hash.each do |wrong_lnk, item|
         | 
| 73 | 
            +
                      s += "\t\t\t<a href=\"./specifications/#{doc.id}/#{doc.id}.html##{item.id}\" class=\"external\" title=\"Controlled Paragraphs that link to non-existing items\">#{wrong_lnk}</a>\n<br>"
         | 
| 74 | 
            +
                    end
         | 
| 75 | 
            +
                    s += '</div>'
         | 
| 76 | 
            +
                    s += "</td>\n"
         | 
| 77 | 
            +
                  else
         | 
| 78 | 
            +
                    s += "\t\t<td class=\"item_id\" style='width: 7%;'>#{doc.wrong_links_hash.length}</td>\n"
         | 
| 79 | 
            +
                  end
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                  color = if !doc.todo_blocks.empty?
         | 
| 82 | 
            +
                            'background-color: #fcc;'
         | 
| 83 | 
            +
                          else
         | 
| 84 | 
            +
                            ''
         | 
| 85 | 
            +
                          end
         | 
| 86 | 
            +
                  s += "\t\t<td class=\"item_id\" style='width: 7%; #{color}'>#{doc.todo_blocks.length}</td>\n"
         | 
| 87 | 
            +
                  s += "\t\t<td class=\"item_id\" style='width: 7%;'>#{doc.last_used_id}</td>\n"
         | 
| 88 | 
            +
                  s += "</tr>\n"
         | 
| 89 | 
            +
                  html_rows.append s
         | 
| 90 | 
            +
                end
         | 
| 91 | 
            +
                html_rows.append "</table>\n"
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                # Traceability Matrices
         | 
| 94 | 
            +
                s = "<h2>Traceability Matrices</h2>\n"
         | 
| 95 | 
            +
                s += "<table class=\"controlled\">\n"
         | 
| 96 | 
            +
                s += "\t<thead>\n"
         | 
| 97 | 
            +
                s += "\t\t<th title=\"Traceability Matrix Title\">Title</th>\n"
         | 
| 98 | 
            +
                s += "\t\t<th title=\"The ratio of Controlled Paragraphs mentioned in other documents and not-mentioned ones\">Coverage</th>\n"
         | 
| 99 | 
            +
                s += "\t\t<th title=\"Document, that contains Cotroled Paragraphs to be referenced in Bottom document(s)\">Top Document</th>\n"
         | 
| 100 | 
            +
                s += "\t\t<th title=\"Document(s), that contains references to Controlled Paragraphs from the Top Document\">Bottom Document</th>\n"
         | 
| 101 | 
            +
                s += "</thead>\n"
         | 
| 102 | 
            +
                html_rows.append s
         | 
| 103 | 
            +
             | 
| 104 | 
            +
                sorted_items = @project.traceability_matrices.sort_by(&:id)
         | 
| 105 | 
            +
                # buble-up design inputs
         | 
| 106 | 
            +
                design_inputs = []
         | 
| 107 | 
            +
                others = []
         | 
| 108 | 
            +
                sorted_items.each do |doc|
         | 
| 109 | 
            +
                  if doc.bottom_doc
         | 
| 110 | 
            +
                    others.append doc
         | 
| 111 | 
            +
                  else
         | 
| 112 | 
            +
                    design_inputs.append doc
         | 
| 113 | 
            +
                  end
         | 
| 114 | 
            +
                end
         | 
| 115 | 
            +
                sorted_items = design_inputs + others
         | 
| 116 | 
            +
             | 
| 117 | 
            +
                sorted_items.each do |doc|
         | 
| 118 | 
            +
                  s = "\t<tr>\n"
         | 
| 119 | 
            +
                  coverage = doc.traced_items.length.to_f / doc.top_doc.controlled_items.length * 100.0
         | 
| 120 | 
            +
                  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"
         | 
| 121 | 
            +
                  s += "\t\t<td class=\"item_id\" style='width: 7%;'>#{'%.2f' % coverage}%</td>\n"
         | 
| 122 | 
            +
                  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> #{doc.top_doc.title}</td>\n"
         | 
| 123 | 
            +
                  if doc.bottom_doc
         | 
| 124 | 
            +
                    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> #{doc.bottom_doc.title}</td>\n"
         | 
| 125 | 
            +
                  else
         | 
| 126 | 
            +
                    s += "\t\t<td class=\"item_text\" style='width: 25%; padding: 5px;'><i class=\"fa fa-circle-o\"'> </i> All References</td>\n"
         | 
| 127 | 
            +
                  end
         | 
| 128 | 
            +
                  s += "</tr>\n"
         | 
| 129 | 
            +
                  html_rows.append s
         | 
| 130 | 
            +
                end
         | 
| 131 | 
            +
                html_rows.append "</table>\n"
         | 
| 132 | 
            +
             | 
| 133 | 
            +
                # Coverage Matrices
         | 
| 134 | 
            +
                unless @project.coverage_matrices.empty?
         | 
| 135 | 
            +
                  s = "<h2>Coverage Matrices</h2>\n"
         | 
| 136 | 
            +
                  s += "<table class=\"controlled\">\n"
         | 
| 137 | 
            +
                  s += "\t<thead>\n"
         | 
| 138 | 
            +
                  s += "\t\t<th>Title</th>\n"
         | 
| 139 | 
            +
                  s += "\t\t<th title=\"The ratio of Controlled Paragraphs mentioned in test protocols and total number of Controlled Paragraphs\">Coverage</th>\n"
         | 
| 140 | 
            +
                  s += "\t\t<th title=\"Numbers of passed and failed test steps\">Test Results</th>\n"
         | 
| 141 | 
            +
                  s += "\t\t<th>Specification Covered</th>\n"
         | 
| 142 | 
            +
                  s += "</thead>\n"
         | 
| 143 | 
            +
                  html_rows.append s
         | 
| 144 | 
            +
             | 
| 145 | 
            +
                  sorted_items = @project.coverage_matrices.sort_by(&:id)
         | 
| 146 | 
            +
             | 
| 147 | 
            +
                  sorted_items.each do |doc|
         | 
| 148 | 
            +
                    s = "\t<tr>\n"
         | 
| 149 | 
            +
                    coverage = doc.covered_items.length.to_f / doc.top_doc.controlled_items.length * 100.0
         | 
| 150 | 
            +
             | 
| 151 | 
            +
                    test_step_color = if doc.failed_steps_number.positive?
         | 
| 152 | 
            +
                                        'background-color: #fcc;'
         | 
| 153 | 
            +
                                      elsif !doc.failed_steps_number.positive? && doc.passed_steps_number.positive?
         | 
| 154 | 
            +
                                        'background-color: #cfc;'
         | 
| 155 | 
            +
                                      else
         | 
| 156 | 
            +
                                        'background-color: #ffffee;'
         | 
| 157 | 
            +
                                      end
         | 
| 158 | 
            +
             | 
| 159 | 
            +
                    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"
         | 
| 160 | 
            +
                    s += "\t\t<td class=\"item_id\" style='width: 7%;'>#{'%.2f' % coverage}%</td>\n" # rubocop:disable Style/FormatString
         | 
| 161 | 
            +
                    s += "\t\t<td class=\"item_id\" style='width: 7%; #{test_step_color}' title='pass/fail'> #{doc.passed_steps_number}/#{doc.failed_steps_number} </td>\n"
         | 
| 162 | 
            +
                    s += "\t\t<td class=\"item_text\" style='width: 25%; padding: 5px;'>\
         | 
| 163 | 
            +
                                <i class=\"fa fa-file-text-o\" style='background-color: ##{doc.top_doc.color};'> </i>\
         | 
| 164 | 
            +
                                #{doc.top_doc.title}</td>\n"
         | 
| 165 | 
            +
                    s += "</tr>\n"
         | 
| 166 | 
            +
                    html_rows.append s
         | 
| 167 | 
            +
                  end
         | 
| 168 | 
            +
                  html_rows.append "</table>\n"
         | 
| 169 | 
            +
                end
         | 
| 170 | 
            +
             | 
| 171 | 
            +
                save_html_to_file(html_rows, nil, output_file_path)
         | 
| 172 | 
            +
              end
         | 
| 173 | 
            +
            end
         | 
| @@ -1,20 +1,17 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
             | 
| 3 | 
            -
             | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
                 | 
| 10 | 
            -
             | 
| 11 | 
            -
                 | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
                end
         | 
| 19 | 
            -
             | 
| 20 | 
            -
            end
         | 
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require_relative 'base_document'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            class PersistentDocument < BaseDocument # rubocop:disable Style/Documentation
         | 
| 6 | 
            +
              attr_accessor :path, :items, :controlled_items, :headings, :up_link_docs, :frontmatter
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              def initialize(fele_path)
         | 
| 9 | 
            +
                super()
         | 
| 10 | 
            +
                @path = fele_path
         | 
| 11 | 
            +
                @items = []
         | 
| 12 | 
            +
                @controlled_items = []
         | 
| 13 | 
            +
                @headings = []
         | 
| 14 | 
            +
                @up_link_docs = {}
         | 
| 15 | 
            +
                @frontmatter = nil
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
            end
         | 
| @@ -1,25 +1,25 @@ | |
| 1 | 
            -
            require_relative "persistent_document"
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            class Protocol < PersistentDocument
         | 
| 4 | 
            -
             | 
| 5 | 
            -
                def initialize(fele_path)
         | 
| 6 | 
            -
                    super
         | 
| 7 | 
            -
                    @id = File.basename(fele_path, File.extname(fele_path)).downcase
         | 
| 8 | 
            -
                end
         | 
| 9 | 
            -
             | 
| 10 | 
            -
                def to_html(nav_pane, output_file_path)
         | 
| 11 | 
            -
             | 
| 12 | 
            -
                    html_rows = Array.new
         | 
| 13 | 
            -
             | 
| 14 | 
            -
                    html_rows.append('')
         | 
| 15 | 
            -
             | 
| 16 | 
            -
                    @items.each do |item|    
         | 
| 17 | 
            -
                        a = item.to_html
         | 
| 18 | 
            -
                        html_rows.append a
         | 
| 19 | 
            -
                    end
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                    self.save_html_to_file(html_rows, nav_pane, output_file_path)
         | 
| 22 | 
            -
                    
         | 
| 23 | 
            -
                end
         | 
| 24 | 
            -
             | 
| 1 | 
            +
            require_relative "persistent_document"
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class Protocol < PersistentDocument
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                def initialize(fele_path)
         | 
| 6 | 
            +
                    super
         | 
| 7 | 
            +
                    @id = File.basename(fele_path, File.extname(fele_path)).downcase
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                def to_html(nav_pane, output_file_path)
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                    html_rows = Array.new
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                    html_rows.append('')
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                    @items.each do |item|    
         | 
| 17 | 
            +
                        a = item.to_html
         | 
| 18 | 
            +
                        html_rows.append a
         | 
| 19 | 
            +
                    end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    self.save_html_to_file(html_rows, nav_pane, output_file_path)
         | 
| 22 | 
            +
                    
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
             | 
| 25 25 | 
             
            end
         | 
| @@ -1,67 +1,67 @@ | |
| 1 | 
            -
            # frozen_string_literal: true
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            require_relative 'persistent_document'
         | 
| 4 | 
            -
             | 
| 5 | 
            -
            class Specification < PersistentDocument
         | 
| 6 | 
            -
              attr_accessor :dictionary, :todo_blocks, :wrong_links_hash, :items_with_uplinks_number, :items_with_downlinks_number,
         | 
| 7 | 
            -
                            :items_with_coverage_number, :duplicated_ids_number, :duplicates_list, :last_used_id,
         | 
| 8 | 
            -
                            :last_used_id_number, :color
         | 
| 9 | 
            -
             | 
| 10 | 
            -
              def initialize(fele_path)
         | 
| 11 | 
            -
                super
         | 
| 12 | 
            -
                @dictionary = {}
         | 
| 13 | 
            -
                @duplicates_list = []
         | 
| 14 | 
            -
                @todo_blocks = []
         | 
| 15 | 
            -
                @wrong_links_hash = {}
         | 
| 16 | 
            -
             | 
| 17 | 
            -
                @items_with_uplinks_number = 0
         | 
| 18 | 
            -
                @items_with_downlinks_number = 0
         | 
| 19 | 
            -
                @items_with_coverage_number = 0
         | 
| 20 | 
            -
                @duplicated_ids_number = 0
         | 
| 21 | 
            -
                @last_used_id = ''
         | 
| 22 | 
            -
                @last_used_id_number = 0
         | 
| 23 | 
            -
             | 
| 24 | 
            -
                @color = 'bbb'
         | 
| 25 | 
            -
             | 
| 26 | 
            -
                @id = File.basename(fele_path, File.extname(fele_path)).downcase
         | 
| 27 | 
            -
              end
         | 
| 28 | 
            -
             | 
| 29 | 
            -
              def to_console
         | 
| 30 | 
            -
                puts ''
         | 
| 31 | 
            -
                puts "\e[33mSpecification: #{@title}\e[0m"
         | 
| 32 | 
            -
                puts '-' * 53
         | 
| 33 | 
            -
                puts '| Number of Controlled Items           | %10d |' % @controlled_items.length
         | 
| 34 | 
            -
                puts format('| Number of Items w/ Up-links          | %10d |', @items_with_uplinks_number)
         | 
| 35 | 
            -
                puts format('| Number of Items w/ Down-links        | %10d |', @items_with_downlinks_number)
         | 
| 36 | 
            -
             | 
| 37 | 
            -
                # coverage
         | 
| 38 | 
            -
                if @controlled_items.length.positive? && (@controlled_items.length == @items_with_coverage_number)
         | 
| 39 | 
            -
                  puts format("| Number of Items w/ Test Coverage     |\e[1m\e[32m %10d \e[0m|", @items_with_coverage_number)
         | 
| 40 | 
            -
                else
         | 
| 41 | 
            -
                  puts format('| Number of Items w/ Test Coverage     | %10d |', @items_with_coverage_number)
         | 
| 42 | 
            -
                end
         | 
| 43 | 
            -
             | 
| 44 | 
            -
                # duplicates
         | 
| 45 | 
            -
                if @duplicated_ids_number.positive?
         | 
| 46 | 
            -
                  puts format("| Duplicated Item Ids found            |\e[1m\e[31m %10d \e[0m|", @duplicated_ids_number)
         | 
| 47 | 
            -
                else
         | 
| 48 | 
            -
                  puts format('| Duplicated Item Ids found            | %10d |', @duplicated_ids_number)
         | 
| 49 | 
            -
                end
         | 
| 50 | 
            -
             | 
| 51 | 
            -
                puts format("| Last used Item Id                    |\e[1m\e[37m %10s \e[0m|", @last_used_id)
         | 
| 52 | 
            -
                puts '-' * 53
         | 
| 53 | 
            -
              end
         | 
| 54 | 
            -
             | 
| 55 | 
            -
              def to_html(nav_pane, output_file_path)
         | 
| 56 | 
            -
                html_rows = []
         | 
| 57 | 
            -
             | 
| 58 | 
            -
                html_rows.append('')
         | 
| 59 | 
            -
             | 
| 60 | 
            -
                @items.each do |item|
         | 
| 61 | 
            -
                  a = item.to_html
         | 
| 62 | 
            -
                  html_rows.append a
         | 
| 63 | 
            -
                end
         | 
| 64 | 
            -
             | 
| 65 | 
            -
                save_html_to_file(html_rows, nav_pane, output_file_path)
         | 
| 66 | 
            -
              end
         | 
| 67 | 
            -
            end
         | 
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require_relative 'persistent_document'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            class Specification < PersistentDocument
         | 
| 6 | 
            +
              attr_accessor :dictionary, :todo_blocks, :wrong_links_hash, :items_with_uplinks_number, :items_with_downlinks_number,
         | 
| 7 | 
            +
                            :items_with_coverage_number, :duplicated_ids_number, :duplicates_list, :last_used_id,
         | 
| 8 | 
            +
                            :last_used_id_number, :color
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              def initialize(fele_path)
         | 
| 11 | 
            +
                super
         | 
| 12 | 
            +
                @dictionary = {}
         | 
| 13 | 
            +
                @duplicates_list = []
         | 
| 14 | 
            +
                @todo_blocks = []
         | 
| 15 | 
            +
                @wrong_links_hash = {}
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                @items_with_uplinks_number = 0
         | 
| 18 | 
            +
                @items_with_downlinks_number = 0
         | 
| 19 | 
            +
                @items_with_coverage_number = 0
         | 
| 20 | 
            +
                @duplicated_ids_number = 0
         | 
| 21 | 
            +
                @last_used_id = ''
         | 
| 22 | 
            +
                @last_used_id_number = 0
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                @color = 'bbb'
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                @id = File.basename(fele_path, File.extname(fele_path)).downcase
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
              def to_console
         | 
| 30 | 
            +
                puts ''
         | 
| 31 | 
            +
                puts "\e[33mSpecification: #{@title}\e[0m"
         | 
| 32 | 
            +
                puts '-' * 53
         | 
| 33 | 
            +
                puts '| Number of Controlled Items           | %10d |' % @controlled_items.length
         | 
| 34 | 
            +
                puts format('| Number of Items w/ Up-links          | %10d |', @items_with_uplinks_number)
         | 
| 35 | 
            +
                puts format('| Number of Items w/ Down-links        | %10d |', @items_with_downlinks_number)
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                # coverage
         | 
| 38 | 
            +
                if @controlled_items.length.positive? && (@controlled_items.length == @items_with_coverage_number)
         | 
| 39 | 
            +
                  puts format("| Number of Items w/ Test Coverage     |\e[1m\e[32m %10d \e[0m|", @items_with_coverage_number)
         | 
| 40 | 
            +
                else
         | 
| 41 | 
            +
                  puts format('| Number of Items w/ Test Coverage     | %10d |', @items_with_coverage_number)
         | 
| 42 | 
            +
                end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                # duplicates
         | 
| 45 | 
            +
                if @duplicated_ids_number.positive?
         | 
| 46 | 
            +
                  puts format("| Duplicated Item Ids found            |\e[1m\e[31m %10d \e[0m|", @duplicated_ids_number)
         | 
| 47 | 
            +
                else
         | 
| 48 | 
            +
                  puts format('| Duplicated Item Ids found            | %10d |', @duplicated_ids_number)
         | 
| 49 | 
            +
                end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                puts format("| Last used Item Id                    |\e[1m\e[37m %10s \e[0m|", @last_used_id)
         | 
| 52 | 
            +
                puts '-' * 53
         | 
| 53 | 
            +
              end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
              def to_html(nav_pane, output_file_path)
         | 
| 56 | 
            +
                html_rows = []
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                html_rows.append('')
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                @items.each do |item|
         | 
| 61 | 
            +
                  a = item.to_html
         | 
| 62 | 
            +
                  html_rows.append a
         | 
| 63 | 
            +
                end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                save_html_to_file(html_rows, nav_pane, output_file_path)
         | 
| 66 | 
            +
              end
         | 
| 67 | 
            +
            end
         |