Module: BoringAvatars::Svg::Serializer

Defined in:
lib/boring_avatars/svg/serializer.rb

Class Method Summary collapse

Class Method Details

.call(element) ⇒ Object



11
12
13
# File 'lib/boring_avatars/svg/serializer.rb', line 11

def call(element)
  serialize_element(element).force_encoding(Encoding::UTF_8)
end

.escape(value) ⇒ Object

Raises:

  • (ArgumentError)


24
25
26
27
28
29
30
31
32
33
34
# File 'lib/boring_avatars/svg/serializer.rb', line 24

def escape(value)
  string = value.to_s
  raise ArgumentError, "value contains characters forbidden by XML 1.0" unless valid_xml_string?(string)

  string
    .gsub("&", "&")
    .gsub("<", "&lt;")
    .gsub(">", "&gt;")
    .gsub('"', "&quot;")
    .gsub("'", "&apos;")
end

.valid_xml_string?(value) ⇒ Boolean

Returns:

  • (Boolean)


15
16
17
18
19
20
21
22
# File 'lib/boring_avatars/svg/serializer.rb', line 15

def valid_xml_string?(value)
  value.valid_encoding? && value.codepoints.all? do |codepoint|
    codepoint == 0x09 || codepoint == 0x0A || codepoint == 0x0D ||
      codepoint.between?(0x20, 0xD7FF) ||
      codepoint.between?(0xE000, 0xFFFD) ||
      codepoint.between?(0x10000, 0x10FFFF)
  end
end