Sha256: 6ce1d8adafac2798925db9b5ddfd1223e170d5f195bfe7b31b70c08b5779c0a2

Contents?: true

Size: 1.64 KB

Versions: 6

Compression:

Stored size: 1.64 KB

Contents

# frozen_string_literal: true

module DrawioDsl
  # DrawioDsl is a DSL for draw-io diagrams.
  class XmlBuilder
    include KLog::Logging

    attr_reader :diagram

    def initialize(diagram)
      @diagram = diagram
    end

    def build
      xml_builder = Nokogiri::XML::Builder.new do |xml|
        build_diagram(xml)
      end
      xml_builder.to_xml.sub('<?xml version="1.0"?>', '').strip
    end

    private

    def build_diagram(xml)
      xml.mxfile(host: diagram.host) do
        diagram.pages.each do |page|
          build_page(xml, page)
        end
      end
    end

    # rubocop:disable  Metrics/MethodLength, Metrics/AbcSize, Metrics/BlockLength
    def build_page(xml, page)
      xml.diagram(id: page.id, name: page.name) do
        xml.mxGraphModel(
          dx: 0,
          dy: 0,
          background: page.background,
          grid: page.grid,
          gridSize: page.grid_size,
          guides: page.guides,
          tooltips: page.tooltips,
          connect: page.connect,
          arrows: page.arrows,
          fold: page.fold,
          page: page.page_no,
          pageScale: page.page_scale,
          pageWidth: page.page_width,
          pageHeight: page.page_height,
          math: page.math,
          shadow: page.page_shadow
        ) do
          xml.root do
            xml.mxCell(id: "#{page.id}-A")
            xml.mxCell(id: "#{page.id}-B", parent: "#{page.id}-A")
            page.nodes.all.each do |node|
              node.as_xml(xml) if node.classification == :shape
            end
          end
        end
      end
    end
    # rubocop:enable  Metrics/MethodLength, Metrics/AbcSize, Metrics/BlockLength
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
drawio_dsl-0.5.6 lib/drawio_dsl/xml_builder.rb
drawio_dsl-0.5.5 lib/drawio_dsl/xml_builder.rb
drawio_dsl-0.5.4 lib/drawio_dsl/xml_builder.rb
drawio_dsl-0.5.3 lib/drawio_dsl/xml_builder.rb
drawio_dsl-0.5.2 lib/drawio_dsl/xml_builder.rb
drawio_dsl-0.5.1 lib/drawio_dsl/xml_builder.rb