lib/metanorma/modspec/cleanup.rb in mn-requirements-0.1.5 vs lib/metanorma/modspec/cleanup.rb in mn-requirements-0.1.6

- old
+ new

@@ -1,30 +1,43 @@ module Metanorma class Requirements class Modspec < Default + REQT_TYPE_NORM = { + requirement: "general", + recommendation: "general", + permission: "general", + requirements_class: "class", + requirement_class: "class", + recommendation_class: "class", + permission_class: "class", + conformance_test: "verification", + conformance_class: "conformanceclass", + abstract_test: "abstracttest", + }.freeze + def requirement_type_cleanup(reqt) - reqt["type"] = case reqt["type"] - when "requirement", "recommendation", "permission" - "general" - when "requirements_class" then "class" - when "conformance_test" then "verification" - when "conformance_class" then "conformanceclass" - when "abstract_test" then "abstracttest" - else reqt["type"] - end + ret = REQT_TYPE_NORM[reqt["type"]&.to_sym] or return + reqt["type"] = ret end def requirement_metadata_component_tags %w(test-purpose test-method test-method-type conditions part description - reference step requirement permission recommendation guidance) + reference step guidance) + + requirement_metadata_requirement_tags end + def requirement_metadata_requirement_tags + %w(conformance-test conformance-class abstract-test requirement-class + recommendation-class permission-class requirement permission + recommendation) + end + def requirement_metadata1(reqt, dlist, ins) ins1 = super dlist.xpath("./dt").each do |e| - tag = e&.text&.gsub(/ /, "-")&.downcase - next unless requirement_metadata_component_tags.include? tag + tag = e.text&.gsub(/ /, "-")&.downcase + next unless requirement_metadata_component_tags.include?(tag) ins1.next = requirement_metadata1_component(e, tag) ins1 = ins1.next end end @@ -34,13 +47,13 @@ val.name = tag val.xpath("./dl").each do |d| requirement_metadata1(val, d, d) d.remove end - if REQS.include?(term.text) && !val.text.empty? + requirement_metadata_requirement_tags.include?(term.text) && + !val.text.empty? and val.children = "<identifier>#{val.text.strip}</identifier>" - end val end # separate from default model requirement_metadata_cleanup, # which extracts model:: ogc into reqt["model"] @@ -57,23 +70,35 @@ v.children = v.at("./link/@target").text end end def requirement_metadata_to_component(reqt) - xpath = requirement_metadata_component_tags - - %w(description requirement permission recommendation) + xpath = requirement_metadata_component_tags - %w(description) - + requirement_metadata_requirement_tags reqt.xpath(xpath.map { |x| ".//#{x}" }.join(" | ")).each do |c| c["class"] = c.name c.name = "component" end end def requirement_metadata_to_requirement(reqt) - reqt.xpath("./requirement | ./permission | ./recommendation") - .each do |c| + xpath = requirement_metadata_requirement_tags + reqt.xpath(xpath.map { |x| "./#{x}" }.join(" | ")).each do |c| c["id"] = Metanorma::Utils::anchor_or_uuid c["model"] = reqt["model"] # all requirements must have a model + requirement_metadata_to_requirement1(c) end + end + + def requirement_metadata_to_requirement1(reqt) + reqt["type"] = reqt.name.sub(/-/, "_") + reqt.name = + case reqt.name + when "recommendation-class", "recommendation" then "recommendation" + when "permission-class", "permission" then "permission" + else "requirement" + end + requirement_type_cleanup(reqt) end def requirement_subparts_to_blocks(reqt) reqt.xpath(".//component | .//description").each do |c| next if %w(p ol ul dl table component description)