Class: Drunker::Aggregator::Phpmd

Inherits:
Base
  • Object
show all
Defined in:
lib/drunker/aggregator/phpmd.rb,
lib/drunker/aggregator/phpmd/version.rb

Constant Summary collapse

VERSION =
"0.1.0"

Instance Method Summary collapse

Instance Method Details

#exit_status(layers) ⇒ Object



39
40
41
# File 'lib/drunker/aggregator/phpmd.rb', line 39

def exit_status(layers)
  layers.map { |layer| layer.invalid? ? 1 : layer.exit_status }.max
end

#run(layers) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/drunker/aggregator/phpmd.rb', line 4

def run(layers)
  pmd = REXML::Element.new("pmd")
  pmd.add_attribute("version", "@project.version@")
  pmd.add_attribute("timestamp", Time.now.iso8601)

  layers.each do |layer|
    if layer.invalid?
      STDERR.puts "ERROR: Invalid layer. build_id=#{layer.build_id}"
    else
      begin
        doc = REXML::Document.new(layer.stdout)

        doc.elements.each("pmd/file") do |file|
          pmd.add_element(file)
        end
      rescue REXML::ParseException => exn
        STDERR.puts "ERROR: XML parse error occurred. "
                      + "build_id=#{layer.build_id}, "
                      + "stdout=#{layer.stdout}, "
                      + "stderr=#{layer.stderr}, "
                      + "exit_status=#{layer.exit_status}, "
                      + "exception=#{exn.inspect}"
      end
    end
  end

  doc = REXML::Document.new
  doc << REXML::XMLDecl.new("1.0", "UTF-8")
  doc.context[:attribute_quote] = :double_quote
  doc.add_element(pmd)
  result = StringIO.new
  REXML::Formatters::Pretty.new.write(doc, result)
  puts result.string
end