Class: Archimate::Cli::Cleanup

Inherits:
Object
  • Object
show all
Defined in:
lib/archimate/cli/cleanup.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(model, output, options) ⇒ Cleanup

Returns a new instance of Cleanup.



16
17
18
19
20
21
22
23
# File 'lib/archimate/cli/cleanup.rb', line 16

def initialize(model, output, options)
  @model = model
  @output = output
  @options = options
  @trash = Nokogiri::XML::Document.new("<deleted></deleted>")
  @model_set = nil
  @progressbar = ProgressIndicator.new(total: model.unreferenced_nodes.size, title: "Elements")
end

Instance Attribute Details

#modelObject (readonly)

Returns the value of attribute model.



9
10
11
# File 'lib/archimate/cli/cleanup.rb', line 9

def model
  @model
end

Class Method Details

.cleanup(input, output, options) ⇒ Object



11
12
13
14
# File 'lib/archimate/cli/cleanup.rb', line 11

def self.cleanup(input, output, options)
  cleaner = new(Archimate.read(input), output, options)
  cleaner.clean
end

Instance Method Details

#cleanObject



44
45
46
47
48
49
50
51
# File 'lib/archimate/cli/cleanup.rb', line 44

def clean
  return unless model

  remove_unreferenced_nodes
  puts "Found #{unref_set.size} model items unreferenced by diagram or relationships"
  Archimate::ArchiFileWriter.write(model, output)
  write_trash
end

#remove_unreferenced_nodesObject



25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/archimate/cli/cleanup.rb', line 25

def remove_unreferenced_nodes
  model.unreferenced_nodes.each do |id|
    ns = model.lookup(id)
    puts "Found duplicate ids: #{ns}" if ns.size > 1
    unreferenced_node = ns[0]
    trash.root.add_child unreferenced_node.dup
    prev_sib = unreferenced_node.previous_sibling
    if prev_sib.instance_of?(Nokogiri::XML::Text) && prev_sib.content.strip.empty?
      ns << prev_sib
    end
    ns.remove
    @progressbar.increment
  end
end

#write_trashObject



40
41
42
# File 'lib/archimate/cli/cleanup.rb', line 40

def write_trash
  options[:saveremoved].write(trash)
end