Module: Thin

Defined in:
lib/thin/cgi.rb,
lib/thin/rails.rb,
lib/thin/consts.rb,
lib/thin/server.rb,
lib/thin/cluster.rb,
lib/thin/command.rb,
lib/thin/handler.rb,
lib/thin/headers.rb,
lib/thin/logging.rb,
lib/thin/request.rb,
lib/thin/version.rb,
lib/thin/response.rb,
lib/thin/statuses.rb,
lib/thin/mime_types.rb,
lib/thin/daemonizing.rb

Defined Under Namespace

Modules: Commands, Daemonizable, Logging, VERSION Classes: CGIWrapper, Cluster, Command, CommandError, DirHandler, Handler, Headers, InvalidRequest, RailsHandler, RailsServer, Request, Response, Server

Constant Summary collapse

NAME =
'thin'.freeze
SERVER =
"#{NAME} #{VERSION::STRING}".freeze
CHUNK_SIZE =

The basic max request size we’ll try to read.

16 * 1024
CONTENT_LENGTH =
'Content-Length'.freeze
CONTENT_TYPE =
'Content-Type'.freeze
HEADER_FORMAT =
"%s: %s\r\n".freeze
LF =
"\n".freeze
ERROR_404_RESPONSE =

The standard empty 404 response when the request was not processed.

<<-EOS.freeze
HTTP/1.1 404 Not Found
Connection: close
Server: #{SERVER}
Content-Type: text/html

<html><h1>Page not found</h1></html>
EOS
ERROR_400_RESPONSE =

The standard empty 400 response when the request was invalid.

<<-EOS.freeze
HTTP/1.1 400 Bad Request
Connection: close
Server: #{SERVER}
Content-Type: text/html

<html><h1>Bad request</h1></html>
EOS
HTTP_STATUS_CODES =

Every standard HTTP code mapped to the appropriate message. Stolent from Mongrel.

{  
  100  => 'Continue', 
  101  => 'Switching Protocols', 
  200  => 'OK', 
  201  => 'Created', 
  202  => 'Accepted', 
  203  => 'Non-Authoritative Information', 
  204  => 'No Content', 
  205  => 'Reset Content', 
  206  => 'Partial Content', 
  300  => 'Multiple Choices', 
  301  => 'Moved Permanently', 
  302  => 'Moved Temporarily', 
  303  => 'See Other', 
  304  => 'Not Modified', 
  305  => 'Use Proxy', 
  400  => 'Bad Request', 
  401  => 'Unauthorized', 
  402  => 'Payment Required', 
  403  => 'Forbidden', 
  404  => 'Not Found', 
  405  => 'Method Not Allowed', 
  406  => 'Not Acceptable', 
  407  => 'Proxy Authentication Required', 
  408  => 'Request Time-out', 
  409  => 'Conflict', 
  410  => 'Gone', 
  411  => 'Length Required', 
  412  => 'Precondition Failed', 
  413  => 'Request Entity Too Large', 
  414  => 'Request-URI Too Large', 
  415  => 'Unsupported Media Type', 
  500  => 'Internal Server Error', 
  501  => 'Not Implemented', 
  502  => 'Bad Gateway', 
  503  => 'Service Unavailable', 
  504  => 'Gateway Time-out', 
  505  => 'HTTP Version not supported'
}
MIME_TYPES =
{
  '.a' => 'application/octet-stream',
  '.abc' => 'text/vnd.abc',
  '.acgi' => 'text/html',
  '.afl' => 'video/animaflex',
  '.ai' => 'application/postscript',
  '.aif' => 'audio/aiff',
  '.aifc' => 'audio/aiff',
  '.aiff' => 'audio/aiff',
  '.aip' => 'text/x-audiosoft-intra',
  '.ani' => 'application/x-navi-animation',
  '.aps' => 'application/mime',
  '.arc' => 'application/octet-stream',
  '.arj' => 'application/octet-stream',
  '.art' => 'image/x-jg',
  '.asf' => 'video/x-ms-asf',
  '.asm' => 'text/x-asm',
  '.asp' => 'text/asp',
  '.asr' => 'video/x-ms-asf',
  '.asx' => 'video/x-ms-asf',
  '.atom' => 'application/atom+xml',
  '.au' => 'audio/basic',
  '.au' => 'audio/x-au',
  '.avi' => 'video/avi',
  '.avs' => 'video/avs-video',
  '.axs' => 'application/olescript',
  '.bas' => 'text/plain',
  '.bcpio' => 'application/x-bcpio',
  '.bin' => 'application/octet-stream',
  '.bm' => 'image/bmp',
  '.bmp' => 'image/bmp',
  '.boo' => 'application/book',
  '.book' => 'application/book',
  '.boz' => 'application/x-bzip2',
  '.bsh' => 'application/x-bsh',
  '.bz' => ' application/x-bzip2',
  '.bz' => 'application/x-bzip',
  '.c' => 'text/plain',
  '.cat' => 'application/octet-stream',
  '.cc' => 'text/plain',
  '.ccad' => 'application/clariscad',
  '.cco' => 'application/x-cocoa',
  '.cdf' => 'application/cdf',
  '.cer' => 'application/x-x509-ca-cert',
  '.cha' => 'application/x-chat',
  '.chat' => 'application/x-chat',
  '.class' => 'application/java',
  '.class' => 'application/octet-stream',
  '.clp' => 'application/x-msclip',
  '.cmx' => 'image/x-cmx',
  '.cod' => 'image/cis-cod',
  '.com' => 'application/octet-stream',
  '.com' => 'text/plain',
  '.conf' => 'text/plain',
  '.cpio' => 'application/x-cpio',
  '.cpp' => 'text/x-c',
  '.cpt' => 'application/x-cpt',
  '.crd' => 'application/x-mscardfile',
  '.crl' => 'application/pkcs-crl',
  '.crl' => 'application/pkix-crl',
  '.crt' => 'application/x-x509-ca-cert',
  '.csh' => 'application/x-csh',
  '.csh' => 'text/x-script.csh',
  '.css' => 'text/css',
  '.cxx' => 'text/plain',
  '.dcr' => 'application/x-director',
  '.deb' => 'application/octet-stream',
  '.deepv' => 'application/x-deepv',
  '.def' => 'text/plain',
  '.der' => 'application/x-x509-ca-cert',
  '.dhh' => 'application/david-heinemeier-hansson',
  '.dif' => 'video/x-dv',
  '.dir' => 'application/x-director',
  '.dl' => 'video/dl',
  '.dll' => 'application/octet-stream',
  '.dmg' => 'application/octet-stream',
  '.dms' => 'application/octet-stream',
  '.doc' => 'application/msword',
  '.dp' => 'application/commonground',
  '.drw' => 'application/drafting',
  '.dump' => 'application/octet-stream',
  '.dv' => 'video/x-dv',
  '.dvi' => 'application/x-dvi',
  '.dwg' => 'application/acad',
  '.dwg' => 'image/x-dwg',
  '.dxf' => 'application/dxf',
  '.dxf' => 'image/x-dwg',
  '.dxr' => 'application/x-director',
  '.ear' => 'application/java-archive',
  '.el' => 'text/x-script.elisp',
  '.elc' => 'application/x-bytecode.elisp (compiled elisp)',
  '.elc' => 'application/x-elc',
  '.env' => 'application/x-envoy',
  '.eot' => 'application/octet-stream',
  '.eps' => 'application/postscript',
  '.es' => 'application/x-esrehber',
  '.etx' => 'text/x-setext',
  '.evy' => 'application/envoy',
  '.evy' => 'application/x-envoy',
  '.exe' => 'application/octet-stream',
  '.f' => ': text/x-fortran',
  '.f' => ': text/plain',
  '.f' => ': text/x-fortran',
  '.f' => 'text/x-fortran',
  '.fdf' => 'application/vnd.fdf',
  '.fif' => 'application/fractals',
  '.fif' => 'image/fif',
  '.fli' => 'video/fli',
  '.fli' => 'video/x-fli',
  '.flo' => 'image/florian',
  '.flr' => 'x-world/x-vrml',
  '.flv' => 'video/x-flv',
  '.flx' => 'text/vnd.fmi.flexstor',
  '.fmf' => 'video/x-atomic3d-feature',
  '.for' => 'text/plain',
  '.for' => 'text/x-fortran',
  '.fpx' => 'image/vnd.fpx',
  '.fpx' => 'image/vnd.net-fpx',
  '.frl' => 'application/freeloader',
  '.funk' => 'audio/make',
  '.g' => ' image/g3fax',
  '.g' => 'text/plain',
  '.gif' => 'image/gif',
  '.gl' => 'video/gl',
  '.gl' => 'video/x-gl',
  '.gsd' => 'audio/x-gsm',
  '.gsm' => 'audio/x-gsm',
  '.gsp' => 'application/x-gsp',
  '.gss' => 'application/x-gss',
  '.gtar' => 'application/x-gtar',
  '.gz' => 'application/x-compressed',
  '.gzip' => 'application/x-gzip',
  '.h' => 'text/plain',
  '.hdf' => 'application/x-hdf',
  '.help' => 'application/x-helpfile',
  '.hgl' => 'application/vnd.hp-hpgl',
  '.hh' => 'text/plain',
  '.hlb' => 'text/x-script',
  '.hlp' => 'application/hlp',
  '.hpg' => 'application/vnd.hp-hpgl',
  '.hpgl' => 'application/vnd.hp-hpgl',
  '.hqx' => 'application/binhex',
  '.hta' => 'application/hta',
  '.htc' => 'text/x-component',
  '.htm' => 'text/html',
  '.html' => 'text/html',
  '.htmls' => 'text/html',
  '.htt' => 'text/webviewhtml',
  '.htx' => 'text/html',
  '.ico' => 'image/x-icon',
  '.idc' => 'text/plain',
  '.ief' => 'image/ief',
  '.iefs' => 'image/ief',
  '.iges' => 'application/iges',
  '.igs' => 'application/iges',
  '.iii' => 'application/x-iphone',
  '.ima' => 'application/x-ima',
  '.imap' => 'application/x-httpd-imap',
  '.img' => 'application/octet-stream',
  '.inf' => 'application/inf',
  '.ins' => 'application/x-internet-signup',
  '.ins' => 'application/x-internett-signup',
  '.ip' => 'application/x-ip2',
  '.iso' => 'application/octet-stream',
  '.isp' => 'application/x-internet-signup',
  '.isu' => 'video/x-isvideo',
  '.it' => 'audio/it',
  '.iv' => 'application/x-inventor',
  '.ivr' => 'i-world/i-vrml',
  '.ivy' => 'application/x-livescreen',
  '.jam' => 'audio/x-jam',
  '.jar' => 'application/java-archive',
  '.jardiff' => 'application/x-java-archive-diff',
  '.jav' => 'text/plain',
  '.jav' => 'text/x-java-source',
  '.java' => 'text/plain',
  '.java' => 'text/x-java-source',
  '.jcm' => 'application/x-java-commerce',
  '.jfif' => 'bnl: image/jpeg',
  '.jfif' => 'image/jpeg',
  '.jfif' => 'image/pipeg',
  '.jfif' => 'image/pjpeg',
  '.jng' => 'image/x-jng',
  '.jnlp' => 'application/x-java-jnlp-file',
  '.jpe' => 'image/jpeg',
  '.jpeg' => 'image/jpeg',
  '.jpg' => 'image/jpeg',
  '.jps' => 'image/x-jps',
  '.js' => 'application/x-javascript',
  '.js' => 'text/javascript',
  '.jut' => 'image/jutvision',
  '.kar' => 'audio/midi',
  '.kar' => 'music/x-karaoke',
  '.ksh' => 'application/x-ksh',
  '.ksh' => 'text/x-script.ksh',
  '.la' => 'audio/nspaudio',
  '.la' => 'audio/x-nspaudio',
  '.lam' => 'audio/x-liveaudio',
  '.latex' => 'application/x-latex',
  '.lha' => 'application/lha',
  '.lha' => 'application/octet-stream',
  '.lha' => 'application/x-lha',
  '.lhx' => 'application/octet-stream',
  '.list' => 'text/plain',
  '.lma' => 'audio/nspaudio',
  '.lma' => 'audio/x-nspaudio',
  '.log' => 'text/plain',
  '.lsf' => 'video/x-la-asf',
  '.lsp' => 'application/x-lisp',
  '.lsp' => 'text/x-script.lisp',
  '.lst' => 'text/plain',
  '.lsx' => 'text/x-la-asf',
  '.lsx' => 'video/x-la-asf',
  '.ltx' => 'application/x-latex',
  '.lzh' => 'application/octet-stream',
  '.lzh' => 'application/x-lzh',
  '.lzx' => 'application/lzx',
  '.lzx' => 'application/octet-stream',
  '.lzx' => 'application/x-lzx',
  '.m' => ': application/x-msmediaview',
  '.m' => ': application/x-msmediaview',
  '.m' => ': video/mpeg',
  '.m' => ': audio/mpeg',
  '.m' => ': video/mpeg',
  '.m' => ': audio/x-mpegurl',
  '.m' => 'text/x-m',
  '.man' => 'application/x-troff-man',
  '.map' => 'application/x-navimap',
  '.mar' => 'text/plain',
  '.mbd' => 'application/mbedlet',
  '.mc' => 'application/x-magic-cap-package-1.0',
  '.mcd' => 'application/mcad',
  '.mcd' => 'application/x-mathcad',
  '.mcf' => 'image/vasa',
  '.mcf' => 'text/mcf',
  '.mcp' => 'application/netmc',
  '.mdb' => 'application/x-msaccess',
  '.me' => 'application/x-troff-me',
  '.mht' => 'message/rfc822',
  '.mhtml' => 'message/rfc822',
  '.mid' => 'audio/mid',
  '.mid' => 'audio/midi',
  '.mid' => 'audio/x-mid',
  '.mid' => 'audio/x-midi',
  '.midi' => 'audio/midi',
  '.midi' => 'audio/x-mid',
  '.midi' => 'audio/x-midi',
  '.mif' => 'application/x-frame',
  '.mif' => 'application/x-mif',
  '.mime' => 'message/rfc822',
  '.mime' => 'www/mime',
  '.mjf' => 'audio/x-vnd.audioexplosion.mjuicemediafile',
  '.mjpg' => 'video/x-motion-jpeg',
  '.mm' => 'application/base64',
  '.mm' => 'application/x-meme',
  '.mme' => 'application/base64',
  '.mml' => 'text/mathml',
  '.mng' => 'video/x-mng',
  '.mod' => 'audio/mod',
  '.moov' => 'video/quicktime',
  '.mov' => 'video/quicktime',
  '.movie' => 'video/x-sgi-movie',
  '.mp' => ' audio/mpeg',
  '.mp' => ' audio/mpeg',
  '.mpa' => 'audio/mpeg',
  '.mpc' => 'application/x-project',
  '.mpe' => 'video/mpeg',
  '.mpeg' => 'video/mpeg',
  '.mpg' => 'video/mpeg',
  '.mpga' => 'audio/mpeg',
  '.mpp' => 'application/vnd.ms-project',
  '.mpt' => 'application/x-project',
  '.mpv' => ' video/mpeg',
  '.mpv' => 'application/x-project',
  '.mpx' => 'application/x-project',
  '.mrc' => 'application/marc',
  '.ms' => 'application/x-troff-ms',
  '.msi' => 'application/octet-stream',
  '.msm' => 'application/octet-stream',
  '.msp' => 'application/octet-stream',
  '.mv' => 'video/x-sgi-movie',
  '.mvb' => 'application/x-msmediaview',
  '.my' => 'audio/make',
  '.mzz' => 'application/x-vnd.audioexplosion.mzz',
  '.nap' => 'image/naplps',
  '.naplps' => 'image/naplps',
  '.nc' => 'application/x-netcdf',
  '.ncm' => 'application/vnd.nokia.configuration-message',
  '.nif' => 'image/x-niff',
  '.niff' => 'image/x-niff',
  '.nix' => 'application/x-mix-transfer',
  '.nsc' => 'application/x-conference',
  '.nvd' => 'application/x-navidoc',
  '.nws' => 'message/rfc822',
  '.o' => 'application/octet-stream',
  '.oda' => 'application/oda',
  '.omc' => 'application/x-omc',
  '.omcd' => 'application/x-omcdatamaker',
  '.omcr' => 'application/x-omcregerator',
  '.p' => ': application/pkcs10',
  '.p' => ': application/x-pkcs10',
  '.p' => ': application/pkcs-12',
  '.p' => ': application/x-pkcs12',
  '.p' => ': application/x-pkcs7-signature',
  '.p' => ': application/x-pkcs7-certificates',
  '.p' => ': application/pkcs7-mime',
  '.p' => ': application/x-pkcs7-mime',
  '.p' => ': application/pkcs7-mime',
  '.p' => ': application/x-pkcs7-mime',
  '.p' => ': application/x-pkcs7-certreqresp',
  '.p' => ': application/pkcs7-signature',
  '.p' => ': application/x-pkcs7-signature',
  '.p' => 'text/x-pascal',
  '.part' => 'application/pro_eng',
  '.pas' => 'text/pascal',
  '.pbm' => 'image/x-portable-bitmap',
  '.pcl' => 'application/vnd.hp-pcl',
  '.pcl' => 'application/x-pcl',
  '.pct' => 'image/x-pict',
  '.pcx' => 'image/x-pcx',
  '.pdb' => 'application/x-pilot',
  '.pdf' => 'application/pdf',
  '.pem' => 'application/x-x509-ca-cert',
  '.pfunk' => 'audio/make',
  '.pfunk' => 'audio/make.my.funk',
  '.pfx' => 'application/x-pkcs12',
  '.pgm' => 'image/x-portable-graymap',
  '.pgm' => 'image/x-portable-greymap',
  '.pic' => 'image/pict',
  '.pict' => 'image/pict',
  '.pkg' => 'application/x-newton-compatible-pkg',
  '.pko' => 'application/vnd.ms-pki.pko',
  '.pko' => 'application/ynd.ms-pkipko',
  '.pl' => 'application/x-perl',
  '.pl' => 'text/plain',
  '.pl' => 'text/x-script.perl',
  '.plx' => 'application/x-pixclscript',
  '.pm' => ' application/x-pagemaker',
  '.pm' => ' application/x-pagemaker',
  '.pm' => 'application/x-perl',
  '.pm' => 'image/x-xpixmap',
  '.pm' => 'text/x-script.perl-module',
  '.pma' => 'application/x-perfmon',
  '.pmc' => 'application/x-perfmon',
  '.pml' => 'application/x-perfmon',
  '.pmr' => 'application/x-perfmon',
  '.pmw' => 'application/x-perfmon',
  '.png' => 'image/png',
  '.pnm' => 'application/x-portable-anymap',
  '.pnm' => 'image/x-portable-anymap',
  '.pot' => ' application/vnd.ms-powerpoint',
  '.pot' => 'application/mspowerpoint',
  '.pot' => 'application/vnd.ms-powerpoint',
  '.pov' => 'model/x-pov',
  '.ppa' => 'application/vnd.ms-powerpoint',
  '.ppm' => 'image/x-portable-pixmap',
  '.pps' => 'application/mspowerpoint',
  '.ppt' => 'application/mspowerpoint',
  '.ppz' => 'application/mspowerpoint',
  '.prc' => 'application/x-pilot',
  '.pre' => 'application/x-freelance',
  '.prf' => 'application/pics-rules',
  '.prt' => 'application/pro_eng',
  '.ps' => 'application/postscript',
  '.psd' => 'application/octet-stream',
  '.pub' => 'application/x-mspublisher',
  '.pvu' => 'paleovu/x-pv',
  '.pwz' => 'application/vnd.ms-powerpoint',
  '.py' => 'text/x-script.phyton',
  '.pyc' => 'applicaiton/x-bytecode.python',
  '.qcp' => 'audio/vnd.qcelp',
  '.qd' => ' x-world/x-3dmf',
  '.qd' => ': x-world/x-3dmf',
  '.qif' => 'image/x-quicktime',
  '.qt' => 'video/quicktime',
  '.qtc' => 'video/x-qtc',
  '.qti' => 'image/x-quicktime',
  '.qtif' => 'image/x-quicktime',
  '.ra' => 'audio/x-pn-realaudio',
  '.ra' => 'audio/x-pn-realaudio-plugin',
  '.ra' => 'audio/x-realaudio',
  '.ram' => 'audio/x-pn-realaudio',
  '.rar' => 'application/x-rar-compressed',
  '.ras' => 'application/x-cmu-raster',
  '.ras' => 'image/cmu-raster',
  '.ras' => 'image/x-cmu-raster',
  '.rast' => 'image/cmu-raster',
  '.rexx' => 'text/x-script.rexx',
  '.rf' => 'image/vnd.rn-realflash',
  '.rgb' => 'image/x-rgb',
  '.rm' => 'application/vnd.rn-realmedia',
  '.rm' => 'audio/x-pn-realaudio',
  '.rmi' => 'audio/mid',
  '.rmm' => 'audio/x-pn-realaudio',
  '.rmp' => 'audio/x-pn-realaudio',
  '.rmp' => 'audio/x-pn-realaudio-plugin',
  '.rng' => 'application/ringing-tones',
  '.rng' => 'application/vnd.nokia.ringing-tone',
  '.rnx' => 'application/vnd.rn-realplayer',
  '.roff' => 'application/x-troff',
  '.rp' => 'image/vnd.rn-realpix',
  '.rpm' => 'application/x-redhat-package-manager',
  '.rpm' => 'audio/x-pn-realaudio-plugin',
  '.rss' => 'text/xml',
  '.rt' => 'text/richtext',
  '.rt' => 'text/vnd.rn-realtext',
  '.rtf' => 'application/rtf',
  '.rtf' => 'application/x-rtf',
  '.rtf' => 'text/richtext',
  '.rtx' => 'application/rtf',
  '.rtx' => 'text/richtext',
  '.run' => 'application/x-makeself',
  '.rv' => 'video/vnd.rn-realvideo',
  '.s' => ': audio/s3m',
  '.s' => 'text/x-asm',
  '.saveme' => 'application/octet-stream',
  '.sbk' => 'application/x-tbook',
  '.scd' => 'application/x-msschedule',
  '.scm' => 'application/x-lotusscreencam',
  '.scm' => 'text/x-script.guile',
  '.scm' => 'text/x-script.scheme',
  '.scm' => 'video/x-scm',
  '.sct' => 'text/scriptlet',
  '.sdml' => 'text/plain',
  '.sdp' => 'application/sdp',
  '.sdp' => 'application/x-sdp',
  '.sdr' => 'application/sounder',
  '.sea' => 'application/sea',
  '.sea' => 'application/x-sea',
  '.set' => 'application/set',
  '.setpay' => 'application/set-payment-initiation',
  '.setreg' => 'application/set-registration-initiation',
  '.sgm' => 'text/sgml',
  '.sgm' => 'text/x-sgml',
  '.sgml' => 'text/sgml',
  '.sgml' => 'text/x-sgml',
  '.sh' => 'application/x-bsh',
  '.sh' => 'application/x-sh',
  '.sh' => 'application/x-shar',
  '.sh' => 'text/x-script.sh',
  '.shar' => 'application/x-bsh',
  '.shar' => 'application/x-shar',
  '.shtml' => 'text/html',
  '.shtml' => 'text/x-server-parsed-html',
  '.sid' => 'audio/x-psid',
  '.sit' => 'application/x-sit',
  '.sit' => 'application/x-stuffit',
  '.skd' => 'application/x-koan',
  '.skm' => 'application/x-koan',
  '.skp' => 'application/x-koan',
  '.skt' => 'application/x-koan',
  '.sl' => 'application/x-seelogo',
  '.smi' => 'application/smil',
  '.smil' => 'application/smil',
  '.snd' => 'audio/basic',
  '.snd' => 'audio/x-adpcm',
  '.sol' => 'application/solids',
  '.spc' => 'application/x-pkcs7-certificates',
  '.spc' => 'text/x-speech',
  '.spl' => 'application/futuresplash',
  '.spr' => 'application/x-sprite',
  '.sprite' => 'application/x-sprite',
  '.src' => 'application/x-wais-source',
  '.ssi' => 'text/x-server-parsed-html',
  '.ssm' => 'application/streamingmedia',
  '.sst' => 'application/vnd.ms-pki.certstore',
  '.sst' => 'application/vnd.ms-pkicertstore',
  '.step' => 'application/step',
  '.stl' => 'application/sla',
  '.stl' => 'application/vnd.ms-pki.stl',
  '.stl' => 'application/vnd.ms-pkistl',
  '.stl' => 'application/x-navistyle',
  '.stm' => 'text/html',
  '.stp' => 'application/step',
  '.sv' => 'pio: application/x-sv4cpio',
  '.sv' => 'rc: application/x-sv4crc',
  '.svf' => 'image/vnd.dwg',
  '.svf' => 'image/x-dwg',
  '.svg' => 'image/svg+xml',
  '.svr' => 'application/x-world',
  '.svr' => 'x-world/x-svr',
  '.swf' => 'application/x-shockwave-flash',
  '.t' => 'application/x-troff',
  '.talk' => 'text/x-speech',
  '.tar' => 'application/x-tar',
  '.tbk' => 'application/toolbook',
  '.tbk' => 'application/x-tbook',
  '.tcl' => 'application/x-tcl',
  '.tcl' => 'text/x-script.tcl',
  '.tcsh' => 'text/x-script.tcsh',
  '.tex' => 'application/x-tex',
  '.texi' => 'application/x-texinfo',
  '.texinfo' => 'application/x-texinfo',
  '.text' => 'application/plain',
  '.text' => 'text/plain',
  '.tgz' => 'application/gnutar',
  '.tgz' => 'application/x-compressed',
  '.tif' => 'image/tiff',
  '.tiff' => 'image/tiff',
  '.tk' => 'application/x-tcl',
  '.tr' => 'application/x-troff',
  '.trm' => 'application/x-msterminal',
  '.tsi' => 'audio/tsp-audio',
  '.tsp' => 'application/dsptype',
  '.tsp' => 'audio/tsplayer',
  '.tsv' => 'text/tab-separated-values',
  '.turbot' => 'image/florian',
  '.txt' => 'text/plain',
  '.uil' => 'text/x-uil',
  '.uls' => 'text/iuls',
  '.uni' => 'text/uri-list',
  '.unis' => 'text/uri-list',
  '.unv' => 'application/i-deas',
  '.uri' => 'text/uri-list',
  '.uris' => 'text/uri-list',
  '.ustar' => 'application/x-ustar',
  '.ustar' => 'multipart/x-ustar',
  '.uu' => 'application/octet-stream',
  '.uu' => 'text/x-uuencode',
  '.uue' => 'text/x-uuencode',
  '.vcd' => 'application/x-cdlink',
  '.vcf' => 'text/x-vcard',
  '.vcs' => 'text/x-vcalendar',
  '.vda' => 'application/vda',
  '.vdo' => 'video/vdo',
  '.vew' => 'application/groupwise',
  '.viv' => 'video/vivo',
  '.viv' => 'video/vnd.vivo',
  '.vivo' => 'video/vivo',
  '.vivo' => 'video/vnd.vivo',
  '.vmd' => 'application/vocaltec-media-desc',
  '.vmf' => 'application/vocaltec-media-file',
  '.voc' => 'audio/voc',
  '.voc' => 'audio/x-voc',
  '.vos' => 'video/vosaic',
  '.vox' => 'audio/voxware',
  '.vqe' => 'audio/x-twinvq-plugin',
  '.vqf' => 'audio/x-twinvq',
  '.vql' => 'audio/x-twinvq-plugin',
  '.vrml' => 'application/x-vrml',
  '.vrml' => 'model/vrml',
  '.vrml' => 'x-world/x-vrml',
  '.vrt' => 'x-world/x-vrt',
  '.vsd' => 'application/x-visio',
  '.vst' => 'application/x-visio',
  '.vsw' => 'application/x-visio',
  '.w' => ': application/wordperfect6.0',
  '.w' => ': application/wordperfect6.1',
  '.w' => ': application/msword',
  '.war' => 'application/java-archive',
  '.wav' => 'audio/wav',
  '.wav' => 'audio/x-wav',
  '.wb' => ' application/x-qpro',
  '.wbmp' => 'image/vnd.wap.wbmp',
  '.wbmp' => 'image/vnd.wap.wbmp',
  '.wcm' => 'application/vnd.ms-works',
  '.wdb' => 'application/vnd.ms-works',
  '.web' => 'application/vnd.xara',
  '.wiz' => 'application/msword',
  '.wk' => ' application/x-123',
  '.wks' => 'application/vnd.ms-works',
  '.wmf' => 'application/x-msmetafile',
  '.wmf' => 'windows/metafile',
  '.wml' => 'text/vnd.wap.wml',
  '.wmlc' => 'application/vnd.wap.wmlc',
  '.wmls' => 'text/vnd.wap.wmlscript',
  '.wmlsc' => 'application/vnd.wap.wmlscriptc',
  '.wmv' => 'video/x-ms-wmv',
  '.word' => 'application/msword',
  '.wp' => ' application/wordperfect',
  '.wp' => ' application/wordperfect',
  '.wp' => 'application/wordperfect',
  '.wpd' => 'application/wordperfect',
  '.wps' => 'application/vnd.ms-works',
  '.wq' => ' application/x-lotus',
  '.wri' => 'application/mswrite',
  '.wrl' => 'application/x-world',
  '.wsc' => 'text/scriplet',
  '.wsrc' => 'application/x-wais-source',
  '.wtk' => 'application/x-wintalk',
  '.x' => 'ng: image/png',
  '.xaf' => 'x-world/x-vrml',
  '.xbm' => 'image/xbm',
  '.xdr' => 'video/x-amt-demorun',
  '.xgz' => 'xgl/drawing',
  '.xhtml' => 'application/xhtml+xml',
  '.xif' => 'image/vnd.xiff',
  '.xl' => 'application/excel',
  '.xla' => 'application/excel',
  '.xlb' => 'application/excel',
  '.xlc' => 'application/excel',
  '.xld' => 'application/excel',
  '.xlk' => 'application/excel',
  '.xll' => 'application/excel',
  '.xlm' => 'application/excel',
  '.xls' => 'application/excel',
  '.xlt' => 'application/excel',
  '.xlv' => 'application/excel',
  '.xlw' => 'application/excel',
  '.xm' => 'audio/xm',
  '.xml' => 'text/xml',
  '.xmz' => 'xgl/movie',
  '.xof' => 'x-world/x-vrml',
  '.xpi' => 'application/x-xpinstall',
  '.xpix' => 'application/x-vnd.ls-xpix',
  '.xpm' => 'image/x-xpixmap',
  '.xpm' => 'image/xpm',
  '.xsl' => 'application/xslt+xml',
  '.xsr' => 'video/x-amt-showrun',
  '.xwd' => 'image/x-xwd',
  '.xwd' => 'image/x-xwindowdump',
  '.xyz' => 'chemical/x-pdb',
  '.z' => 'application/x-compressed',
  '.zip' => 'application/zip',
  '.zoo' => 'application/octet-stream',
  '.zsh' => 'text/x-script.zsh'
}

Class Method Summary collapse

Class Method Details

.define_commands(&block) ⇒ Object

Define a set of commands that can be parsed and executed. see bin/thin for an example.



6
7
8
9
10
11
12
# File 'lib/thin/command.rb', line 6

def self.define_commands(&block)
  begin
    Transat::Parser.parse_and_execute(ARGV, &block)      
  rescue CommandError => e
    puts "Error: #{e}"
  end
end