Create Decisions

How to build a DecisionCollection from scratch in Ruby and serialize it to YAML.

Build a single Decision

require "edoxen"

decision = Edoxen::Decision.new(
  identifier: [Edoxen::StructuredIdentifier.new(prefix: "ACME", number: "2026-Q1-001")],
  kind: "order",
  status: "decided",
  urn: "urn:acme:board:decision:2026-q1-dividend",
  dates: [Edoxen::DecisionDate.new(date: Date.new(2026, 3, 15), type: "decided")],
  brought_by_motions: ["urn:acme:board:motion:2026-q1-dividend"],
  about_topics: ["urn:acme:topic:2026-q1-dividend"],
  localizations: [
    Edoxen::Localization.new(
      language_code: "eng",
      script: "Latn",
      title: "Board Order Declaring Q1 2026 Dividend",
      subject: "Acme Corporation",
      actions: [
        Edoxen::Action.new(
          type: "orders",
          message: "The Board orders that a quarterly dividend of $0.45 per share be paid..."
        )
      ]
    )
  ]
)

Wrap in a collection

collection = Edoxen::DecisionCollection.new(
  metadata: Edoxen::DecisionMetadata.new(
    title: "Decisions of the 47th Acme Board Meeting — Q1 2026",
    date: Date.new(2026, 3, 15),
    source: "Acme Corporation Secretariat",
    meeting_urn: "urn:acme:board:meeting:2026-q1",
    source_urls: [
      Edoxen::SourceUrl.new(
        ref: "https://acme.com/board/2026-q1-decisions.pdf",
        format: "pdf",
        language_code: "eng",
        kind: "decisions_pdf"
      )
    ]
  ),
  decisions: [decision]
)

File.write("acme-2026-q1.yaml", collection.to_yaml)

Round-trip

reloaded = Edoxen::DecisionCollection.from_yaml(File.read("acme-2026-q1.yaml"))
reloaded.decisions.first.kind                    # => "order"
reloaded.decisions.first.localizations.first.title
# => "Board Order Declaring Q1 2026 Dividend"

Validate

validator = Edoxen::SchemaValidator.new
errors = validator.validate_file("acme-2026-q1.yaml")
errors.empty? or raise "schema validation failed: #{errors.map(&:to_clickable_format)}"

See also: Parsing YAML, Validation.