From 400a24c23a9f1019caacdf29e589013d7aec3258 Mon Sep 17 00:00:00 2001 From: Ronald Tse Date: Sat, 8 Aug 2026 09:40:28 +0800 Subject: [PATCH] Fix: add visit_det_classification to Visitor + Json exporter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The ruby team's PR #26 added det_classification_node (payload builder) but missed the visitor method that actually calls it during traversal. Without visit_det_classification in the Visitor class and visit_det_classifications in visit_database, the exporter's to_json silently skipped all 163 DET classification entities — they were in the Database but never reached the JSON output. This commit adds: - visit_det_classifications(database) to Visitor (iterates database.det_classifications) - visit_det_classification in visit_database dispatch - visit_det_classification in Json exporter (calls det_classification_node) Verified: data-private rake browser:build_from_export[iec-61360-4] now produces 163 DET classification entities with non-null preferred_name. --- lib/opencdd/exporters/json.rb | 4 ++++ lib/opencdd/visitor.rb | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/lib/opencdd/exporters/json.rb b/lib/opencdd/exporters/json.rb index 6637cbc..88e9c22 100644 --- a/lib/opencdd/exporters/json.rb +++ b/lib/opencdd/exporters/json.rb @@ -57,6 +57,10 @@ def visit_list_of_unit(lou) @nodes << list_of_unit_node(lou) end + def visit_det_classification(det) + @nodes << det_classification_node(det) + end + # ───────────────────────────────────────────────────────────── # Public per-entity payload API # diff --git a/lib/opencdd/visitor.rb b/lib/opencdd/visitor.rb index 249498e..71da156 100644 --- a/lib/opencdd/visitor.rb +++ b/lib/opencdd/visitor.rb @@ -19,6 +19,7 @@ def visit_database(database) visit_relations(database) visit_view_controls(database) visit_list_of_units(database) + visit_det_classifications(database) self end @@ -60,6 +61,10 @@ def visit_list_of_units(database) each_sorted(database.list_of_units) { |l| visit_list_of_unit(l) } end + def visit_det_classifications(database) + each_sorted(database.det_classifications) { |d| visit_det_classification(d) } + end + # Single source of truth for sort-by-code traversal. Was # duplicated as `.sort_by { |x| x.code.to_s }` in 7 methods. def each_sorted(entities)