Class: Newsmlg2::Builder

Inherits:
Object
  • Object
show all
Defined in:
lib/newsmlg2/builder.rb,
lib/newsmlg2/builder/node.rb

Overview

Generic, reflection-driven builder DSL: node methods are generated from each model's lutaml-model attribute metadata, so every current and future Newsmlg2 model is buildable without per-class builder code.

doc = Newsmlg2.build_news_item(guid: "...", lang: "en-GB") do |item|
item.item_meta do |meta|
  meta.item_class qcode: "ninat:text"
  meta.provider qcode: "nprov:acme" do |p|
    p.name "Acme News Agency"
  end
  meta.version_created "2026-08-30T12:00:00+00:00"
end
item. do |cm|
  cm.urgency 2
  cm.headline "Volcano erupts"
  cm.subject qcode: "medtop:20000962" do |s|
    s.name "Volcano"
  end
end
end

doc.to_xml  # => Newsmlg2::Document

Defined Under Namespace

Classes: Node

Constant Summary collapse

UNSET =
Object.new.freeze

Class Method Summary collapse

Class Method Details

.build(klass, attributes = {}, &block) ⇒ Object

Builds any item model and returns a Document.



33
34
35
36
37
38
# File 'lib/newsmlg2/builder.rb', line 33

def build(klass, attributes = {}, &block)
  attributes = attributes.transform_keys(lang: :xml_lang)
  model = klass.new(attributes)
  Builder::Node.new(model).apply(&block) if block
  Document.new(model)
end

.build_catalog_item(**attributes) ⇒ Object



56
57
58
# File 'lib/newsmlg2/builder.rb', line 56

def build_catalog_item(**attributes, &)
  build(Newsmlg2::CatalogItem, attributes, &)
end

.build_concept_item(**attributes) ⇒ Object



48
49
50
# File 'lib/newsmlg2/builder.rb', line 48

def build_concept_item(**attributes, &)
  build(Newsmlg2::ConceptItem, attributes, &)
end

.build_knowledge_item(**attributes) ⇒ Object



52
53
54
# File 'lib/newsmlg2/builder.rb', line 52

def build_knowledge_item(**attributes, &)
  build(Newsmlg2::KnowledgeItem, attributes, &)
end

.build_news_item(**attributes) ⇒ Object



40
41
42
# File 'lib/newsmlg2/builder.rb', line 40

def build_news_item(**attributes, &)
  build(Newsmlg2::NewsItem, attributes, &)
end

.build_news_message(**attributes) ⇒ Object



64
65
66
# File 'lib/newsmlg2/builder.rb', line 64

def build_news_message(**attributes, &)
  build(Newsmlg2::NewsMessage, attributes, &)
end

.build_package_item(**attributes) ⇒ Object



44
45
46
# File 'lib/newsmlg2/builder.rb', line 44

def build_package_item(**attributes, &)
  build(Newsmlg2::PackageItem, attributes, &)
end

.build_planning_item(**attributes) ⇒ Object



60
61
62
# File 'lib/newsmlg2/builder.rb', line 60

def build_planning_item(**attributes, &)
  build(Newsmlg2::PlanningItem, attributes, &)
end