module ZendeskAppsSupport::Validations::Svg

Constants

PLACEHOLDER_SVG_MARKUP

Public Class Methods

call(package) click to toggle source
# File lib/zendesk_apps_support/validations/svg.rb, line 55
def call(package)
  errors = []

  package.svg_files.each do |svg|
    if contains_embedded_bitmap?(svg.read)
      rewrite_svg(svg, PLACEHOLDER_SVG_MARKUP, package, errors)
    else
      markup = Loofah.xml_fragment(svg.read)
                     .scrub!(@strip_declaration)
                     .scrub!(@strip_spaces_between_css_attrs)
                     .to_xml.strip

      clean_markup = Loofah.xml_fragment(markup)
                           .scrub!(:prune)
                           .scrub!(@empty_malformed_markup)
                           .to_xml

      next if clean_markup == markup
      rewrite_svg(svg, clean_markup, package, errors)
    end
  end
  errors
end
contains_embedded_bitmap?(markup) click to toggle source
# File lib/zendesk_apps_support/validations/svg.rb, line 37
def contains_embedded_bitmap?(markup)
  Nokogiri::XML(markup).css('//image').any?
end
rewrite_svg(svg, new_markup, package, errors) click to toggle source
# File lib/zendesk_apps_support/validations/svg.rb, line 41
def rewrite_svg(svg, new_markup, package, errors)
  warning_string = if contains_embedded_bitmap?(svg.read)
                     'txt.apps.admin.warning.app_build.bitmap_in_svg'
                   else
                     'txt.apps.admin.warning.app_build.sanitised_svg'
                   end

  package.warnings << I18n.t(warning_string, svg: svg.relative_path)
  compressed_new_markup = new_markup.tr("\n", '').squeeze(' ').gsub(/\>\s+\</, '><')
  IO.write(svg.absolute_path, compressed_new_markup)
rescue
  errors << ValidationError.new(:dirty_svg, svg: svg.relative_path)
end