diff --git a/lib/iruby/display.rb b/lib/iruby/display.rb index 3f692d5..74b966a 100644 --- a/lib/iruby/display.rb +++ b/lib/iruby/display.rb @@ -1,3 +1,5 @@ +require "set" + module IRuby module Display class << self @@ -50,11 +52,15 @@ def protect(mime, data) ascii?(mime) ? data.to_s : [data.to_s].pack('m0') end + # Each of the following mime types must be a text type, + # but mime-types library tells us it is a non-text type. + FORCE_TEXT_TYPES = Set[ + "application/javascript", + "image/svg+xml" + ].freeze + def ascii?(mime) - case mime - when "application/javascript" - # Special case for application/javascript. - # This needs because mime-types tells us application/javascript a non-text type. + if FORCE_TEXT_TYPES.include?(mime) true else MIME::Type.new(mime).ascii? diff --git a/test/iruby/mime_test.rb b/test/iruby/mime_test.rb index d7517f8..10fffa9 100644 --- a/test/iruby/mime_test.rb +++ b/test/iruby/mime_test.rb @@ -19,6 +19,13 @@ class IRubyTest::MimeTest < IRubyTest::TestBase assert_equal(data, res["application/javascript"]) end + + test("image/svg+xml") do + data = 'SVG' + res = IRuby::Display.display(data, mime: "image/svg+xml") + assert_equal(data, + res["image/svg+xml"]) + end end end end