magikku 0.1.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +2 -0
- data/History.txt +2 -0
- data/README.rdoc +74 -4
- data/VERSION +1 -1
- data/ext/magikku_native/extconf.rb +2 -2
- data/lib/magikku.rb +5 -5
- data/samples/mimetype.rb +22 -0
- data/samples/mimetype2.rb +22 -0
- metadata +5 -2
data/.document
CHANGED
data/History.txt
ADDED
data/README.rdoc
CHANGED
@@ -1,17 +1,87 @@
|
|
1
|
-
=
|
1
|
+
= magikku
|
2
2
|
|
3
3
|
Ruby bindings for libmagic(3)
|
4
4
|
|
5
|
-
|
5
|
+
There are other variations of this binding. This one was written to ensure all features
|
6
|
+
of the library were bound correctly (including compiling and checking magic databases)
|
7
|
+
as well as to ensure compatability on different ruby environments.
|
8
|
+
|
9
|
+
Magikku includes FFI bindings as well as native ruby bindings.
|
6
10
|
|
7
11
|
== Synopsis
|
8
12
|
|
9
|
-
|
13
|
+
Here's a basic example identifying file contents.
|
14
|
+
|
15
|
+
#!/usr/bin/env ruby
|
16
|
+
|
17
|
+
require 'rubygems'
|
18
|
+
require 'magikku'
|
19
|
+
|
20
|
+
puts "This file is: " << Magikku.file(__FILE__)
|
21
|
+
puts "Mime Type: " << Magikku.file(__FILE__, :flags => Magikku::Flags::MIME)
|
22
|
+
|
23
|
+
|
24
|
+
... or string contents...
|
25
|
+
|
26
|
+
#!/usr/bin/env ruby
|
27
|
+
|
28
|
+
require 'rubygems'
|
29
|
+
require 'magikku'
|
30
|
+
|
31
|
+
dat = STDIN.read
|
32
|
+
puts "Data is: " << Magikku.string(dat)
|
33
|
+
puts "Mime Type: " << Magikku.string(dat, :flags => Magikku::Flags::MIME)
|
34
|
+
|
35
|
+
Sometimes it's better to initialize a single object to reuse for lots of files:
|
36
|
+
|
37
|
+
#!/usr/bin/env ruby
|
38
|
+
|
39
|
+
require 'rubygems'
|
40
|
+
require 'magikku'
|
41
|
+
|
42
|
+
def ident(magik, f)
|
43
|
+
magik.flags = Magikku::Flags::NONE
|
44
|
+
print "#{f} (#{magik.file(f)}) "
|
45
|
+
magik.flags = Magikku::Flags::MIME
|
46
|
+
puts magik.file(f)
|
47
|
+
|
48
|
+
if File.directory?(f)
|
49
|
+
Dir[File.join(f, "*")].each {|f2| ident(magik, f2) }
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
magik = Magikku.new
|
54
|
+
Dir["*"].each do |f|
|
55
|
+
ident(magik,f)
|
56
|
+
end
|
57
|
+
magik.close
|
58
|
+
|
59
|
+
|
60
|
+
== Requirements
|
61
|
+
|
62
|
+
* libmagic - The dynamic library is generally installed when buliding from
|
63
|
+
source, but your system may have a package available.
|
64
|
+
http://www.darwinsys.com/file/
|
65
|
+
|
66
|
+
Optional:
|
67
|
+
|
68
|
+
* ruby-ffi - If you do not wish to compile the C bindings, or if you want to
|
69
|
+
develop magikku, you will need to have ruby-FFI available. But, this is not
|
70
|
+
needed for basic use under MRI (Matz Ruby Interpreter). http://github.com/ffi/ffi
|
10
71
|
|
11
72
|
== Installation
|
12
73
|
|
13
|
-
|
74
|
+
As a gem:
|
75
|
+
|
76
|
+
(sudo)? gem install magikku
|
77
|
+
|
78
|
+
From github:
|
79
|
+
# !first ensure you have libmagic installed.
|
14
80
|
|
81
|
+
git clone http://github.com/emonti/magikku.git
|
82
|
+
cd magikku
|
83
|
+
rake compile
|
84
|
+
rake spec # to make sure everything works
|
15
85
|
|
16
86
|
== Copyright
|
17
87
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
1.0.0
|
@@ -21,10 +21,10 @@ require 'rbconfig'
|
|
21
21
|
|
22
22
|
extension_name = "magikku_native"
|
23
23
|
|
24
|
-
dir_config(extension_name)
|
24
|
+
dir_config(extension_name, '/usr/local/include', '/usr/local/lib')
|
25
25
|
|
26
26
|
unless have_library("magic") and
|
27
|
-
find_header("magic.h"
|
27
|
+
find_header("magic.h")
|
28
28
|
raise "You must install the libmagic library"
|
29
29
|
end
|
30
30
|
|
data/lib/magikku.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
|
2
2
|
require 'magikku/convenience'
|
3
3
|
|
4
|
-
|
4
|
+
begin
|
5
5
|
require 'magikku_native'
|
6
6
|
Magikku.class_eval{ extend(MagikkuHelpers) }
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
7
|
+
rescue LoadError
|
8
|
+
require 'magikku_ffi'
|
9
|
+
Magikku = MagikkuFFI
|
10
|
+
end
|
11
11
|
|
12
12
|
|
data/samples/mimetype.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$: << File.expand_path(File.join(File.dirname(__FILE__), "..","lib"))
|
4
|
+
|
5
|
+
require 'rubygems'
|
6
|
+
require 'magikku'
|
7
|
+
include Magikku::Flags
|
8
|
+
|
9
|
+
def ident_file(fname)
|
10
|
+
puts "#{fname} (#{Magikku.file(fname)}): "+
|
11
|
+
"#{Magikku.file(fname, :flags => MIME)}"
|
12
|
+
if File.directory?(fname)
|
13
|
+
Dir[File.join(fname, "*")].each {|f| ident_file(f)}
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
files = (ARGV.empty?)? [__FILE__] : ARGV
|
18
|
+
|
19
|
+
files.each {|file|
|
20
|
+
ident_file(file)
|
21
|
+
}
|
22
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
$: << File.expand_path(File.join(File.dirname(__FILE__), "..","lib"))
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require 'magikku'
|
6
|
+
|
7
|
+
def ident(magik, f)
|
8
|
+
magik.flags = Magikku::Flags::NONE
|
9
|
+
print "#{f} (#{magik.file(f)}) "
|
10
|
+
magik.flags = Magikku::Flags::MIME
|
11
|
+
puts magik.file(f)
|
12
|
+
|
13
|
+
if File.directory?(f)
|
14
|
+
Dir[File.join(f, "*")].each {|f2| ident(magik, f2) }
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
magik = Magikku.new
|
19
|
+
Dir["*"].each do |f|
|
20
|
+
ident(magik,f)
|
21
|
+
end
|
22
|
+
magik.close
|
metadata
CHANGED
@@ -3,10 +3,10 @@ name: magikku
|
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
|
-
- 0
|
7
6
|
- 1
|
8
7
|
- 0
|
9
|
-
|
8
|
+
- 0
|
9
|
+
version: 1.0.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Eric Monti
|
@@ -56,6 +56,7 @@ extra_rdoc_files:
|
|
56
56
|
- README.rdoc
|
57
57
|
files:
|
58
58
|
- .document
|
59
|
+
- History.txt
|
59
60
|
- LICENSE
|
60
61
|
- README.rdoc
|
61
62
|
- Rakefile
|
@@ -66,6 +67,8 @@ files:
|
|
66
67
|
- lib/magikku.rb
|
67
68
|
- lib/magikku/convenience.rb
|
68
69
|
- lib/magikku_ffi.rb
|
70
|
+
- samples/mimetype.rb
|
71
|
+
- samples/mimetype2.rb
|
69
72
|
- spec/magikku_behaviors.rb
|
70
73
|
- spec/magikku_ffi_spec.rb
|
71
74
|
- spec/magikku_spec.rb
|