loading
Generated 2025-10-08T23:59:57+00:00

All Files ( 100.0% covered at 3.73 hits/line )

3 files in total.
33 relevant lines, 33 lines covered and 0 lines missed. ( 100.0% )
10 total branches, 10 branches covered and 0 branches missed. ( 100.0% )
File % covered Lines Relevant Lines Lines covered Lines missed Avg. Hits / Line Branch Coverage Branches Covered branches Missed branches
lib/petail.rb 100.00 % 24 13 13 0 1.23 100.00 % 2 2 0
lib/petail/xml/deserializer.rb 100.00 % 25 13 13 0 4.85 100.00 % 6 6 0
lib/petail/xml/serializer.rb 100.00 % 15 7 7 0 6.29 100.00 % 2 2 0

lib/petail.rb

100.0% lines covered

100.0% branches covered

13 relevant lines. 13 lines covered and 0 lines missed.
2 total branches, 2 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "petail/payload"
  3. 1 require "petail/xml/deserializer"
  4. 1 require "petail/xml/serializer"
  5. # Main namespace.
  6. 1 module Petail
  7. 1 MEDIA_TYPE_JSON = "application/problem+json"
  8. 1 MEDIA_TYPE_XML = "application/problem+xml"
  9. 1 TYPES = %i[json xml].freeze
  10. 1 def self.[](**) = Payload.for(**)
  11. 1 def self.new(**) = Payload.for(**)
  12. 1 def self.from_json(...) = Payload.from_json(...)
  13. 1 def self.from_xml(...) = Payload.from_xml(...)
  14. 1 def self.media_type_for key, types: TYPES
  15. 4 then: 2 else: 2 types.include?(key) ? const_get("MEDIA_TYPE_#{key.upcase}") : ""
  16. end
  17. end

lib/petail/xml/deserializer.rb

100.0% lines covered

100.0% branches covered

13 relevant lines. 13 lines covered and 0 lines missed.
6 total branches, 6 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Petail
  3. 1 module XML
  4. # Converts an XML element into a Hash.
  5. 1 Deserializer = lambda do |node, attributes = {}|
  6. 9 then: 7 if node.has_elements?
  7. 7 node.each_element do |element|
  8. 11 then: 6 if element.name == "i"
  9. 6 attributes[node.name.to_sym] ||= []
  10. 6 else: 5 attributes[node.name.to_sym].push element.text
  11. 5 then: 3 elsif element.elements.empty?
  12. 3 attributes[element.name.to_sym] = element.text
  13. else: 2 else
  14. 2 attributes = {element.name.to_sym => Deserializer.call(element, attributes)}
  15. end
  16. end
  17. else: 2 else
  18. 2 attributes[node.name.to_sym] = node.text
  19. end
  20. 9 attributes
  21. end
  22. end
  23. end

lib/petail/xml/serializer.rb

100.0% lines covered

100.0% branches covered

7 relevant lines. 7 lines covered and 0 lines missed.
2 total branches, 2 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Petail
  3. 1 module XML
  4. # Converts name and value into an XML element.
  5. 1 Serializer = lambda do |name, value, node|
  6. 16 then: 3 if value.is_a? Array
  7. 3 element = node.add_element name.to_s
  8. 9 value.map { |item| element.add_element("i").add_text item.to_s }
  9. else: 13 else
  10. 13 node.add_element(name.to_s).add_text value.to_s
  11. end
  12. end
  13. end
  14. end