Module: FileType

Defined in:
lib/coderay/helpers/filetype.rb

Overview

FileType

A simple filetype recognizer

Author: murphy (mail to murphy cYcnus de)

Version: 0.1 (2005.september.1)

Documentation

TODO

Constant Summary collapse

UnknownFileType =
Class.new Exception
TypeFromExt =
{
	'rb' => :ruby,
	'rbw' => :ruby,
	'cpp' => :cpp,
	'c' => :c,
	'h' => :c,
	'xml' => :xml,
	'htm' => :html,
	'html' => :html,
}
TypeFromShebang =
/\b(?:ruby|perl|python|sh)\b/
TypeFromName =
{
	'Rakefile' => :ruby,
	'Rantfile' => :ruby,
}

Class Method Summary collapse

Class Method Details

.[](filename, read_shebang = false) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/coderay/helpers/filetype.rb', line 19

def [] filename, read_shebang = false
	name = File.basename filename
	ext = File.extname name
	ext.sub!(/^\./, '')  # delete the leading dot
	
	type = 
		TypeFromExt[ext] || 
		TypeFromExt[ext.downcase] || 
		TypeFromName[name] ||
		TypeFromName[name.downcase]
	type ||= shebang(filename) if read_shebang

	type
end

.fetch(filename, default = nil, read_shebang = false) ⇒ Object

This works like Hash#fetch.



46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/coderay/helpers/filetype.rb', line 46

def fetch filename, default = nil, read_shebang = false
	if default and block_given?
		warn 'block supersedes default value argument'
	end
	
	unless type = self[filename, read_shebang]
		return yield if block_given?
		return default if default
		raise UnknownFileType, 'Could not determine type of %p.' % filename
	end
	type
end

.shebang(filename) ⇒ Object



34
35
36
37
38
39
40
41
42
43
# File 'lib/coderay/helpers/filetype.rb', line 34

def shebang filename
	begin
		File.open filename, 'r' do |f|
			first_line = f.gets
			first_line[TypeFromShebang]
		end
	rescue IOError
		nil
	end
end