ruby-filemagic 0.2.2 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +7 -1
- data/Rakefile +11 -11
- data/ext/filemagic.c +6 -5
- data/lib/filemagic.rb +35 -15
- data/lib/filemagic/version.rb +2 -2
- data/test/filemagic_test.rb +9 -8
- metadata +12 -6
data/README
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
== VERSION
|
4
4
|
|
5
|
-
This documentation refers to filemagic version 0.
|
5
|
+
This documentation refers to filemagic version 0.3.0
|
6
6
|
|
7
7
|
|
8
8
|
== DESCRIPTION
|
@@ -59,6 +59,12 @@ Rubyforge project:: <http://rubyforge.org/projects/ruby-filemagic>
|
|
59
59
|
* Jens Wille <mailto:jens.wille@uni-koeln.de>
|
60
60
|
|
61
61
|
|
62
|
+
== CREDITS
|
63
|
+
|
64
|
+
* Martin Carpenter <mailto:mcarpenter@free.fr> for Ruby 1.9.2 compatibility
|
65
|
+
and other improvements.
|
66
|
+
|
67
|
+
|
62
68
|
== COPYING
|
63
69
|
|
64
70
|
The filemagic extension library is copywrited free software by Travis Whitton
|
data/Rakefile
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require %q{lib/filemagic/version}
|
1
|
+
require %q{./lib/filemagic/version}
|
2
2
|
|
3
3
|
begin
|
4
4
|
require 'hen'
|
@@ -11,16 +11,16 @@ begin
|
|
11
11
|
},
|
12
12
|
|
13
13
|
:gem => {
|
14
|
-
:version
|
15
|
-
:summary
|
16
|
-
:authors
|
17
|
-
:email
|
18
|
-
:homepage
|
19
|
-
:files
|
20
|
-
:extensions
|
21
|
-
:extra_files
|
14
|
+
:version => FileMagic::VERSION,
|
15
|
+
:summary => 'Ruby bindings to the magic(4) library',
|
16
|
+
:authors => ['Travis Whitton', 'Jens Wille'],
|
17
|
+
:email => ['tinymountain@gmail.com', 'jens.wille@uni-koeln.de'],
|
18
|
+
:homepage => 'http://ruby-filemagic.rubyforge.org/',
|
19
|
+
:files => FileList['lib/**/*.rb', 'ext/**/*.c', 'test/*'].to_a,
|
20
|
+
:extensions => FileList['ext/**/extconf.rb'].to_a,
|
21
|
+
:extra_files => FileList['[A-Z]*', 'info/*'].to_a
|
22
22
|
}
|
23
23
|
}}
|
24
|
-
rescue LoadError
|
25
|
-
|
24
|
+
rescue LoadError => err
|
25
|
+
warn "Please install the `hen' gem first. (#{err})"
|
26
26
|
end
|
data/ext/filemagic.c
CHANGED
@@ -33,6 +33,7 @@ static void rb_magic_free(magic_t cookie) {
|
|
33
33
|
}
|
34
34
|
|
35
35
|
static VALUE rb_magic_init(VALUE self, VALUE flags) {
|
36
|
+
return Qnil;
|
36
37
|
}
|
37
38
|
|
38
39
|
/* Frees resources allocated */
|
@@ -70,7 +71,7 @@ static VALUE rb_magic_file(VALUE self, VALUE file) {
|
|
70
71
|
const char *m;
|
71
72
|
magic_t cookie;
|
72
73
|
|
73
|
-
m =
|
74
|
+
m = StringValuePtr(file);
|
74
75
|
GetMagicCookie(self, cookie);
|
75
76
|
if ((m = magic_file(cookie, m)) == NULL)
|
76
77
|
rb_raise(rb_FileMagicError, magic_error(cookie));
|
@@ -80,11 +81,11 @@ static VALUE rb_magic_file(VALUE self, VALUE file) {
|
|
80
81
|
|
81
82
|
/* Return a string describing the string buffer */
|
82
83
|
static VALUE rb_magic_buffer(VALUE self, VALUE buffer) {
|
83
|
-
int i =
|
84
|
+
int i = RSTRING_LEN(buffer);
|
84
85
|
const char *m;
|
85
86
|
magic_t cookie;
|
86
87
|
|
87
|
-
m =
|
88
|
+
m = StringValuePtr(buffer);
|
88
89
|
GetMagicCookie(self, cookie);
|
89
90
|
if ((m = magic_buffer(cookie, m, i)) == NULL)
|
90
91
|
rb_raise(rb_FileMagicError, magic_error(cookie));
|
@@ -110,7 +111,7 @@ static VALUE rb_magic_check(VALUE self, VALUE file) {
|
|
110
111
|
magic_t cookie;
|
111
112
|
|
112
113
|
GetMagicCookie(self, cookie);
|
113
|
-
m =
|
114
|
+
m = StringValuePtr(file);
|
114
115
|
retval = magic_check(cookie, m);
|
115
116
|
|
116
117
|
return INT2FIX(retval);
|
@@ -123,7 +124,7 @@ static VALUE rb_magic_compile(VALUE self, VALUE file) {
|
|
123
124
|
magic_t cookie;
|
124
125
|
|
125
126
|
GetMagicCookie(self, cookie);
|
126
|
-
m =
|
127
|
+
m = StringValuePtr(file);
|
127
128
|
retval = magic_compile(cookie, m);
|
128
129
|
|
129
130
|
return INT2FIX(retval);
|
data/lib/filemagic.rb
CHANGED
@@ -2,8 +2,8 @@ require 'filemagic.so'
|
|
2
2
|
|
3
3
|
class FileMagic
|
4
4
|
|
5
|
-
# Map
|
6
|
-
|
5
|
+
# Map flag names to their values (:name => Integer).
|
6
|
+
FLAGS_BY_SYM = [
|
7
7
|
:none, # No flags
|
8
8
|
:debug, # Turn on debugging
|
9
9
|
:symlink, # Follow symlinks
|
@@ -31,7 +31,9 @@ class FileMagic
|
|
31
31
|
flags.update(flag => const_defined?(const) && const_get(const))
|
32
32
|
}
|
33
33
|
|
34
|
-
|
34
|
+
# Map flag values to their names (Integer => :name).
|
35
|
+
FLAGS_BY_INT = FLAGS_BY_SYM.invert.update(0 => :none)
|
36
|
+
|
35
37
|
attr_writer :simplified
|
36
38
|
|
37
39
|
@fm = Hash.new { |fm, flags|
|
@@ -93,21 +95,22 @@ class FileMagic
|
|
93
95
|
|
94
96
|
# Build the actual flags from the named flags passed as arguments.
|
95
97
|
def build_flags(*flags)
|
96
|
-
|
98
|
+
int_flags = *flags
|
97
99
|
|
98
|
-
unless
|
99
|
-
|
100
|
+
unless int_flags.is_a?(Integer)
|
101
|
+
int_flags = MAGIC_NONE
|
100
102
|
|
101
103
|
flags.flatten.each { |flag|
|
102
|
-
if value = flag.is_a?(Integer) ? flag :
|
103
|
-
|
104
|
+
if value = flag.is_a?(Integer) ? flag : FLAGS_BY_SYM[flag.to_sym]
|
105
|
+
int_flags |= value
|
104
106
|
else
|
105
|
-
|
107
|
+
err = value.nil? ? 'no such flag' : 'flag not available'
|
108
|
+
raise ArgumentError, "#{err}: #{flag}"
|
106
109
|
end
|
107
110
|
}
|
108
111
|
end
|
109
112
|
|
110
|
-
|
113
|
+
int_flags
|
111
114
|
end
|
112
115
|
|
113
116
|
end
|
@@ -116,7 +119,7 @@ class FileMagic
|
|
116
119
|
def initialize(*flags)
|
117
120
|
fm_initialize(*flags)
|
118
121
|
|
119
|
-
@flags =
|
122
|
+
@flags = flags
|
120
123
|
@closed = false
|
121
124
|
end
|
122
125
|
|
@@ -132,22 +135,39 @@ class FileMagic
|
|
132
135
|
simplify_mime(fm_file(file), simplified)
|
133
136
|
end
|
134
137
|
|
138
|
+
# Returns the flags as integer.
|
139
|
+
def int_flags
|
140
|
+
@flags.first
|
141
|
+
end
|
142
|
+
|
143
|
+
# Returns the flags as array of symbols.
|
144
|
+
def flags
|
145
|
+
int, flags, log2 = int_flags, [], Math.log(2)
|
146
|
+
|
147
|
+
while int > 0
|
148
|
+
flags << FLAGS_BY_INT[flag = 2 ** Math.log(int).div(log2)]
|
149
|
+
int -= flag
|
150
|
+
end
|
151
|
+
|
152
|
+
flags.reverse
|
153
|
+
end
|
154
|
+
|
135
155
|
# Optionally cut off additional information after mime-type.
|
136
156
|
def buffer(buffer, simplified = simplified?)
|
137
157
|
simplify_mime(fm_buffer(buffer), simplified)
|
138
158
|
end
|
139
159
|
|
140
160
|
def setflags(*flags)
|
141
|
-
|
142
|
-
fm_setflags(
|
143
|
-
|
144
|
-
previous_flags
|
161
|
+
@flags = [self.class.build_flags(*flags)]
|
162
|
+
fm_setflags(int_flags)
|
145
163
|
end
|
164
|
+
|
146
165
|
alias_method :flags=, :setflags
|
147
166
|
|
148
167
|
def check(file = "\0")
|
149
168
|
fm_check(file)
|
150
169
|
end
|
170
|
+
|
151
171
|
alias_method :valid?, :check
|
152
172
|
|
153
173
|
def compile(file)
|
data/lib/filemagic/version.rb
CHANGED
data/test/filemagic_test.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'test/unit'
|
2
2
|
|
3
|
-
|
3
|
+
top_dir = File.join(File.dirname(__FILE__), '..')
|
4
|
+
$:.unshift(File.join(top_dir, 'lib'), File.join(top_dir, 'ext'))
|
4
5
|
require 'filemagic'
|
5
6
|
|
6
7
|
class TestFileMagic < Test::Unit::TestCase
|
@@ -26,7 +27,7 @@ class TestFileMagic < Test::Unit::TestCase
|
|
26
27
|
fm = FileMagic.new(FileMagic::MAGIC_SYMLINK | FileMagic::MAGIC_MIME)
|
27
28
|
|
28
29
|
res = fm.file(path_to('pylink'))
|
29
|
-
assert_equal('text/plain', res)
|
30
|
+
assert_equal('text/plain; charset=us-ascii', res)
|
30
31
|
|
31
32
|
fm.close
|
32
33
|
fm = FileMagic.new(FileMagic::MAGIC_COMPRESS)
|
@@ -70,17 +71,17 @@ class TestFileMagic < Test::Unit::TestCase
|
|
70
71
|
|
71
72
|
def test_setflags
|
72
73
|
fm = FileMagic.new(FileMagic::MAGIC_NONE)
|
73
|
-
assert_equal(
|
74
|
+
assert_equal([], fm.flags)
|
74
75
|
fm.setflags(FileMagic::MAGIC_SYMLINK)
|
75
|
-
assert_equal(
|
76
|
+
assert_equal([:symlink], fm.flags)
|
76
77
|
fm.close
|
77
78
|
end
|
78
79
|
|
79
80
|
def test_abbr
|
80
81
|
fm = FileMagic.new(:mime, :continue)
|
81
|
-
assert_equal(
|
82
|
+
assert_equal([:mime_type, :continue, :mime_encoding] , fm.flags)
|
82
83
|
fm.setflags(:symlink)
|
83
|
-
assert_equal(
|
84
|
+
assert_equal([:symlink], fm.flags)
|
84
85
|
fm.close
|
85
86
|
end
|
86
87
|
|
@@ -95,7 +96,7 @@ class TestFileMagic < Test::Unit::TestCase
|
|
95
96
|
def test_mahoro_mime_file
|
96
97
|
fm = FileMagic.new
|
97
98
|
fm.flags = FileMagic::MAGIC_MIME
|
98
|
-
assert_equal('text/x-c', fm.file(path_to('mahoro.c')))
|
99
|
+
assert_equal('text/x-c; charset=us-ascii', fm.file(path_to('mahoro.c')))
|
99
100
|
end
|
100
101
|
|
101
102
|
def test_mahoro_buffer
|
@@ -107,7 +108,7 @@ class TestFileMagic < Test::Unit::TestCase
|
|
107
108
|
def test_mahoro_mime_buffer
|
108
109
|
fm = FileMagic.new
|
109
110
|
fm.flags = FileMagic::MAGIC_MIME
|
110
|
-
assert_equal('text/x-c', fm.buffer(File.read(path_to('mahoro.c'))))
|
111
|
+
assert_equal('text/x-c; charset=us-ascii', fm.buffer(File.read(path_to('mahoro.c'))))
|
111
112
|
end
|
112
113
|
|
113
114
|
def test_mahoro_valid
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-filemagic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 19
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
8
|
+
- 3
|
9
|
+
- 0
|
10
|
+
version: 0.3.0
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Travis Whitton
|
@@ -15,7 +16,7 @@ autorequire:
|
|
15
16
|
bindir: bin
|
16
17
|
cert_chain: []
|
17
18
|
|
18
|
-
date: 2010-
|
19
|
+
date: 2010-09-10 00:00:00 +02:00
|
19
20
|
default_executable:
|
20
21
|
dependencies: []
|
21
22
|
|
@@ -48,6 +49,7 @@ files:
|
|
48
49
|
- TODO
|
49
50
|
- info/filemagic.rd
|
50
51
|
- info/example.rb
|
52
|
+
- ext/extconf.rb
|
51
53
|
has_rdoc: true
|
52
54
|
homepage: http://ruby-filemagic.rubyforge.org/
|
53
55
|
licenses: []
|
@@ -60,29 +62,33 @@ rdoc_options:
|
|
60
62
|
- README
|
61
63
|
- --line-numbers
|
62
64
|
- --inline-source
|
63
|
-
- --all
|
64
65
|
- --charset
|
65
66
|
- UTF-8
|
67
|
+
- --all
|
66
68
|
require_paths:
|
67
69
|
- lib
|
68
70
|
required_ruby_version: !ruby/object:Gem::Requirement
|
71
|
+
none: false
|
69
72
|
requirements:
|
70
73
|
- - ">="
|
71
74
|
- !ruby/object:Gem::Version
|
75
|
+
hash: 3
|
72
76
|
segments:
|
73
77
|
- 0
|
74
78
|
version: "0"
|
75
79
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
|
+
none: false
|
76
81
|
requirements:
|
77
82
|
- - ">="
|
78
83
|
- !ruby/object:Gem::Version
|
84
|
+
hash: 3
|
79
85
|
segments:
|
80
86
|
- 0
|
81
87
|
version: "0"
|
82
88
|
requirements: []
|
83
89
|
|
84
90
|
rubyforge_project: ruby-filemagic
|
85
|
-
rubygems_version: 1.3.
|
91
|
+
rubygems_version: 1.3.7
|
86
92
|
signing_key:
|
87
93
|
specification_version: 3
|
88
94
|
summary: Ruby bindings to the magic(4) library
|