From 972125d55ac8689bb0c911312138dba28a794de3 Mon Sep 17 00:00:00 2001 From: Andrei Kislichenko Date: Tue, 21 Apr 2026 21:30:14 -0400 Subject: [PATCH] Update lutaml-model to v0.8.0 --- Gemfile | 34 +++++++++++++++++++++++++++++ lib/relaton/cli/full_text_search.rb | 25 +++++++++++++-------- spec/fixtures/ietf_index.rxl | 4 ++-- 3 files changed, 52 insertions(+), 11 deletions(-) diff --git a/Gemfile b/Gemfile index 0176219..7aff848 100644 --- a/Gemfile +++ b/Gemfile @@ -3,6 +3,40 @@ source "https://rubygems.org" # Specify your gem's dependencies in gemspec gemspec +gem "lutaml-model", github: "lutaml/lutaml-model", branch: "main" +gem "relaton-bib", github: "relaton/relaton-bib", branch: "upd-lutaml-model-to-0-8-0" +gem "rfcxml", github: "metanorma/rfcxml", branch: "main" +gem "relaton", github: "relaton/relaton", branch: "upd-lutaml-model-to-0.8.0" + +gem "relaton-3gpp", github: "relaton/relaton-3gpp", branch: "upd-lutaml-model-to-0.8.0" +gem "relaton-bipm", github: "relaton/relaton-bipm", branch: "upd-lutaml-model-to-0.8.0" +gem "relaton-bsi", github: "relaton/relaton-bsi", branch: "upd-lutaml-model-to-0.8.0" +gem "relaton-calconnect", github: "relaton/relaton-calconnect", branch: "upd-lutaml-model-to-0.8.0" +gem "relaton-ccsds", github: "relaton/relaton-ccsds", branch: "upd-lutaml-model-to-0.8.0" +gem "relaton-cen", github: "relaton/relaton-cen", branch: "upd-lutaml-model-to-0.8.0" +gem "relaton-cie", github: "relaton/relaton-cie", branch: "upd-lutaml-model-to-0.8.0" +gem "relaton-doi", github: "relaton/relaton-doi", branch: "upd-lutaml-model-to-0.8.0" +gem "relaton-ecma", github: "relaton/relaton-ecma", branch: "upd-lutaml-model-to-0.8.0" +gem "relaton-etsi", github: "relaton/relaton-etsi", branch: "upd-lutaml-model-to-0.8.0" +gem "relaton-gb", github: "relaton/relaton-gb", branch: "upd-lutaml-model-to-0.8.0" +gem "relaton-iana", github: "relaton/relaton-iana", branch: "upd-lutaml-model-to-0.8.0" +gem "relaton-iec", github: "relaton/relaton-iec", branch: "upd-lutaml-model-to-0.8.0" +gem "relaton-ieee", github: "relaton/relaton-ieee", branch: "upd-lutaml-model-to-0.8.0" +gem "relaton-ietf", github: "relaton/relaton-ietf", branch: "upd-lutaml-model-to-0.8.0" +gem "relaton-iho", github: "relaton/relaton-iho", branch: "upd-lutaml-model-to-0.8.0" +gem "relaton-isbn", github: "relaton/relaton-isbn", branch: "upd-lutaml-model-to-0.8.0" +gem "relaton-iso", github: "relaton/relaton-iso", branch: "upd-lutaml-model-to-0.8.0" +gem "relaton-itu", github: "relaton/relaton-itu", branch: "upd-lutaml-model-to-0.8.0" +gem "relaton-jis", github: "relaton/relaton-jis", branch: "upd-lutaml-model-to-0.8.0" +gem "relaton-nist", github: "relaton/relaton-nist", branch: "upd-lutaml-model-to-0.8.0" +gem "relaton-oasis", github: "relaton/relaton-oasis", branch: "upd-lutaml-model-to-0.8.0" +gem "relaton-ogc", github: "relaton/relaton-ogc", branch: "upd-lutaml-model-to-0.8.0" +gem "relaton-omg", github: "relaton/relaton-omg", branch: "upd-lutaml-model-to-0.8.0" +gem "relaton-plateau", github: "relaton/relaton-plateau", branch: "upd-lutaml-model-to-0.8.0" +gem "relaton-un", github: "relaton/relaton-un", branch: "upd-lutaml-model-to-0.8.0" +gem "relaton-w3c", github: "relaton/relaton-w3c", branch: "upd-lutaml-model-to-0.8.0" +gem "relaton-xsf", github: "relaton/relaton-xsf", branch: "upd-lutaml-model-to-0.8.0" + gem "byebug", "~> 11.0" gem "equivalent-xml", "~> 0.6" gem "pry" diff --git a/lib/relaton/cli/full_text_search.rb b/lib/relaton/cli/full_text_search.rb index 778202f..62ad5f7 100644 --- a/lib/relaton/cli/full_text_search.rb +++ b/lib/relaton/cli/full_text_search.rb @@ -1,10 +1,13 @@ -# require "forwardable" +require "set" module Relaton class FullTextSeatch - # extend Forwardable - - # def_delegators :@collections, :<< + # Instance variables added by lutaml-model that form back-references + # (cycles) when a model is serialized. Skipping them keeps recursive + # traversal of a bibitem's object graph finite. + INTERNAL_IVARS = %i[ + @using_default @lutaml_register @lutaml_parent @lutaml_root @register_records + ].freeze # @return Regexp attr_reader :regex @@ -19,8 +22,7 @@ def initialize(collection) def search(text) @regex = %{(.*?)(.{0,20})(#{text})(.{0,20})(.*)} @matches = @collection.items.reduce({}) do |m, item| - # m + results(col, rgx) - res = result item + res = result item, Set.new m[item.id] = res if res.any? m end @@ -58,19 +60,24 @@ def print_attrs(attrs, indent) end # @param item [Relaton::Bibdata] + # @param seen [Set] object_ids already visited on this path # @return [Hash] - def result(item) + def result(item, seen) if item.is_a? String message $~ if item.match regex elsif item.respond_to? :reduce item.reduce([]) do |m, i| - res = result i + res = result i, seen m << res if res && !res.empty? m end else + return {} unless seen.add?(item.object_id) + item.instance_variables.reduce({}) do |m, var| - res = result item.instance_variable_get(var) + next m if INTERNAL_IVARS.include?(var) + + res = result item.instance_variable_get(var), seen m[var.to_s.tr(":@", "")] = res if res && !res.empty? m end diff --git a/spec/fixtures/ietf_index.rxl b/spec/fixtures/ietf_index.rxl index 746a702..8bf6782 100644 --- a/spec/fixtures/ietf_index.rxl +++ b/spec/fixtures/ietf_index.rxl @@ -390,7 +390,7 @@ as well as "Spamalot", the musical inspired by the movie. Informational - + rfc ietf @@ -431,7 +431,7 @@ some cities, usually based upon a central hub topology. Published - + rfc ietf