diff options
| author | marc <[email protected]> | 2015-07-03 16:44:45 +0200 |
|---|---|---|
| committer | marc <[email protected]> | 2015-07-03 16:44:45 +0200 |
| commit | c7c7937dcde9a94f2e5ee0549451b34e410803e0 (patch) | |
| tree | d06ccd49055e1474891a6b3d3d190e457e7e2304 | |
| parent | 1bec39cebaef6a98481f52587ecc0483b4defc08 (diff) | |
| download | caxlsx-c7c7937dcde9a94f2e5ee0549451b34e410803e0.tar.gz caxlsx-c7c7937dcde9a94f2e5ee0549451b34e410803e0.zip | |
Validates whether an image is acceptable through mime type
image/jpeg, image/png & image/gif are considered the allowed mime types
for an image. mimemagic gem is added as dependency in order to do the
checking.
Added tests to check against three supported mime types. A fake jpg
fixture (created with 'touch' command) has been added to test that
extension is no longer used.
| -rw-r--r-- | axlsx.gemspec | 1 | ||||
| -rw-r--r-- | examples/image1_fake.jpg | 0 | ||||
| -rw-r--r-- | lib/axlsx.rb | 1 | ||||
| -rw-r--r-- | lib/axlsx/drawing/pic.rb | 6 | ||||
| -rw-r--r-- | test/drawing/tc_pic.rb | 14 |
5 files changed, 14 insertions, 8 deletions
diff --git a/axlsx.gemspec b/axlsx.gemspec index 9fc19285..8e3cd9ca 100644 --- a/axlsx.gemspec +++ b/axlsx.gemspec @@ -20,6 +20,7 @@ Gem::Specification.new do |s| s.add_runtime_dependency 'nokogiri', '>= 1.4.1' s.add_runtime_dependency 'rubyzip', '~> 1.1.7' s.add_runtime_dependency "htmlentities", "~> 4.3.1" + s.add_runtime_dependency "mimemagic", "~> 0.3" s.add_development_dependency 'yard' s.add_development_dependency 'kramdown' diff --git a/examples/image1_fake.jpg b/examples/image1_fake.jpg new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/examples/image1_fake.jpg diff --git a/lib/axlsx.rb b/lib/axlsx.rb index c6f01b19..14456024 100644 --- a/lib/axlsx.rb +++ b/lib/axlsx.rb @@ -1,6 +1,7 @@ # encoding: UTF-8 require 'htmlentities' require 'axlsx/version.rb' +require 'mimemagic' require 'axlsx/util/simple_typed_list.rb' require 'axlsx/util/constants.rb' diff --git a/lib/axlsx/drawing/pic.rb b/lib/axlsx/drawing/pic.rb index 571e9047..b090c661 100644 --- a/lib/axlsx/drawing/pic.rb +++ b/lib/axlsx/drawing/pic.rb @@ -25,8 +25,8 @@ module Axlsx @picture_locking = PictureLocking.new(options) end - # allowed file extenstions - ALLOWED_EXTENSIONS = ['gif', 'jpeg', 'png', 'jpg'] + # allowed mime types + ALLOWED_MIME_TYPES = %w(image/jpeg image/png image/gif) # The name to use for this picture # @return [String] @@ -67,7 +67,7 @@ module Axlsx def image_src=(v) Axlsx::validate_string(v) - RestrictionValidator.validate 'Pic.image_src', ALLOWED_EXTENSIONS, File.extname(v.downcase).delete('.') + RestrictionValidator.validate 'Pic.image_src', ALLOWED_MIME_TYPES, MimeMagic.by_magic(File.open(v)).to_s raise ArgumentError, "File does not exist" unless File.exist?(v) @image_src = v end diff --git a/test/drawing/tc_pic.rb b/test/drawing/tc_pic.rb index 3cea49c0..066d9962 100644 --- a/test/drawing/tc_pic.rb +++ b/test/drawing/tc_pic.rb @@ -5,7 +5,10 @@ class TestPic < Test::Unit::TestCase def setup @p = Axlsx::Package.new ws = @p.workbook.add_worksheet - @test_img = File.dirname(__FILE__) + "/../../examples/image1.jpeg" + @test_img = @test_img_jpg = File.dirname(__FILE__) + "/../../examples/image1.jpeg" + @test_img_png = File.dirname(__FILE__) + "/../../examples/image1.png" + @test_img_gif = File.dirname(__FILE__) + "/../../examples/image1.gif" + @test_img_fake = File.dirname(__FILE__) + "/../../examples/image1_fake.jpg" @test_img_up = File.dirname(__FILE__) + "/../../examples/IMAGE1UP.JPEG" @image = ws.add_image :image_src => @test_img, :hyperlink => 'https://github.com/randym', :tooltip => "What's up doc?" end @@ -70,11 +73,12 @@ class TestPic < Test::Unit::TestCase end def test_image_src - assert_raise(ArgumentError) { @image.image_src = 49 } - assert_raise(ArgumentError) { @image.image_src = 'Unknown' } assert_raise(ArgumentError) { @image.image_src = __FILE__ } - assert_nothing_raised { @image.image_src = @test_img } - assert_equal(@image.image_src, @test_img) + assert_raise(ArgumentError) { @image.image_src = @test_img_fake } + assert_nothing_raised { @image.image_src = @test_img_gif } + assert_nothing_raised { @image.image_src = @test_img_png } + assert_nothing_raised { @image.image_src = @test_img_jpg } + assert_equal(@image.image_src, @test_img_jpg) end def test_image_src_downcase |
