Class: Ace::Compressor::Models::ContextPack
- Inherits:
-
Object
- Object
- Ace::Compressor::Models::ContextPack
- Defined in:
- lib/ace/compressor/models/context_pack.rb
Constant Summary collapse
- SCHEMA =
"ContextPack/3"
Class Method Summary collapse
- .cmd_line(command) ⇒ Object
- .code_line(language, code) ⇒ Object
- .constraint_line(text) ⇒ Object
- .encode_table_data_rows(rows) ⇒ Object
- .escape(value) ⇒ Object
- .escape_table_cell(value) ⇒ Object
- .example_line(tool) ⇒ Object
- .example_ref_line(tool:, source:, original_source:, reason: "duplicate") ⇒ Object
- .fact_line(text) ⇒ Object
- .fallback_line(source:, from:, to:, reason:, check: nil, details: nil) ⇒ Object
- .fidelity_line(source:, status:, check:, details: nil) ⇒ Object
- .file_line(source) ⇒ Object
- .files_line(label, files) ⇒ Object
- .guidance_line(source:, retry_with:) ⇒ Object
- .header(mode) ⇒ Object
- .list_line(list_key, items) ⇒ Object
- .loss_line(kind:, target:, strategy:, original:, retained:, unit:, source: nil, details: nil) ⇒ Object
- .normalize_table_rows(rows) ⇒ Object
- .parse_table_cells(row) ⇒ Object
- .policy_line(doc_class:, action:) ⇒ Object
- .problems_line(items) ⇒ Object
- .refusal_line(source:, reason:, failed_check:) ⇒ Object
- .rule_line(text) ⇒ Object
- .section_line(title) ⇒ Object
- .summary_line(text) ⇒ Object
- .table_line(rows, table_id: nil, strategy: nil) ⇒ Object
- .table_separator_row?(row) ⇒ Boolean
- .tree_line(label, tree) ⇒ Object
- .unresolved_line(kind, raw) ⇒ Object
Class Method Details
.cmd_line(command) ⇒ Object
84 85 86 |
# File 'lib/ace/compressor/models/context_pack.rb', line 84 def self.cmd_line(command) "CMD|#{escape(command)}" end |
.code_line(language, code) ⇒ Object
96 97 98 99 |
# File 'lib/ace/compressor/models/context_pack.rb', line 96 def self.code_line(language, code) language_value = language.to_s.strip.empty? ? "code" : language.to_s.strip "CODE|#{escape(language_value)}|#{escape(code)}" end |
.constraint_line(text) ⇒ Object
64 65 66 |
# File 'lib/ace/compressor/models/context_pack.rb', line 64 def self.constraint_line(text) "CONSTRAINT|#{escape(text)}" end |
.encode_table_data_rows(rows) ⇒ Object
157 158 159 |
# File 'lib/ace/compressor/models/context_pack.rb', line 157 def self.encode_table_data_rows(rows) Array(rows).map { |cells| Array(cells).map { |cell| escape_table_cell(cell) }.join(">") }.join(";") end |
.escape(value) ⇒ Object
9 10 11 |
# File 'lib/ace/compressor/models/context_pack.rb', line 9 def self.escape(value) value.to_s.gsub("|", "\\|").tr("\n", " ").strip end |
.escape_table_cell(value) ⇒ Object
161 162 163 |
# File 'lib/ace/compressor/models/context_pack.rb', line 161 def self.escape_table_cell(value) value.to_s.gsub("\\", "\\\\").gsub(">", "\\>").gsub(";", "\\;").strip end |
.example_line(tool) ⇒ Object
80 81 82 |
# File 'lib/ace/compressor/models/context_pack.rb', line 80 def self.example_line(tool) "EXAMPLE|#{escape("tool=#{tool}")}" end |
.example_ref_line(tool:, source:, original_source:, reason: "duplicate") ⇒ Object
134 135 136 |
# File 'lib/ace/compressor/models/context_pack.rb', line 134 def self.example_ref_line(tool:, source:, original_source:, reason: "duplicate") "EXAMPLE_REF|tool=#{escape(tool)}|source=#{escape(source)}|original_source=#{escape(original_source)}|reason=#{escape(reason)}" end |
.fact_line(text) ⇒ Object
56 57 58 |
# File 'lib/ace/compressor/models/context_pack.rb', line 56 def self.fact_line(text) "FACT|#{escape(text)}" end |
.fallback_line(source:, from:, to:, reason:, check: nil, details: nil) ⇒ Object
41 42 43 44 45 46 |
# File 'lib/ace/compressor/models/context_pack.rb', line 41 def self.fallback_line(source:, from:, to:, reason:, check: nil, details: nil) line = "FALLBACK|source=#{escape(source)}|from=#{escape(from)}|to=#{escape(to)}|reason=#{escape(reason)}" line += "|check=#{escape(check)}" unless check.to_s.strip.empty? line += "|details=#{escape(details)}" unless details.to_s.strip.empty? line end |
.fidelity_line(source:, status:, check:, details: nil) ⇒ Object
25 26 27 28 29 30 31 |
# File 'lib/ace/compressor/models/context_pack.rb', line 25 def self.fidelity_line(source:, status:, check:, details: nil) line = "FIDELITY|source=#{escape(source)}|status=#{escape(status)}|check=#{escape(check)}" details_text = details.to_s.strip return line if details_text.empty? "#{line}|details=#{escape(details_text)}" end |
.file_line(source) ⇒ Object
17 18 19 |
# File 'lib/ace/compressor/models/context_pack.rb', line 17 def self.file_line(source) "FILE|#{escape(source)}" end |
.files_line(label, files) ⇒ Object
88 89 90 |
# File 'lib/ace/compressor/models/context_pack.rb', line 88 def self.files_line(label, files) "FILES|#{escape(label)}|[#{Array(files).map { |value| escape(value) }.join(",")}]" end |
.guidance_line(source:, retry_with:) ⇒ Object
37 38 39 |
# File 'lib/ace/compressor/models/context_pack.rb', line 37 def self.guidance_line(source:, retry_with:) "GUIDANCE|source=#{escape(source)}|retry_with=#{escape(retry_with)}" end |
.header(mode) ⇒ Object
13 14 15 |
# File 'lib/ace/compressor/models/context_pack.rb', line 13 def self.header(mode) "H|#{SCHEMA}|#{escape(mode)}" end |
.list_line(list_key, items) ⇒ Object
73 74 75 76 77 78 |
# File 'lib/ace/compressor/models/context_pack.rb', line 73 def self.list_line(list_key, items) values = Array(items).map { |item| escape(item) }.join(",") key = list_key.to_s.strip key = "items" if key.empty? "LIST|#{escape(key)}|[#{values}]" end |
.loss_line(kind:, target:, strategy:, original:, retained:, unit:, source: nil, details: nil) ⇒ Object
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/ace/compressor/models/context_pack.rb', line 111 def self.loss_line(kind:, target:, strategy:, original:, retained:, unit:, source: nil, details: nil) unit_key = unit.to_s.strip unit_key = "items" if unit_key.empty? unit_key = unit_key.gsub(/[^a-z0-9_]/i, "_") original_count = original.to_i retained_count = retained.to_i dropped_count = [original_count - retained_count, 0].max line = [ "LOSS|kind=#{escape(kind)}", "target=#{escape(target)}", "strategy=#{escape(strategy)}", "original_#{unit_key}=#{escape(original_count)}", "retained_#{unit_key}=#{escape(retained_count)}", "dropped_#{unit_key}=#{escape(dropped_count)}" ].join("|") line += "|source=#{escape(source)}" unless source.to_s.strip.empty? line += "|details=#{escape(details)}" unless details.to_s.strip.empty? line end |
.normalize_table_rows(rows) ⇒ Object
142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
# File 'lib/ace/compressor/models/context_pack.rb', line 142 def self.normalize_table_rows(rows) row_values = Array(rows) return [[], []] if row_values.empty? return [[], []] if row_values.all? { |row| row.to_s.strip.empty? } if row_values.length == 1 && !row_values.first.to_s.include?("|") return [[], [row_values.first.to_s]] end header_cells = parse_table_cells(row_values[0]) data_rows = row_values[1..].to_a.reject { |row| table_separator_row?(row) }.map { |row| parse_table_cells(row) } [header_cells, data_rows] end |
.parse_table_cells(row) ⇒ Object
165 166 167 |
# File 'lib/ace/compressor/models/context_pack.rb', line 165 def self.parse_table_cells(row) row.to_s.split("|").map(&:strip).reject(&:empty?) end |
.policy_line(doc_class:, action:) ⇒ Object
21 22 23 |
# File 'lib/ace/compressor/models/context_pack.rb', line 21 def self.policy_line(doc_class:, action:) "POLICY|class=#{escape(doc_class)}|action=#{escape(action)}" end |
.problems_line(items) ⇒ Object
68 69 70 71 |
# File 'lib/ace/compressor/models/context_pack.rb', line 68 def self.problems_line(items) values = Array(items).map { |item| escape(item) }.join(",") "PROBLEMS|[#{values}]" end |
.refusal_line(source:, reason:, failed_check:) ⇒ Object
33 34 35 |
# File 'lib/ace/compressor/models/context_pack.rb', line 33 def self.refusal_line(source:, reason:, failed_check:) "REFUSAL|source=#{escape(source)}|reason=#{escape(reason)}|failed_check=#{escape(failed_check)}" end |
.rule_line(text) ⇒ Object
60 61 62 |
# File 'lib/ace/compressor/models/context_pack.rb', line 60 def self.rule_line(text) "RULE|#{escape(text)}" end |
.section_line(title) ⇒ Object
48 49 50 |
# File 'lib/ace/compressor/models/context_pack.rb', line 48 def self.section_line(title) "SEC|#{escape(title)}" end |
.summary_line(text) ⇒ Object
52 53 54 |
# File 'lib/ace/compressor/models/context_pack.rb', line 52 def self.summary_line(text) "SUMMARY|#{escape(text)}" end |
.table_line(rows, table_id: nil, strategy: nil) ⇒ Object
101 102 103 104 105 106 107 108 109 |
# File 'lib/ace/compressor/models/context_pack.rb', line 101 def self.table_line(rows, table_id: nil, strategy: nil) fields = [] columns, data_rows = normalize_table_rows(rows) fields << "id=#{escape(table_id)}" unless table_id.to_s.strip.empty? fields << "strategy=#{escape(strategy)}" unless strategy.to_s.strip.empty? fields << "cols=#{escape(columns.join(","))}" unless columns.empty? fields << "rows=#{escape(encode_table_data_rows(data_rows))}" "TABLE|#{fields.join("|")}" end |
.table_separator_row?(row) ⇒ Boolean
169 170 171 |
# File 'lib/ace/compressor/models/context_pack.rb', line 169 def self.table_separator_row?(row) row.to_s.strip.match?(/\A\|?[-\s:|]+\|?\z/) end |
.tree_line(label, tree) ⇒ Object
92 93 94 |
# File 'lib/ace/compressor/models/context_pack.rb', line 92 def self.tree_line(label, tree) "TREE|#{escape(label)}|#{escape(tree)}" end |
.unresolved_line(kind, raw) ⇒ Object
138 139 140 |
# File 'lib/ace/compressor/models/context_pack.rb', line 138 def self.unresolved_line(kind, raw) "U|#{escape(kind)}|#{escape(raw)}" end |