• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

pulibrary / tigerdata-app / b10fccf6-5ec9-4665-936f-349cab0ca8ed

28 Oct 2025 02:06PM UTC coverage: 87.382% (-3.9%) from 91.294%
b10fccf6-5ec9-4665-936f-349cab0ca8ed

Pull #2057

circleci

hectorcorrea
Force a change
Pull Request #2057: Dashboard displays projects straights from Mediaflux

49 of 69 new or added lines in 4 files covered. (71.01%)

930 existing lines in 39 files now uncovered.

2694 of 3083 relevant lines covered (87.38%)

296.77 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

100.0
/app/services/xml_element_builder.rb
1
# frozen_string_literal: true
UNCOV
2
class XmlElementBuilder < XmlNodeBuilder
2✔
UNCOV
3
  attr_reader :presenter, :name, :attributes, :content
2✔
UNCOV
4
  alias entry content
2✔
UNCOV
5
  delegate :blank?, to: :content
2✔
6

7
  # @return [Nokogiri::XML::Element] the XML element node
UNCOV
8
  def element
2✔
UNCOV
9
    @element ||= begin
4,278✔
UNCOV
10
                   created = @document.create_element(name)
1,444✔
UNCOV
11
                   @document.root = created
1,444✔
UNCOV
12
                   created
1,444✔
UNCOV
13
                 end
UNCOV
14
  end
15

16
  # @return [Nokogiri::XML::Element] the XML element node
UNCOV
17
  def build_attributes
2✔
UNCOV
18
    attributes.each do |key, attr_entry|
1,484✔
UNCOV
19
      value = attr_entry
2,879✔
UNCOV
20
      if attr_entry.is_a?(Hash) && attr_entry.key?(:object_method)
2,879✔
UNCOV
21
        allow_empty_attr = attr_entry.fetch(:allow_empty, true)
497✔
22

UNCOV
23
        message = attr_entry[:object_method]
497✔
UNCOV
24
        method_args = attr_entry[:args] || []
497✔
UNCOV
25
        method_args = @default_method_args + method_args
497✔
UNCOV
26
        value = presenter.send(message, *method_args)
497✔
27

UNCOV
28
        raise ArgumentError, "Value for #{key} cannot be nil" if value.nil? && !allow_empty_attr
496✔
UNCOV
29
      end
30

UNCOV
31
      element[key] = value unless value.nil?
2,839✔
UNCOV
32
    end
33

UNCOV
34
    element
1,444✔
UNCOV
35
  end
36

37
  # @return [String] the content for the XML element
UNCOV
38
  def build_content!
2✔
UNCOV
39
    allow_empty_content = entry.fetch(:allow_empty, true)
907✔
40

UNCOV
41
    message = entry[:object_method]
907✔
UNCOV
42
    method_args = entry[:args] || []
907✔
UNCOV
43
    method_args = @default_method_args + method_args
907✔
UNCOV
44
    @content = presenter.send(message, *method_args)
907✔
45

UNCOV
46
    raise ArgumentError, "Content for #{name} cannot be nil" if content.nil? && !allow_empty_content
907✔
UNCOV
47
    content
868✔
UNCOV
48
  end
49

50
  # rubocop:disable Metrics/AbcSize
51
  # rubocop:disable Metrics/CyclomaticComplexity
52
  # rubocop:disable Metrics/MethodLength
53
  # rubocop:disable Metrics/PerceivedComplexity
54
  #
55
  # @return [Nokogiri::XML::Element]
UNCOV
56
  def build
2✔
UNCOV
57
    if entry.is_a?(Hash) && entry.key?(:object_method)
1,523✔
UNCOV
58
      build_content!
907✔
UNCOV
59
    end
60

UNCOV
61
    built = build_attributes
1,484✔
UNCOV
62
    built.content = content
1,444✔
63

UNCOV
64
    built
1,444✔
UNCOV
65
  rescue ArgumentError => arg_error
UNCOV
66
    Rails.logger.warn("Error building XML project metadata: #{arg_error.message}")
79✔
UNCOV
67
    nil
79✔
UNCOV
68
  end
69
  # rubocop:enable Metrics/PerceivedComplexity
70
  # rubocop:enable Metrics/MethodLength
71
  # rubocop:enable Metrics/CyclomaticComplexity
72
  # rubocop:enable Metrics/AbcSize
73

74
  # @return [Nokogiri::XML::Element] the XML element node
UNCOV
75
  def node
2✔
UNCOV
76
    @node ||= build
2,925✔
UNCOV
77
  end
78

UNCOV
79
  def add_child(child)
2✔
UNCOV
80
    return if child.nil?
1,481✔
81

82
    # @see https://nokogiri.org/rdoc/Nokogiri/XML/Node.html#method-i-clone
UNCOV
83
    level = 1
1,402✔
UNCOV
84
    cloned = child.clone(level, document)
1,402✔
UNCOV
85
    node.add_child(cloned)
1,402✔
86

UNCOV
87
    cloned
1,402✔
UNCOV
88
  end
89

90
  # @param [ProjectXmlPresenter] presenter
91
  # @param [String] name
92
  # @param [Hash] attributes
93
  # @param [String] content
94
  # @param [Integer] index the index for the element (when there are multiple sibling nodes)
95
  # @param [Hash] options
UNCOV
96
  def initialize(presenter:, name:, attributes: {}, content: nil, index: nil, **options)
2✔
UNCOV
97
    super(**options)
1,523✔
98

UNCOV
99
    @presenter = presenter
1,523✔
UNCOV
100
    @name = name
1,523✔
101

UNCOV
102
    @attributes = attributes
1,523✔
UNCOV
103
    @content = content
1,523✔
104

UNCOV
105
    @index = index
1,523✔
106

UNCOV
107
    @default_method_args = []
1,523✔
UNCOV
108
    @default_method_args << @index unless @index.nil?
1,523✔
UNCOV
109
  end
UNCOV
110
end
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc