Files

Class Index [+]

Quicksearch

CodeRay::FileType

FileType

A simple filetype recognizer.

Copyright © 2006 by murphy (Kornelius Kalnbach)

License

LGPL / ask the author

Version

0.1 (2005-09-01)

Documentation

 # determine the type of the given
  lang = FileType[ARGV.first]
 
  # return :plaintext if the file type is unknown
  lang = FileType.fetch ARGV.first, :plaintext
 
  # try the shebang line, too
  lang = FileType.fetch ARGV.first, :plaintext, true

Constants

UnknownFileType
TypeFromExt
TypeFromShebang
TypeFromName

Public Class Methods

[](filename, read_shebang = false) click to toggle source

Try to determine the file type of the file.

filename is a relative or absolute path to a file.

The file itself is only accessed when read_shebang is set to true. That means you can get filetypes from files that don’t exist.

    # File lib/coderay/helpers/file_type.rb, line 35
35:     def [] filename, read_shebang = false
36:       name = File.basename filename
37:       ext = File.extname(name).sub(/^\./, '')  # from last dot, delete the leading dot
38:       ext2 = filename.to_s[/\.(.*)/, 1]  # from first dot
39: 
40:       type =
41:         TypeFromExt[ext] ||
42:         TypeFromExt[ext.downcase] ||
43:         (TypeFromExt[ext2] if ext2) ||
44:         (TypeFromExt[ext2.downcase] if ext2) ||
45:         TypeFromName[name] ||
46:         TypeFromName[name.downcase]
47:       type ||= shebang(filename) if read_shebang
48: 
49:       type
50:     end
fetch(filename, default = nil, read_shebang = false) click to toggle source

This works like Hash#fetch.

If the filetype cannot be found, the default value is returned.

    # File lib/coderay/helpers/file_type.rb, line 70
70:     def fetch filename, default = nil, read_shebang = false
71:       if default and block_given?
72:         warn 'block supersedes default value argument'
73:       end
74: 
75:       unless type = self[filename, read_shebang]
76:         return yield if block_given?
77:         return default if default
78:         raise UnknownFileType, 'Could not determine type of %p.' % filename
79:       end
80:       type
81:     end
shebang(filename) click to toggle source
    # File lib/coderay/helpers/file_type.rb, line 52
52:     def shebang filename
53:       begin
54:         File.open filename, 'r' do |f|
55:           if first_line = f.gets
56:             if type = first_line[TypeFromShebang]
57:               type.to_sym
58:             end
59:           end
60:         end
61:       rescue IOError
62:         nil
63:       end
64:     end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.