Class: Archimate::FileFormats::ArchiFileWriter

Constant Summary collapse

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

Instance Attribute Summary

Attributes inherited from Serializer::Writer

#model

Instance Method Summary collapse

Methods included from Serializer::Archi::ViewNode

#archi_style_hash, #serialize_view_node

Methods included from Serializer::Archi::Relationship

#serialize_access_type, #serialize_relationship

Methods included from Serializer::Archi::Property

#serialize_property

Methods included from Serializer::Archi::Organization

#serialize_organization

Methods included from Serializer::Archi::Model

#serialize_model

Methods included from Serializer::Archi::Location

#serialize_location

Methods included from Serializer::Archi::Element

#serialize_element

Methods included from Serializer::Archi::Documentation

#serialize_documentation

Methods included from Serializer::Archi::Diagram

#serialize_diagram

Methods included from Serializer::Archi::Connection

#serialize_connection

Methods included from Serializer::Archi::Bounds

#serialize_bounds

Methods inherited from Serializer::Writer

#remove_nil_values, #serialize, write

Constructor Details

#initialize(model) ⇒ ArchiFileWriter

Returns a new instance of ArchiFileWriter.



26
27
28
29
# File 'lib/archimate/file_formats/archi_file_writer.rb', line 26

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

Instance Method Details

#process_text(doc_str) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/archimate/file_formats/archi_file_writer.rb', line 31

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



46
47
48
49
50
51
52
53
54
55
# File 'lib/archimate/file_formats/archi_file_writer.rb', line 46

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