image_validator 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.markdown ADDED
@@ -0,0 +1,17 @@
1
+ # ImageValidator
2
+
3
+ A simple image file validator using the identify command line app.
4
+
5
+ Checks to see if an image is valid.
6
+
7
+ ## Uage
8
+
9
+ ImageValidator.valid?(file)
10
+
11
+ `file` can be an IO, a filename or image data in a string. Returns true if the image exists.
12
+
13
+
14
+ ImageValidator.valid?("missing_image.png") # => false
15
+ ImageValidator.valid?("") # => false
16
+ ImageValidator.valid?(File.open("an_image_file.png")) # => true
17
+ # etc…
@@ -0,0 +1,31 @@
1
+ module ImageValidator
2
+ def valid?(file)
3
+ file = thing_to_io(file)
4
+ check_image_magick_is_available
5
+ IO.popen("identify - &> /dev/null", "w") do |identify|
6
+ some_content_has_been_read = false
7
+ while blk = file.read(1024**2)
8
+ identify << blk
9
+ some_content_has_been_read = true if blk != ""
10
+ end
11
+ return false unless some_content_has_been_read
12
+ end
13
+ $?.success?
14
+ end
15
+
16
+ protected
17
+ def check_image_magick_is_available
18
+ raise "identify command not found, please install imagemagick" if `which identify` == ''
19
+ end
20
+
21
+ def thing_to_io(thing)
22
+ return thing unless thing.is_a?(String)
23
+
24
+ if (File.exists?(thing) rescue false)
25
+ File.open(thing)
26
+ else
27
+ StringIO.new(thing, "rb")
28
+ end
29
+ end
30
+ extend self
31
+ end
@@ -0,0 +1,34 @@
1
+ I'm a dolphin!
2
+
3
+
4
+ ..
5
+ :` ``´:..
6
+ ´:`:. ``´:.
7
+ : `-:. `´:.
8
+ : ::´ .::::::::...
9
+ : :´` ``´::.
10
+ :´ `´::
11
+ :´ `:.
12
+ .´ `´:
13
+ : ´:
14
+ :´ ´:
15
+ .: :.
16
+ :´ `:
17
+ :´ :
18
+ : :
19
+ : .:::::::: .: :
20
+ : .:::::::´´´´; :` ;
21
+ : ::::´` : :``::. . :. :
22
+ .´ .::´` : .´ `´:::. ` :
23
+ : .:´` ; .: `´: . : :
24
+ : .´ :` ..::´ `: `-. `:..:
25
+ ; .: ```` `:. ´:. ´:
26
+ : :´ `´;.`: :
27
+ : : `:.:. :
28
+ :´´´ : `´::;
29
+ :´ :
30
+ : ':
31
+ ´ . ´.
32
+ ; :::`:. `.
33
+ : :´ `´. :
34
+
Binary file
Binary file
Binary file
@@ -0,0 +1,62 @@
1
+ require File.join(File.dirname(__FILE__), "test_helper")
2
+ require 'fileutils'
3
+
4
+ class ImageValidatorTest < Test::Unit::TestCase
5
+ def test_an_invalid_image
6
+ name = "dolphin.txt"
7
+ assert_invalid(fixture(name))
8
+ assert_invalid(fixture_filename(name))
9
+ assert_invalid(fixture_as_string(name))
10
+ end
11
+
12
+ def test_a_missing_image
13
+ name = "your_face"
14
+ assert_invalid(StringIO.new("", "rb"))
15
+ assert_invalid(name)
16
+ assert_invalid("")
17
+ end
18
+
19
+ def test_a_png
20
+ name = "space-lincoln.png"
21
+ assert_valid(fixture(name))
22
+ assert_valid(fixture_filename(name))
23
+ assert_valid(fixture_as_string(name))
24
+ end
25
+
26
+ def test_a_gif
27
+ name = "space-lincoln.gif"
28
+ assert_valid(fixture(name))
29
+ assert_valid(fixture_filename(name))
30
+ assert_valid(fixture_as_string(name))
31
+ end
32
+
33
+ def test_a_jpeg
34
+ name = "space-lincoln.jpg"
35
+ assert_valid(fixture(name))
36
+ assert_valid(fixture_filename(name))
37
+ assert_valid(fixture_as_string(name))
38
+ end
39
+ end
40
+
41
+ class ImageValidatorWithNoImageMagickTest < Test::Unit::TestCase
42
+ def setup
43
+ @fake_bin = File.expand_path(File.join(ENV["TMPDIR"], "ImageValidatorWithNoImageMagickTest_bin"))
44
+ Dir.mkdir(@fake_bin)
45
+ File.symlink(`which which`.chomp, File.join(@fake_bin, "which"))
46
+
47
+ @orig_path = ENV["PATH"]
48
+ ENV["PATH"] = @fake_bin
49
+ end
50
+
51
+ def test_should_explode_if_image_magick_is_missing
52
+ e = assert_raise(RuntimeError){
53
+ assert_valid(fixture("space-lincoln.png"))
54
+ }
55
+ assert_equal "identify command not found, please install imagemagick", e.message
56
+ end
57
+
58
+ def teardown
59
+ FileUtils.rm_rf(@fake_bin)
60
+ ENV["PATH"] = @orig_path
61
+ end
62
+ end
@@ -0,0 +1,26 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
2
+
3
+ require "image_validator"
4
+ require "test/unit"
5
+
6
+ class Test::Unit::TestCase
7
+ def fixture(name)
8
+ File.open(fixture_filename(name), "rb")
9
+ end
10
+
11
+ def fixture_filename(name)
12
+ File.join(File.dirname(__FILE__), "fixtures", name)
13
+ end
14
+
15
+ def fixture_as_string(name)
16
+ fixture(name).read
17
+ end
18
+
19
+ def assert_valid(image)
20
+ assert ImageValidator.valid?(image), "Expected image to be valid"
21
+ end
22
+
23
+ def assert_invalid(image)
24
+ assert !ImageValidator.valid?(image), "Expected image to be invalid"
25
+ end
26
+ end
metadata ADDED
@@ -0,0 +1,63 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: image_validator
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Tom Lea
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2010-02-02 00:00:00 +00:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description:
17
+ email: contrib@tomlea.co.uk
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README.markdown
24
+ files:
25
+ - README.markdown
26
+ - test/fixtures/dolphin.txt
27
+ - test/fixtures/space-lincoln.gif
28
+ - test/fixtures/space-lincoln.jpg
29
+ - test/fixtures/space-lincoln.png
30
+ - test/image_validator_test.rb
31
+ - test/test_helper.rb
32
+ - lib/image_validator.rb
33
+ has_rdoc: true
34
+ homepage: http://tomlea.co.uk
35
+ licenses: []
36
+
37
+ post_install_message:
38
+ rdoc_options:
39
+ - --main
40
+ - README.markdown
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: "0"
48
+ version:
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: "0"
54
+ version:
55
+ requirements: []
56
+
57
+ rubyforge_project: image_validator
58
+ rubygems_version: 1.3.5
59
+ signing_key:
60
+ specification_version: 3
61
+ summary: A simple wrapper around the ImageMagick command line to check if an image is valid.
62
+ test_files: []
63
+