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
- .[](filename, read_shebang = false) ⇒ Object
-
.fetch(filename, default = nil, read_shebang = false) ⇒ Object
This works like Hash#fetch.
- .shebang(filename) ⇒ Object
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 |