magic 0.2.6 → 0.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/{LICENSE → LICENSE.txt} +1 -1
- data/Rakefile +29 -0
- data/lib/magic.rb +1 -1
- data/lib/magic/database.rb +3 -0
- data/lib/magic/version.rb +1 -1
- data/magic.gemspec +53 -0
- data/test/fixtures/filelogo.jpg +0 -0
- data/test/fixtures/magic.txt +1 -0
- data/test/fixtures/magic_empty +1 -0
- data/test/fixtures/magic_jpeg +29 -0
- data/test/helper.rb +13 -0
- data/test/test_magic.rb +54 -0
- metadata +95 -78
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 919960b329ad47db4dcb6da5974f285dd143c78e
|
4
|
+
data.tar.gz: 0148ea45766514a784595db16e0f6c4164946942
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b102fff10f1ae47bce7b37b0cf4abb6f3e59d0b676dc93f095843ffb37317a8854a8286e60670b4ef3c4e423f15642161cb88bd346b54806bf9fff44c8c8a24a
|
7
|
+
data.tar.gz: 2ee1c69e1ea2424c14da32606b5f02e146e155a6826d9cf34b60e428a58fbc5afb72e1e96c35e67f5da68d60cc5b4febb2452ed30228f3005499e0cdd23ede60
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/{LICENSE → LICENSE.txt}
RENAMED
data/Rakefile
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
$:.unshift File.expand_path("../lib", __FILE__)
|
2
|
+
|
3
|
+
require "rubygems"
|
4
|
+
require "rubygems/specification"
|
5
|
+
require "rake/testtask"
|
6
|
+
require "rdoc/task"
|
7
|
+
require "rubygems/package_task"
|
8
|
+
require "bundler/gem_tasks"
|
9
|
+
require "magic"
|
10
|
+
|
11
|
+
def gemspec
|
12
|
+
file = File.expand_path("../magic.gemspec", __FILE__)
|
13
|
+
eval(File.read(file), binding, file)
|
14
|
+
end
|
15
|
+
|
16
|
+
Rake::TestTask.new(:test) do |test|
|
17
|
+
test.libs << "lib" << "test"
|
18
|
+
test.pattern = "test/**/test_*.rb"
|
19
|
+
test.verbose = true
|
20
|
+
end
|
21
|
+
|
22
|
+
RDoc::Task.new do |rdoc|
|
23
|
+
rdoc.rdoc_dir = "rdoc"
|
24
|
+
rdoc.title = "magic #{Magic::VERSION}"
|
25
|
+
rdoc.rdoc_files.include("README.rdoc")
|
26
|
+
rdoc.rdoc_files.include("lib/**/*.rb")
|
27
|
+
end
|
28
|
+
|
29
|
+
task :default => :test
|
data/lib/magic.rb
CHANGED
@@ -52,7 +52,7 @@ module Magic
|
|
52
52
|
# Magic.guess_string_mime_encoding("Magic® File™")
|
53
53
|
# # => "utf-8"
|
54
54
|
def guess_string_mime_encoding(string, *args)
|
55
|
-
guess(*args.unshift(:
|
55
|
+
guess(*args.unshift(:mime_encoding)) { |db| db.buffer(string) }
|
56
56
|
end
|
57
57
|
|
58
58
|
# Guesses mime type of given string
|
data/lib/magic/database.rb
CHANGED
@@ -29,6 +29,9 @@ module Magic
|
|
29
29
|
|
30
30
|
# Determine type of a file at given path
|
31
31
|
def file(filename)
|
32
|
+
if !File.exists?(filename)
|
33
|
+
raise Exception, "#{filename}: No such file or directory"
|
34
|
+
end
|
32
35
|
result = Api.magic_file(@magic_set, filename.to_s)
|
33
36
|
if result.null?
|
34
37
|
raise Exception, error
|
data/lib/magic/version.rb
CHANGED
data/magic.gemspec
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'magic/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "magic"
|
8
|
+
spec.version = Magic::VERSION
|
9
|
+
spec.authors = ["Kuba Kuźma"]
|
10
|
+
spec.email = ["kuba@jah.pl"]
|
11
|
+
spec.summary = %q{Determine file type and encoding using "magic" numbers}
|
12
|
+
spec.description = %q{Ruby FFI bindings to libmagic}
|
13
|
+
spec.homepage = "https://github.com/qoobaa/magic"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_runtime_dependency "ffi", [">= 0.6.3"]
|
22
|
+
spec.add_development_dependency "bundler", "~> 1.5"
|
23
|
+
spec.add_development_dependency "rake"
|
24
|
+
spec.add_development_dependency "test-unit", [">= 2.0"]
|
25
|
+
|
26
|
+
spec.post_install_message = <<-EOM
|
27
|
+
+-NOTE FOR LINUX USERS----------------------------------------------+
|
28
|
+
| |
|
29
|
+
| Install libmagic using your package manager, e.g. |
|
30
|
+
| |
|
31
|
+
| sudo apt-get install file |
|
32
|
+
| |
|
33
|
+
+-NOTE FOR WINDOWS USERS -------------------------------------------+
|
34
|
+
| |
|
35
|
+
| Install File for Windows from |
|
36
|
+
| |
|
37
|
+
| http://gnuwin32.sourceforge.net/packages/file.htm |
|
38
|
+
| |
|
39
|
+
| You'll also need to set your PATH environment variable to the |
|
40
|
+
| directory of the magic1.dll file |
|
41
|
+
| |
|
42
|
+
| set PATH=C:\\Program Files\\GnuWin32\\bin;%PATH% |
|
43
|
+
| |
|
44
|
+
+-NOTE FOR MAC OS USERS --------------------------------------------+
|
45
|
+
| |
|
46
|
+
| If you don't have libmagic.1.dylib file in your system, you need |
|
47
|
+
| to install it using port command |
|
48
|
+
| |
|
49
|
+
| sudo port install file |
|
50
|
+
| |
|
51
|
+
+-------------------------------------------------------------------+
|
52
|
+
EOM
|
53
|
+
end
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
Magic® File™
|
@@ -0,0 +1 @@
|
|
1
|
+
# This is an empty magic database file
|
@@ -0,0 +1,29 @@
|
|
1
|
+
#------------------------------------------------------------------------------
|
2
|
+
# JPEG images
|
3
|
+
# SunOS 5.5.1 had
|
4
|
+
#
|
5
|
+
# 0 string \377\330\377\340 JPEG file
|
6
|
+
# 0 string \377\330\377\356 JPG file
|
7
|
+
#
|
8
|
+
# both of which turn into "JPEG image data" here.
|
9
|
+
#
|
10
|
+
0 beshort 0xffd8 JPEG image data
|
11
|
+
!:mime image/jpeg
|
12
|
+
!:apple 8BIMJPEG
|
13
|
+
!:strength +1
|
14
|
+
>6 string JFIF \b, JFIF standard
|
15
|
+
# The following added by Erik Rossen <rossen@freesurf.ch> 1999-09-06
|
16
|
+
# in a vain attempt to add image size reporting for JFIF. Note that these
|
17
|
+
# tests are not fool-proof since some perfectly valid JPEGs are currently
|
18
|
+
# impossible to specify in magic(4) format.
|
19
|
+
# First, a little JFIF version info:
|
20
|
+
>>11 byte x \b %d.
|
21
|
+
>>12 byte x \b%02d
|
22
|
+
# Next, the resolution or aspect ratio of the image:
|
23
|
+
#>>13 byte 0 \b, aspect ratio
|
24
|
+
#>>13 byte 1 \b, resolution (DPI)
|
25
|
+
#>>13 byte 2 \b, resolution (DPCM)
|
26
|
+
#>>4 beshort x \b, segment length %d
|
27
|
+
# Next, show thumbnail info, if it exists:
|
28
|
+
>>18 byte !0 \b, thumbnail %dx
|
29
|
+
>>>19 byte x \b%d
|
data/test/helper.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
gem "test-unit"
|
3
|
+
require "test/unit"
|
4
|
+
|
5
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
|
6
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
7
|
+
require "magic"
|
8
|
+
|
9
|
+
class Test::Unit::TestCase
|
10
|
+
def fixture(filename)
|
11
|
+
File.join(File.dirname(__FILE__), "fixtures", filename)
|
12
|
+
end
|
13
|
+
end
|
data/test/test_magic.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require "helper"
|
4
|
+
|
5
|
+
class TestMagic < Test::Unit::TestCase
|
6
|
+
test "guess magic.txt mime" do
|
7
|
+
assert_equal "text/plain; charset=utf-8", Magic.guess_file_mime(fixture("magic.txt"))
|
8
|
+
end
|
9
|
+
|
10
|
+
test "guess magic.txt mime type" do
|
11
|
+
assert_equal "text/plain", Magic.guess_file_mime_type(fixture("magic.txt"))
|
12
|
+
end
|
13
|
+
|
14
|
+
test "guess magic.txt mime encoding" do
|
15
|
+
assert_equal "utf-8", Magic.guess_file_mime_encoding(fixture("magic.txt"))
|
16
|
+
end
|
17
|
+
|
18
|
+
test "guess filelogo.jpg mime" do
|
19
|
+
assert_equal "image/jpeg; charset=binary", Magic.guess_file_mime(fixture("filelogo.jpg"))
|
20
|
+
end
|
21
|
+
|
22
|
+
test "guess filelogo.jpg mime type" do
|
23
|
+
assert_equal "image/jpeg", Magic.guess_file_mime_type(fixture("filelogo.jpg"))
|
24
|
+
end
|
25
|
+
|
26
|
+
test "guess filelogo.jpg mime encoding" do
|
27
|
+
assert_equal "binary", Magic.guess_file_mime_encoding(fixture("filelogo.jpg"))
|
28
|
+
end
|
29
|
+
|
30
|
+
test "guess non-existing file mime" do
|
31
|
+
assert_raises Magic::Exception do
|
32
|
+
Magic.guess_file_mime(fixture("non-existing.file"))
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
test "guess filelogo.jpg mime with magic_jpeg database" do
|
37
|
+
assert_equal "image/jpeg; charset=binary", Magic.guess_file_mime(fixture("filelogo.jpg"), :database => fixture("magic_jpeg"))
|
38
|
+
end
|
39
|
+
|
40
|
+
test "guess filelogo.jpg mime with empty database" do
|
41
|
+
assert_equal "application/octet-stream; charset=binary", Magic.guess_file_mime(fixture("filelogo.jpg"), :database => fixture("magic_empty"))
|
42
|
+
end
|
43
|
+
|
44
|
+
test "guess with block" do
|
45
|
+
result = nil
|
46
|
+
Magic.guess(:mime) { |db| result = db.file(fixture("filelogo.jpg")) }
|
47
|
+
assert_equal "image/jpeg; charset=binary", result
|
48
|
+
end
|
49
|
+
|
50
|
+
test "guess encoding from string" do
|
51
|
+
utf8 = "utf-8".force_encoding(Encoding::ASCII_8BIT)
|
52
|
+
assert_equal utf8, Magic.guess_string_mime_encoding('áéíóú')
|
53
|
+
end
|
54
|
+
end
|
metadata
CHANGED
@@ -1,75 +1,100 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: magic
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease: false
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 2
|
9
|
-
- 6
|
10
|
-
version: 0.2.6
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.7
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
13
|
-
-
|
6
|
+
authors:
|
7
|
+
- Kuba Kuźma
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
11
|
+
date: 2014-04-22 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
22
14
|
name: ffi
|
23
|
-
|
24
|
-
|
25
|
-
none: false
|
26
|
-
requirements:
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
27
17
|
- - ">="
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
hash: 1
|
30
|
-
segments:
|
31
|
-
- 0
|
32
|
-
- 6
|
33
|
-
- 3
|
18
|
+
- !ruby/object:Gem::Version
|
34
19
|
version: 0.6.3
|
35
20
|
type: :runtime
|
36
|
-
version_requirements: *id001
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: test-unit
|
39
21
|
prerelease: false
|
40
|
-
|
41
|
-
|
42
|
-
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.6.3
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.5'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.5'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
43
52
|
- - ">="
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: test-unit
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.0'
|
50
62
|
type: :development
|
51
|
-
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.0'
|
52
69
|
description: Ruby FFI bindings to libmagic
|
53
|
-
email:
|
70
|
+
email:
|
71
|
+
- kuba@jah.pl
|
54
72
|
executables: []
|
55
|
-
|
56
73
|
extensions: []
|
57
|
-
|
58
74
|
extra_rdoc_files: []
|
59
|
-
|
60
|
-
|
75
|
+
files:
|
76
|
+
- ".gitignore"
|
77
|
+
- Gemfile
|
78
|
+
- LICENSE.txt
|
79
|
+
- README.rdoc
|
80
|
+
- Rakefile
|
61
81
|
- lib/magic.rb
|
62
82
|
- lib/magic/api.rb
|
63
|
-
- lib/magic/database.rb
|
64
83
|
- lib/magic/constants.rb
|
65
|
-
- lib/magic/
|
84
|
+
- lib/magic/database.rb
|
66
85
|
- lib/magic/errors.rb
|
67
|
-
-
|
68
|
-
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
86
|
+
- lib/magic/version.rb
|
87
|
+
- magic.gemspec
|
88
|
+
- test/fixtures/filelogo.jpg
|
89
|
+
- test/fixtures/magic.txt
|
90
|
+
- test/fixtures/magic_empty
|
91
|
+
- test/fixtures/magic_jpeg
|
92
|
+
- test/helper.rb
|
93
|
+
- test/test_magic.rb
|
94
|
+
homepage: https://github.com/qoobaa/magic
|
95
|
+
licenses:
|
96
|
+
- MIT
|
97
|
+
metadata: {}
|
73
98
|
post_install_message: |
|
74
99
|
+-NOTE FOR LINUX USERS----------------------------------------------+
|
75
100
|
| |
|
@@ -96,37 +121,29 @@ post_install_message: |
|
|
96
121
|
| sudo port install file |
|
97
122
|
| |
|
98
123
|
+-------------------------------------------------------------------+
|
99
|
-
|
100
124
|
rdoc_options: []
|
101
|
-
|
102
|
-
require_paths:
|
125
|
+
require_paths:
|
103
126
|
- lib
|
104
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
105
|
-
|
106
|
-
requirements:
|
127
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
107
129
|
- - ">="
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
version: "0"
|
113
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
|
-
none: false
|
115
|
-
requirements:
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
133
|
+
requirements:
|
116
134
|
- - ">="
|
117
|
-
- !ruby/object:Gem::Version
|
118
|
-
|
119
|
-
segments:
|
120
|
-
- 1
|
121
|
-
- 3
|
122
|
-
- 6
|
123
|
-
version: 1.3.6
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: '0'
|
124
137
|
requirements: []
|
125
|
-
|
126
138
|
rubyforge_project:
|
127
|
-
rubygems_version:
|
139
|
+
rubygems_version: 2.2.0
|
128
140
|
signing_key:
|
129
|
-
specification_version:
|
141
|
+
specification_version: 4
|
130
142
|
summary: Determine file type and encoding using "magic" numbers
|
131
|
-
test_files:
|
132
|
-
|
143
|
+
test_files:
|
144
|
+
- test/fixtures/filelogo.jpg
|
145
|
+
- test/fixtures/magic.txt
|
146
|
+
- test/fixtures/magic_empty
|
147
|
+
- test/fixtures/magic_jpeg
|
148
|
+
- test/helper.rb
|
149
|
+
- test/test_magic.rb
|