Class: Archimate::FileFormats::Serializer::Archi::ArchiFileWriter

Inherits:
Writer
  • Object
show all
Includes:
Bounds, Connection, Diagram, Documentation, Element, Model, Organization, Property, Relationship, ViewNode, Viewpoint3
Defined in:
lib/archimate/file_formats/serializer/archi/archi_file_writer.rb

Constant Summary collapse

TEXT_SUBSTITUTIONS =
[
  ['
', '
'],
  ['"', '"'],
  ['>', '>'],
  ['&', '&']
].freeze

Constants included from Viewpoint3

Viewpoint3::VIEWPOINT_INDEX

Instance Attribute Summary

Attributes inherited from Writer

#model

Instance Method Summary collapse

Methods included from Viewpoint3

#serialize_viewpoint

Methods included from ViewNode

#archi_style_hash, #serialize_view_node

Methods included from Relationship

#serialize_access_type, #serialize_relationship

Methods included from Property

#serialize_property

Methods included from Organization

#serialize_organization

Methods included from Model

#serialize_model

Methods included from Element

#element_attrs, #mapped_element_name, #serialize_element

Methods included from Documentation

#serialize_documentation

Methods included from Diagram

#serialize_diagram

Methods included from Connection

#serialize_bendpoint, #serialize_connection

Methods included from Bounds

#serialize_bounds

Methods inherited from Writer

#serialize, write

Constructor Details

#initialize(model) ⇒ ArchiFileWriter

Returns a new instance of ArchiFileWriter.



29
30
31
32
# File 'lib/archimate/file_formats/serializer/archi/archi_file_writer.rb', line 29

def initialize(model)
  super
  @version = "3.1.1"
end

Instance Method Details

#process_text(doc_str) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/archimate/file_formats/serializer/archi/archi_file_writer.rb', line 34

def process_text(doc_str)
  %w(documentation content name).each do |tag|
    TEXT_SUBSTITUTIONS.each do |from, to|
      doc_str.gsub!(%r{<#{tag}>([^<]*#{from}[^<]*)</#{tag}>}) do |str|
        str.gsub(from, to)
      end
    end
  end
  doc_str.gsub(
    %r{<(/)?archimate:}, "<\\1"
  ).gsub(
    %r{<(/)?model}, "<\\1archimate:model"
  )
end

#write(archifile_io) ⇒ Object



49
50
51
52
53
54
55
56
57
58
# File 'lib/archimate/file_formats/serializer/archi/archi_file_writer.rb', line 49

def write(archifile_io)
  builder = Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
    serialize_model(xml, model)
  end
  archifile_io.write(
    process_text(
      builder.to_xml
    )
  )
end