waves 0.8.2 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. data/bin/waves +4 -3
  2. data/doc/VERSION +1 -1
  3. data/lib/waves.rb +52 -40
  4. data/lib/{caches → waves/caches}/file.rb +3 -1
  5. data/lib/waves/caches/memcached.rb +56 -0
  6. data/lib/{caches → waves/caches}/simple.rb +6 -7
  7. data/lib/{caches → waves/caches}/synchronized.rb +15 -1
  8. data/lib/{commands → waves/commands}/console.rb +4 -4
  9. data/lib/{commands → waves/commands}/generate.rb +6 -5
  10. data/lib/{commands → waves/commands}/help.rb +0 -0
  11. data/lib/{commands → waves/commands}/server.rb +1 -1
  12. data/lib/{dispatchers → waves/dispatchers}/base.rb +17 -31
  13. data/lib/waves/dispatchers/default.rb +19 -0
  14. data/lib/{ext → waves/ext}/float.rb +0 -0
  15. data/lib/{ext → waves/ext}/hash.rb +0 -0
  16. data/lib/{ext → waves/ext}/integer.rb +16 -1
  17. data/lib/{ext → waves/ext}/kernel.rb +3 -7
  18. data/lib/{ext → waves/ext}/module.rb +3 -3
  19. data/lib/{ext → waves/ext}/object.rb +2 -0
  20. data/lib/waves/ext/string.rb +73 -0
  21. data/lib/{ext → waves/ext}/symbol.rb +0 -1
  22. data/lib/{ext → waves/ext}/tempfile.rb +0 -0
  23. data/lib/waves/ext/time.rb +5 -0
  24. data/lib/{foundations → waves/foundations}/classic.rb +9 -21
  25. data/lib/{foundations → waves/foundations}/compact.rb +15 -20
  26. data/lib/waves/foundations/rest.rb +311 -0
  27. data/lib/waves/helpers/basic.rb +13 -0
  28. data/lib/{helpers → waves/helpers}/doc_type.rb +3 -0
  29. data/lib/waves/helpers/form.rb +94 -0
  30. data/lib/waves/helpers/formatting.rb +14 -0
  31. data/lib/waves/layers/mvc.rb +65 -0
  32. data/lib/{layers → waves/layers}/mvc/controllers.rb +0 -0
  33. data/lib/{layers → waves/layers}/mvc/extensions.rb +23 -11
  34. data/lib/{layers → waves/layers}/orm/migration.rb +0 -0
  35. data/lib/{layers → waves/layers}/orm/providers/active_record.rb +2 -5
  36. data/lib/{layers → waves/layers}/orm/providers/active_record/migrations/empty.rb.erb +0 -0
  37. data/lib/{layers → waves/layers}/orm/providers/active_record/tasks/generate.rb +1 -1
  38. data/lib/{layers → waves/layers}/orm/providers/active_record/tasks/schema.rb +1 -1
  39. data/lib/{layers → waves/layers}/orm/providers/data_mapper.rb +0 -0
  40. data/lib/{layers → waves/layers}/orm/providers/filebase.rb +0 -0
  41. data/lib/{layers → waves/layers}/orm/providers/sequel.rb +28 -29
  42. data/lib/{layers → waves/layers}/orm/providers/sequel/migrations/empty.rb.erb +0 -0
  43. data/lib/{layers → waves/layers}/orm/providers/sequel/tasks/generate.rb +1 -1
  44. data/lib/{layers → waves/layers}/orm/providers/sequel/tasks/schema.rb +2 -0
  45. data/lib/waves/layers/rack/rack_cache.rb +32 -0
  46. data/lib/waves/layers/renderers/erubis.rb +52 -0
  47. data/lib/waves/layers/renderers/haml.rb +67 -0
  48. data/lib/waves/layers/renderers/markaby.rb +41 -0
  49. data/lib/waves/layers/text/inflect/english.rb +42 -0
  50. data/lib/waves/matchers/accept.rb +47 -0
  51. data/lib/waves/matchers/ext.rb +27 -0
  52. data/lib/waves/matchers/path.rb +72 -0
  53. data/lib/waves/matchers/query.rb +43 -0
  54. data/lib/waves/matchers/request.rb +86 -0
  55. data/lib/waves/matchers/requested.rb +31 -0
  56. data/lib/{matchers → waves/matchers}/resource.rb +8 -1
  57. data/lib/waves/matchers/traits.rb +30 -0
  58. data/lib/waves/matchers/uri.rb +69 -0
  59. data/lib/waves/media/mime_types.rb +542 -0
  60. data/lib/waves/renderers/mixin.rb +9 -0
  61. data/lib/waves/request/accept.rb +92 -0
  62. data/lib/{runtime → waves/request}/request.rb +77 -61
  63. data/lib/waves/resources/file_mixin.rb +11 -0
  64. data/lib/{resources → waves/resources}/mixin.rb +42 -44
  65. data/lib/waves/resources/paths.rb +132 -0
  66. data/lib/waves/response/client_errors.rb +10 -0
  67. data/lib/waves/response/packaged.rb +19 -0
  68. data/lib/waves/response/redirects.rb +35 -0
  69. data/lib/{runtime → waves/response}/response.rb +29 -11
  70. data/lib/{runtime → waves/response}/response_mixin.rb +30 -17
  71. data/lib/waves/runtime/applications.rb +18 -0
  72. data/lib/{runtime → waves/runtime}/configuration.rb +31 -25
  73. data/lib/waves/runtime/console.rb +24 -0
  74. data/lib/{runtime → waves/runtime}/logger.rb +3 -3
  75. data/lib/{runtime → waves/runtime}/mocks.rb +2 -2
  76. data/lib/waves/runtime/rackup.rb +37 -0
  77. data/lib/waves/runtime/runtime.rb +48 -0
  78. data/lib/waves/runtime/server.rb +33 -0
  79. data/lib/{servers → waves/servers}/base.rb +0 -0
  80. data/lib/{servers → waves/servers}/mongrel.rb +0 -0
  81. data/lib/{servers → waves/servers}/webrick.rb +0 -0
  82. data/lib/{tasks → waves/tasks}/gem.rb +0 -0
  83. data/lib/{tasks → waves/tasks}/generate.rb +0 -0
  84. data/lib/waves/views/cassy.rb +173 -0
  85. data/lib/{views → waves/views}/errors.rb +8 -7
  86. data/lib/waves/views/mixin.rb +23 -0
  87. data/lib/waves/views/templated.rb +40 -0
  88. data/samples/basic/basic_startup.rb +70 -0
  89. data/samples/basic/config.ru +9 -0
  90. data/samples/blog/configurations/development.rb +17 -16
  91. data/samples/blog/configurations/production.rb +0 -11
  92. data/samples/blog/resources/entry.rb +3 -3
  93. data/samples/blog/resources/map.rb +10 -3
  94. data/samples/blog/startup.rb +4 -3
  95. data/templates/classic/Rakefile +28 -29
  96. data/templates/classic/configurations/default.rb.erb +8 -3
  97. data/templates/classic/configurations/development.rb.erb +1 -20
  98. data/templates/classic/configurations/production.rb.erb +2 -16
  99. data/templates/classic/public/images/favicon.ico +0 -0
  100. data/templates/classic/resources/server.rb.erb +9 -0
  101. data/templates/classic/startup.rb.erb +3 -3
  102. data/templates/classic/views/css.rb.erb +14 -0
  103. data/templates/classic/views/default.rb.erb +17 -0
  104. data/templates/classic/views/errors.rb.erb +10 -0
  105. data/templates/classic/views/pages.rb.erb +14 -0
  106. data/templates/compact/startup.rb.erb +8 -3
  107. data/test/ext/object.rb +55 -0
  108. data/test/ext/shortcuts.rb +73 -0
  109. data/test/helpers.rb +17 -0
  110. data/test/match/accept.rb +78 -0
  111. data/test/match/ext.rb +156 -0
  112. data/test/match/methods.rb +22 -0
  113. data/test/match/params.rb +33 -0
  114. data/test/match/path.rb +106 -0
  115. data/test/match/query.rb +60 -0
  116. data/test/match/request.rb +91 -0
  117. data/test/match/requested.rb +149 -0
  118. data/test/match/uri.rb +136 -0
  119. data/test/process/request.rb +75 -0
  120. data/test/process/resource.rb +53 -0
  121. data/test/resources/path.rb +166 -0
  122. data/test/runtime/configurations.rb +19 -0
  123. data/test/runtime/request.rb +63 -0
  124. data/test/runtime/response.rb +85 -0
  125. data/test/views/views.rb +40 -0
  126. metadata +243 -157
  127. data/lib/caches/memcached.rb +0 -40
  128. data/lib/dispatchers/default.rb +0 -25
  129. data/lib/ext/string.rb +0 -20
  130. data/lib/helpers/basic.rb +0 -11
  131. data/lib/helpers/extended.rb +0 -21
  132. data/lib/helpers/form.rb +0 -42
  133. data/lib/helpers/formatting.rb +0 -30
  134. data/lib/helpers/layouts.rb +0 -37
  135. data/lib/helpers/model.rb +0 -37
  136. data/lib/helpers/view.rb +0 -22
  137. data/lib/layers/inflect/english.rb +0 -67
  138. data/lib/layers/mvc.rb +0 -54
  139. data/lib/layers/renderers/erubis.rb +0 -60
  140. data/lib/layers/renderers/haml.rb +0 -47
  141. data/lib/layers/renderers/markaby.rb +0 -29
  142. data/lib/matchers/accept.rb +0 -21
  143. data/lib/matchers/base.rb +0 -30
  144. data/lib/matchers/content_type.rb +0 -17
  145. data/lib/matchers/path.rb +0 -67
  146. data/lib/matchers/query.rb +0 -21
  147. data/lib/matchers/request.rb +0 -27
  148. data/lib/matchers/traits.rb +0 -19
  149. data/lib/matchers/uri.rb +0 -20
  150. data/lib/renderers/mixin.rb +0 -36
  151. data/lib/resources/paths.rb +0 -34
  152. data/lib/runtime/console.rb +0 -23
  153. data/lib/runtime/mime_types.rb +0 -536
  154. data/lib/runtime/monitor.rb +0 -32
  155. data/lib/runtime/runtime.rb +0 -67
  156. data/lib/runtime/server.rb +0 -20
  157. data/lib/runtime/session.rb +0 -27
  158. data/lib/runtime/worker.rb +0 -86
  159. data/lib/views/mixin.rb +0 -62
  160. data/samples/blog/blog.db +0 -0
  161. data/samples/blog/log/waves.production +0 -3
  162. data/templates/classic/resources/map.rb.erb +0 -8
  163. data/templates/classic/templates/errors/not_found_404.mab +0 -7
  164. data/templates/classic/templates/errors/server_error_500.mab +0 -7
  165. data/templates/classic/templates/layouts/default.mab +0 -14
  166. data/templates/classic/tmp/sessions/.gitignore +0 -0
@@ -1,47 +0,0 @@
1
- require 'haml'
2
-
3
- module Waves
4
-
5
- module Renderers
6
-
7
- module Haml
8
-
9
- Extension = :haml
10
-
11
- extend Waves::Renderers::Mixin
12
-
13
- def self.render( path, assigns )
14
- engine = ::Haml::Engine.new( template( path ) )
15
- scope = Scope.new
16
- helper = helper( path )
17
- scope.meta_eval { include( helper ) }
18
- scope.instance_eval do
19
- assigns.each { |key,val| instance_variable_set("@#{key}",val) unless key == :request }
20
- end
21
- engine.render(scope, assigns)
22
- end
23
-
24
- class Scope
25
- include Waves::Helpers::DocType
26
- include Waves::Helpers::Layouts
27
- include Waves::Helpers::Model
28
- include Waves::Helpers::View
29
-
30
- def <<(s)
31
- eval("@haml_buffer", @binding).push_text s # add to rendered output
32
- end
33
-
34
- def capture(&block)
35
- capture_haml(nil, &block)
36
- end
37
-
38
- end
39
-
40
- end
41
-
42
- end
43
-
44
- end
45
-
46
-
47
-
@@ -1,29 +0,0 @@
1
- module Waves
2
-
3
- module Renderers
4
-
5
- module Markaby
6
-
7
- Extension = :mab
8
-
9
- extend Waves::Renderers::Mixin
10
-
11
- def self.included( app )
12
- require 'markaby'
13
- ::Markaby::Builder.set( :indent, 2 )
14
- super
15
- end
16
-
17
- def self.render( path, assigns )
18
- builder = ::Markaby::Builder.new( assigns )
19
- helper = helper( path )
20
- builder.meta_eval { include( helper ) }
21
- builder.instance_eval( template( path ) )
22
- builder.to_s
23
- end
24
-
25
- end
26
-
27
- end
28
-
29
- end
@@ -1,21 +0,0 @@
1
- module Waves
2
-
3
- module Matchers
4
-
5
- class Accept < Base
6
-
7
- def initialize( options )
8
- @constraints = {
9
- :accept => options[ :accept ],
10
- :lang => options[ :lang ],
11
- :charset => options[ :charset ]
12
- }
13
- end
14
-
15
- def call( request ) ; test( request ) ; end
16
-
17
- end
18
-
19
- end
20
-
21
- end
data/lib/matchers/base.rb DELETED
@@ -1,30 +0,0 @@
1
- module Waves
2
-
3
- module Matchers
4
-
5
- class Base
6
-
7
- attr_accessor :constraints
8
-
9
- def []( *args ) ; call( *args ) ; end
10
-
11
- # used to provide consisting matching logic across all matchers
12
- def test( request )
13
- constraints.all? do | key, val |
14
- if val.nil? or val == true
15
- true
16
- else
17
- if val.respond_to? :call
18
- val.call( request )
19
- else
20
- val == request.send( key ) or val === request.send( key ) or request.send( key ) === val
21
- end
22
- end
23
- end
24
- end
25
-
26
- end
27
-
28
- end
29
-
30
- end
@@ -1,17 +0,0 @@
1
- module Waves
2
-
3
- module Matchers
4
-
5
- class ContentType < Base
6
-
7
- def initialize( content_type ) ; @constraints = { :content_type => content_type } ; end
8
-
9
- # we could maybe do something more sophisticated here, matching against content type patterns
10
- # such */html or */xml, etc.; adapt from the matching done on accepts ... ?
11
- def call( request ) ; test( request ) ; end
12
-
13
- end
14
-
15
- end
16
-
17
- end
data/lib/matchers/path.rb DELETED
@@ -1,67 +0,0 @@
1
- module Waves
2
-
3
- module Matchers
4
-
5
- class Path < Base
6
-
7
- # Takes an array of pattern elements ... coming soon, support for formatted strings!
8
- def initialize( pattern ) ; @pattern = pattern ; end
9
-
10
- def call( request )
11
- return {} if @pattern == true or @pattern == false or @pattern.nil?
12
- path = extract_path( request ).reverse
13
- return {} if ( path.empty? and @pattern.empty? )
14
- capture = {}
15
- match = @pattern.all? do | want |
16
- case want
17
- when true # means 1..-1
18
- path = [] unless path.empty?
19
- when Range
20
- if want.end == -1
21
- path = [] if path.length >= want.begin
22
- else
23
- path = [] if want.include? path.length
24
- end
25
- when String then want == path.pop
26
- when Symbol then capture[ want ] = path.pop
27
- when Regexp then want === path.pop
28
- when Hash
29
- key, value = want.to_a.first
30
- case value
31
- when true
32
- ( capture[ key ], path = path.reverse, [] ) unless path.empty?
33
- when Range
34
- if value.end == -1
35
- ( capture[ key ], path = path.reverse, [] ) if path.length >= value.begin
36
- else
37
- ( capture[ key ], path = path.reverse, [] ) if value.include? path.length
38
- end
39
- when String, Symbol
40
- got = path.pop
41
- capture[ key ] = got ? got : value.to_s
42
- when Regexp then
43
- got = path.pop
44
- capture[ key ] = got if value === got
45
- end
46
- end
47
- end
48
- capture if match && path.empty?
49
- end
50
-
51
- private
52
-
53
- # just a little helper method
54
- def extract_path( request )
55
- path = request.traits.waves.path
56
- return path if path
57
- path = request.path.split('/')
58
- path.shift unless path.empty?
59
- request.traits.waves.path = path
60
- end
61
-
62
- end
63
-
64
-
65
- end
66
-
67
- end
@@ -1,21 +0,0 @@
1
- module Waves
2
-
3
- module Matchers
4
-
5
- class Query < Base
6
-
7
- def initialize( pattern ) ; @pattern = ( pattern or {} ) ; end
8
-
9
- def call( request )
10
- @pattern.all? do | key, val |
11
- key = key.to_s
12
- ( ( val.respond_to?(:call) and val.call( request.query[ key ] ) ) or
13
- ( request.query[ key ] and ( ( val == true ) or ( val === request.query[ key ] ) ) ) )
14
- end
15
- end
16
-
17
- end
18
-
19
- end
20
-
21
- end
@@ -1,27 +0,0 @@
1
- module Waves
2
-
3
- module Matchers
4
-
5
- class Request < Base
6
-
7
- def initialize( options )
8
- @uri = Matchers::URI.new( options )
9
- @constraints = {
10
- :content_type => Matchers::ContentType.new( options[ :content_type ] ),
11
- :accept => Matchers::Accept.new( options ),
12
- :query => Matchers::Query.new( options[:query] ),
13
- :traits => Matchers::Traits.new( options[:traits] )
14
- }
15
- end
16
-
17
- def call( request )
18
- if test( request ) and captured = @uri[ request ]
19
- request.traits.waves.captured = captured
20
- end
21
- end
22
-
23
- end
24
-
25
- end
26
-
27
- end
@@ -1,19 +0,0 @@
1
- module Waves
2
-
3
- module Matchers
4
-
5
- class Traits < Base
6
-
7
- def initialize( pattern ) ; @pattern = ( pattern or {} ) ; end
8
-
9
- def call( request )
10
- @pattern.all? do | key, val |
11
- ( val.is_a? Proc and val.call( request.traits[ key ] ) ) or val === request.traits[ key ]
12
- end
13
- end
14
-
15
- end
16
-
17
- end
18
-
19
- end
data/lib/matchers/uri.rb DELETED
@@ -1,20 +0,0 @@
1
- module Waves
2
-
3
- module Matchers
4
-
5
- class URI < Base
6
-
7
- def initialize( options )
8
- @path = Waves::Matchers::Path.new( options[ :path ] )
9
- @constraints = { :server => options[ :server ], :scheme => options[ :scheme ] }
10
- end
11
-
12
- def call( request )
13
- @path.call( request ) if test( request )
14
- end
15
-
16
- end
17
-
18
- end
19
-
20
- end
@@ -1,36 +0,0 @@
1
- module Waves
2
-
3
- module Renderers # :nodoc:
4
-
5
- # The renderers mixin provides a number of methods to simplify writing new renderers.
6
- # Just include this in your Renderer class and write your render method.
7
- module Mixin
8
-
9
- # Adds the following methods to the mod class:
10
- #
11
- # - filename: generate a filename for the template based on a logical path.
12
- # - template: read the template from the file corresponding to the given logical path.
13
- # - helper: return a helper module that corresponds to the given logical path.
14
- #
15
-
16
- def included( app )
17
- Waves::Views.renderers << self
18
- end
19
-
20
- def filename(path)
21
- "#{path}.#{self::Extension}"
22
- end
23
-
24
- def template( path )
25
- File.read( filename( path ) )
26
- end
27
-
28
- def helper( path )
29
- Waves.main[ :helpers ][ File.basename( File.dirname( path ) ).camel_case ]
30
- end
31
-
32
- end
33
-
34
- end
35
-
36
- end
@@ -1,34 +0,0 @@
1
- module Waves
2
-
3
- module Resources
4
-
5
- class Paths
6
-
7
- attr_accessor :request
8
-
9
- include Waves::ResponseMixin
10
-
11
- def initialize( request ) ; @request = request ; end
12
-
13
- def generate( template, args )
14
- return "/#{ args * '/' }" unless template.is_a?( Array ) and not template.empty?
15
- path = []
16
- ( "/#{ path * '/' }" ) if template.all? do | want |
17
- case want
18
- when true then path += args
19
- when String then path << want
20
- when Symbol then path << args.shift
21
- when Regexp then path << args.shift
22
- when Hash
23
- key, value = want.to_a.first
24
- case value
25
- when true then path += args
26
- when String, Symbol, RegExp then path << args.unshift
27
- end
28
- end
29
- end
30
- end
31
- end
32
- end
33
-
34
- end
@@ -1,23 +0,0 @@
1
- require 'runtime/mocks'
2
- module Waves
3
-
4
- class Console < Runtime
5
-
6
- class << self
7
-
8
- attr_reader :console
9
-
10
- def load( options={} )
11
- @console ||= Waves::Console.new( options )
12
- Kernel.load( options[:startup] || 'startup.rb' )
13
- Object.instance_eval { include Waves::Mocks }
14
- end
15
-
16
- # allow Waves::Console to act as The Console Instance
17
- def method_missing(*args); @console.send(*args); end
18
-
19
- end
20
-
21
- end
22
-
23
- end
@@ -1,536 +0,0 @@
1
- module Waves
2
-
3
- # Waves::MimeTypes defines an interface for adding MIME types used in mapping requests
4
- # to content types. Originally taken from Mongrel.
5
-
6
- module MimeTypes
7
-
8
- def self.[]( path )
9
- mapping[ File.extname( path ) ]
10
- end
11
-
12
- # TODO: This does not seem to be working.
13
- def self.<<( mapping )
14
- mapping.merge!( mapping )
15
- end
16
-
17
- def self.mapping
18
- @mapping ||= Waves::MIME_TYPES
19
- end
20
-
21
- end
22
-
23
- MIME_TYPES = {
24
- ".skd"=>"application/x-koan",
25
- ".el"=>"text/x-script.elisp",
26
- ".iges"=>"application/iges",
27
- ".iefs"=>"image/ief",
28
- ".omcr"=>"application/x-omcregerator",
29
- ".spc"=>"text/x-speech",
30
- ".mng"=>"video/x-mng",
31
- ".deb"=>"application/octet-stream",
32
- ".mzz"=>"application/x-vnd.audioexplosion.mzz",
33
- ".csh"=>"text/x-script.csh",
34
- ".pfx"=>"application/x-pkcs12",
35
- ".lhx"=>"application/octet-stream",
36
- ".xls"=>"application/excel",
37
- ".wsc"=>"text/scriplet",
38
- ".tsp"=>"audio/tsplayer",
39
- ".ccad"=>"application/clariscad",
40
- ".mpga"=>"audio/mpeg",
41
- ".pps"=>"application/mspowerpoint",
42
- ".htt"=>"text/webviewhtml",
43
- ".texinfo"=>"application/x-texinfo",
44
- ".p10"=>"application/x-pkcs10",
45
- ".xlt"=>"application/excel",
46
- ".ppt"=>"application/mspowerpoint",
47
- ".es"=>"application/x-esrehber",
48
- ".fdf"=>"application/vnd.fdf",
49
- ".def"=>"text/plain",
50
- ".p12"=>"application/x-pkcs12",
51
- ".pdb"=>"application/x-pilot",
52
- ".fpx"=>"image/vnd.net-fpx",
53
- ".xlv"=>"application/excel",
54
- ".tk"=>"application/x-tcl",
55
- ".msi"=>"application/octet-stream",
56
- ".xlw"=>"application/excel",
57
- ".xgz"=>"xgl/drawing",
58
- ".wsrc"=>"application/x-wais-source",
59
- ".vrt"=>"x-world/x-vrt",
60
- ".htx"=>"text/html",
61
- ".js"=>"text/javascript",
62
- ".fif"=>"image/fif",
63
- ".pic"=>"image/pict",
64
- ".doc"=>"application/msword",
65
- ".setpay"=>"application/set-payment-initiation",
66
- ".skm"=>"application/x-koan",
67
- ".tsv"=>"text/tab-separated-values",
68
- ".pdf"=>"application/pdf",
69
- ".txt"=>"text/plain",
70
- ".ppz"=>"application/mspowerpoint",
71
- ".spl"=>"application/futuresplash",
72
- ".msm"=>"application/octet-stream",
73
- ".rexx"=>"text/x-script.rexx",
74
- ".skp"=>"application/x-koan",
75
- ".rtx"=>"text/richtext",
76
- ".jpeg"=>"image/jpeg",
77
- ".tr"=>"application/x-troff",
78
- ".css"=>"text/css",
79
- ".lam"=>"audio/x-liveaudio",
80
- ".msp"=>"application/octet-stream",
81
- ".sv4cpio"=>"application/x-sv4cpio",
82
- ".cc"=>"text/plain",
83
- ".tbk"=>"application/x-tbook",
84
- ".class"=>"application/octet-stream",
85
- ".png"=>"image/png",
86
- ".acgi"=>"text/html",
87
- ".psd"=>"application/octet-stream",
88
- ".skt"=>"application/x-koan",
89
- ".spr"=>"application/x-sprite",
90
- ".idc"=>"text/plain",
91
- ".bas"=>"text/plain",
92
- ".gtar"=>"application/x-gtar",
93
- ".bcpio"=>"application/x-bcpio",
94
- ".xof"=>"x-world/x-vrml",
95
- ".der"=>"application/x-x509-ca-cert",
96
- ".mbd"=>"application/mbedlet",
97
- ".rmi"=>"audio/mid",
98
- ".turbot"=>"image/florian",
99
- ".mc"=>"application/x-magic-cap-package-1.0",
100
- ".ra"=>"audio/x-realaudio",
101
- ".xpix"=>"application/x-vnd.ls-xpix",
102
- ".wiz"=>"application/msword",
103
- ".cxx"=>"text/plain",
104
- ".me"=>"application/x-troff-me",
105
- ".lzh"=>"application/x-lzh",
106
- ".hh"=>"text/plain",
107
- ".arc"=>"application/octet-stream",
108
- ".rmm"=>"audio/x-pn-realaudio",
109
- ".pnm"=>"image/x-portable-anymap",
110
- ".zsh"=>"text/x-script.zsh",
111
- ".sid"=>"audio/x-psid",
112
- ".pfunk"=>"audio/make.my.funk",
113
- ".zip"=>"application/zip",
114
- ".wbmp"=>"image/vnd.wap.wbmp",
115
- ".rmp"=>"audio/x-pn-realaudio-plugin",
116
- ".iii"=>"application/x-iphone",
117
- ".snd"=>"audio/x-adpcm",
118
- ".rf"=>"image/vnd.rn-realflash",
119
- ".mvb"=>"application/x-msmediaview",
120
- ".qtc"=>"video/x-qtc",
121
- ".rast"=>"image/cmu-raster",
122
- ".arj"=>"application/octet-stream",
123
- ".ear"=>"application/java-archive",
124
- ".mm"=>"application/x-meme",
125
- ".funk"=>"audio/make",
126
- ".smil"=>"application/smil",
127
- ".f90"=>"text/x-fortran",
128
- ".vda"=>"application/vda",
129
- ".tgz"=>"application/x-compressed",
130
- ".clp"=>"application/x-msclip",
131
- ".word"=>"application/msword",
132
- ".rm"=>"audio/x-pn-realaudio",
133
- ".sdp"=>"application/x-sdp",
134
- ".uri"=>"text/uri-list",
135
- ".latex"=>"application/x-latex",
136
- ".mpeg"=>"video/mpeg",
137
- ".ssi"=>"text/x-server-parsed-html",
138
- ".qti"=>"image/x-quicktime",
139
- ".m3u"=>"audio/x-mpegurl",
140
- ".dhh"=>"application/david-heinemeier-hansson",
141
- ".sdr"=>"application/sounder",
142
- ".rp"=>"image/vnd.rn-realpix",
143
- ".ms"=>"application/x-troff-ms",
144
- ".dmg"=>"application/octet-stream",
145
- ".deepv"=>"application/x-deepv",
146
- ".iso"=>"application/octet-stream",
147
- ".eps"=>"application/postscript",
148
- ".jfif-tbnl"=>"image/jpeg",
149
- ".ssm"=>"application/streamingmedia",
150
- ".lzx"=>"application/x-lzx",
151
- ".isp"=>"application/x-internet-signup",
152
- ".wp"=>"application/wordperfect",
153
- ".ins"=>"application/x-internett-signup",
154
- ".art"=>"image/x-jg",
155
- ".mv"=>"video/x-sgi-movie",
156
- ".fli"=>"video/x-fli",
157
- ".sit"=>"application/x-stuffit",
158
- ".rt"=>"text/vnd.rn-realtext",
159
- ".movie"=>"video/x-sgi-movie",
160
- ".hpg"=>"application/vnd.hp-hpgl",
161
- ".htmls"=>"text/html",
162
- ".sprite"=>"application/x-sprite",
163
- ".ram"=>"audio/x-pn-realaudio",
164
- ".pbm"=>"image/x-portable-bitmap",
165
- ".ncm"=>"application/vnd.nokia.configuration-message",
166
- ".bin"=>"application/octet-stream",
167
- ".pm4"=>"application/x-pagemaker",
168
- ".bsh"=>"application/x-bsh",
169
- ".lsf"=>"video/x-la-asf",
170
- ".oda"=>"application/oda",
171
- ".rv"=>"video/vnd.rn-realvideo",
172
- ".pm5"=>"application/x-pagemaker",
173
- ".atom"=>"application/atom+xml",
174
- ".my"=>"audio/make",
175
- ".vsd"=>"application/x-visio",
176
- ".dwg"=>"image/x-dwg",
177
- ".dcr"=>"application/x-director",
178
- ".isu"=>"video/x-isvideo",
179
- ".xyz"=>"chemical/x-pdb",
180
- ".texi"=>"application/x-texinfo",
181
- ".part"=>"application/pro_eng",
182
- ".pgm"=>"image/x-portable-greymap",
183
- ".g3"=>"image/g3fax",
184
- ".ai"=>"application/postscript",
185
- ".flo"=>"image/florian",
186
- ".a"=>"application/octet-stream",
187
- ".xwd"=>"image/x-xwindowdump",
188
- ".vdo"=>"video/vdo",
189
- ".rar"=>"application/x-rar-compressed",
190
- ".sst"=>"application/vnd.ms-pkicertstore",
191
- ".wmlsc"=>"application/vnd.wap.wmlscriptc",
192
- ".web"=>"application/vnd.xara",
193
- ".uris"=>"text/uri-list",
194
- ".ras"=>"image/x-cmu-raster",
195
- ".c"=>"text/plain",
196
- ".cod"=>"image/cis-cod",
197
- ".qd3"=>"x-world/x-3dmf",
198
- ".flr"=>"x-world/x-vrml",
199
- ".xml"=>"text/xml",
200
- ".hpgl"=>"application/vnd.hp-hpgl",
201
- ".dms"=>"application/octet-stream",
202
- ".afl"=>"video/animaflex",
203
- ".rpm"=>"audio/x-pn-realaudio-plugin",
204
- ".mjf"=>"audio/x-vnd.audioexplosion.mjuicemediafile",
205
- ".f"=>"text/x-fortran",
206
- ".java"=>"text/x-java-source",
207
- ".mod"=>"audio/mod",
208
- ".jardiff"=>"application/x-java-archive-diff",
209
- ".g"=>"text/plain",
210
- ".wk1"=>"application/x-123",
211
- ".h"=>"text/plain",
212
- ".lsp"=>"text/x-script.lisp",
213
- ".sbk"=>"application/x-tbook",
214
- ".run"=>"application/x-makeself",
215
- ".mp2"=>"audio/mpeg",
216
- ".flv"=>"video/x-flv",
217
- ".wmlc"=>"application/vnd.wap.wmlc",
218
- ".s3m"=>"audio/s3m",
219
- ".mp3"=>"audio/mpeg",
220
- ".pot,"=>"application/vnd.ms-powerpoint",
221
- ".exe"=>"application/octet-stream",
222
- ".list"=>"text/plain",
223
- ".tex"=>"application/x-tex",
224
- ".flx"=>"text/vnd.fmi.flexstor",
225
- ".text"=>"text/plain",
226
- ".x-png"=>"image/png",
227
- ".viv"=>"video/vnd.vivo",
228
- ".niff"=>"image/x-niff",
229
- ".drw"=>"application/drafting",
230
- ".lst"=>"text/plain",
231
- ".kar"=>"music/x-karaoke",
232
- ".cer"=>"application/x-x509-ca-cert",
233
- ".m"=>"text/x-m",
234
- ".com"=>"text/plain",
235
- ".pl"=>"text/x-script.perl",
236
- ".uue"=>"text/x-uuencode",
237
- ".qcp"=>"audio/vnd.qcelp",
238
- ".au"=>"audio/x-au",
239
- ".plx"=>"application/x-pixclscript",
240
- ".nws"=>"message/rfc822",
241
- ".sgm"=>"text/x-sgml",
242
- ".hdf"=>"application/x-hdf",
243
- ".pm"=>"text/x-script.perl-module",
244
- ".wp5"=>"application/wordperfect",
245
- ".saveme"=>"application/octet-stream",
246
- ".svf"=>"image/x-dwg",
247
- ".wp6"=>"application/wordperfect",
248
- ".vst"=>"application/x-visio",
249
- ".svg"=>"image/svg+xml",
250
- ".o"=>"application/octet-stream",
251
- ".igs"=>"application/iges",
252
- ".pvu"=>"paleovu/x-pv",
253
- ".mhtml"=>"message/rfc822",
254
- ".p"=>"text/x-pascal",
255
- ".m1v"=>"video/mpeg",
256
- ".lsx"=>"video/x-la-asf",
257
- ".xaf"=>"x-world/x-vrml",
258
- ".f77"=>"text/x-fortran",
259
- ".xmz"=>"xgl/movie",
260
- ".vsw"=>"application/x-visio",
261
- ".book"=>"application/book",
262
- ".aps"=>"application/mime",
263
- ".cpio"=>"application/x-cpio",
264
- ".s"=>"text/x-asm",
265
- ".ps"=>"application/postscript",
266
- ".wtk"=>"application/x-wintalk",
267
- ".mjpg"=>"video/x-motion-jpeg",
268
- ".t"=>"application/x-troff",
269
- ".dump"=>"application/octet-stream",
270
- ".jcm"=>"application/x-java-commerce",
271
- ".env"=>"application/x-envoy",
272
- ".cha"=>"application/x-chat",
273
- ".w6w"=>"application/msword",
274
- ".sdml"=>"text/plain",
275
- ".tcl"=>"text/x-script.tcl",
276
- ".rng"=>"application/vnd.nokia.ringing-tone",
277
- ".ivr"=>"i-world/i-vrml",
278
- ".vqe"=>"audio/x-twinvq-plugin",
279
- ".uu"=>"text/x-uuencode",
280
- ".pem"=>"application/x-x509-ca-cert",
281
- ".nap"=>"image/naplps",
282
- ".qd3d"=>"x-world/x-3dmf",
283
- ".shar"=>"application/x-shar",
284
- ".vqf"=>"audio/x-twinvq",
285
- ".mov"=>"video/quicktime",
286
- ".pyc"=>"applicaiton/x-bytecode.python",
287
- ".py"=>"text/x-script.phyton",
288
- ".z"=>"application/x-compressed",
289
- ".wmls"=>"text/vnd.wap.wmlscript",
290
- ".sea"=>"application/x-sea",
291
- ".mcd"=>"application/x-mathcad",
292
- ".unis"=>"text/uri-list",
293
- ".svr"=>"x-world/x-svr",
294
- ".elc"=>"application/x-elc",
295
- ".ief"=>"image/ief",
296
- ".aif"=>"audio/aiff",
297
- ".xhtml"=>"application/xhtml+xml",
298
- ".gzip"=>"application/x-gzip",
299
- ".nc"=>"application/x-netcdf",
300
- ".mcf"=>"text/mcf",
301
- ".step"=>"application/step",
302
- ".xpi"=>"application/x-xpinstall",
303
- ".imap"=>"application/x-httpd-imap",
304
- ".mime"=>"www/mime",
305
- ".ivy"=>"application/x-livescreen",
306
- ".dl"=>"video/dl",
307
- ".for"=>"text/x-fortran",
308
- ".crd"=>"application/x-mscardfile",
309
- ".vql"=>"audio/x-twinvq-plugin",
310
- ".mme"=>"application/base64",
311
- ".jnlp"=>"application/x-java-jnlp-file",
312
- ".xpm"=>"image/xpm",
313
- ".trm"=>"application/x-msterminal",
314
- ".ani"=>"application/x-navi-animation",
315
- ".mrc"=>"application/marc",
316
- ".asf"=>"video/x-ms-asf",
317
- ".cco"=>"application/x-cocoa",
318
- ".zoo"=>"application/octet-stream",
319
- ".vrml"=>"x-world/x-vrml",
320
- ".dp"=>"application/commonground",
321
- ".html"=>"text/html",
322
- ".qtif"=>"image/x-quicktime",
323
- ".sh"=>"text/x-script.sh",
324
- ".wmf"=>"windows/metafile",
325
- ".pot"=>"application/vnd.ms-powerpoint",
326
- ".aip"=>"text/x-audiosoft-intra",
327
- ".wcm"=>"application/vnd.ms-works",
328
- ".ksh"=>"text/x-script.ksh",
329
- ".mcp"=>"application/netmc",
330
- ".ip"=>"application/x-ip2",
331
- ".sgml"=>"text/x-sgml",
332
- ".pov"=>"model/x-pov",
333
- ".rss"=>"text/xml",
334
- ".mml"=>"text/mathml",
335
- ".crl"=>"application/pkix-crl",
336
- ".uni"=>"text/uri-list",
337
- ".uil"=>"text/x-uil",
338
- ".rgb"=>"image/x-rgb",
339
- ".hlb"=>"text/x-script",
340
- ".asm"=>"text/x-asm",
341
- ".sl"=>"application/x-seelogo",
342
- ".rnx"=>"application/vnd.rn-realplayer",
343
- ".dif"=>"video/x-dv",
344
- ".dv"=>"video/x-dv",
345
- ".chat"=>"application/x-chat",
346
- ".inf"=>"application/inf",
347
- ".it"=>"audio/it",
348
- ".pma"=>"application/x-perfmon",
349
- ".xl"=>"application/excel",
350
- ".wri"=>"application/mswrite",
351
- ".wml"=>"text/vnd.wap.wml",
352
- ".sol"=>"application/solids",
353
- ".asp"=>"text/asp",
354
- ".xm"=>"audio/xm",
355
- ".jfif"=>"image/pjpeg",
356
- ".nif"=>"image/x-niff",
357
- ".fmf"=>"video/x-atomic3d-feature",
358
- ".iv"=>"application/x-inventor",
359
- ".pmc"=>"application/x-perfmon",
360
- ".mht"=>"message/rfc822",
361
- ".roff"=>"application/x-troff",
362
- ".stl"=>"application/x-navistyle",
363
- ".talk"=>"text/x-speech",
364
- ".asr"=>"video/x-ms-asf",
365
- ".set"=>"application/set",
366
- ".wrl"=>"application/x-world",
367
- ".jam"=>"audio/x-jam",
368
- ".abc"=>"text/vnd.abc",
369
- ".stm"=>"text/html",
370
- ".jpe"=>"image/jpeg",
371
- ".sv4crc"=>"application/x-sv4crc",
372
- ".voc"=>"audio/x-voc",
373
- ".prc"=>"application/x-pilot",
374
- ".m2a"=>"audio/mpeg",
375
- ".nsc"=>"application/x-conference",
376
- ".help"=>"application/x-helpfile",
377
- ".hgl"=>"application/vnd.hp-hpgl",
378
- ".crt"=>"application/x-x509-ca-cert",
379
- ".xif"=>"image/vnd.xiff",
380
- ".pcl"=>"application/x-pcl",
381
- ".log"=>"text/plain",
382
- ".jpg"=>"image/jpeg",
383
- ".ustar"=>"multipart/x-ustar",
384
- ".cmx"=>"image/x-cmx",
385
- ".pre"=>"application/x-freelance",
386
- ".axs"=>"application/olescript",
387
- ".bz2"=>"application/x-bzip2",
388
- ".mpv2"=>"video/mpeg",
389
- ".moov"=>"video/quicktime",
390
- ".prf"=>"application/pics-rules",
391
- ".dxf"=>"image/x-dwg",
392
- ".stp"=>"application/step",
393
- ".conf"=>"text/plain",
394
- ".asx"=>"video/x-ms-asf",
395
- ".la"=>"audio/x-nspaudio",
396
- ".jar"=>"application/java-archive",
397
- ".wmv"=>"video/x-ms-wmv",
398
- ".unv"=>"application/i-deas",
399
- ".boo"=>"application/book",
400
- ".ima"=>"application/x-ima",
401
- ".dir"=>"application/x-director",
402
- ".frl"=>"application/freeloader",
403
- ".wb1"=>"application/x-qpro",
404
- ".hlp"=>"application/hlp",
405
- ".tar"=>"application/x-tar",
406
- ".scd"=>"application/x-msschedule",
407
- ".pml"=>"application/x-perfmon",
408
- ".evy"=>"application/x-envoy",
409
- ".gif"=>"image/gif",
410
- ".jav"=>"text/x-java-source",
411
- ".pct"=>"image/x-pict",
412
- ".mpa"=>"audio/mpeg",
413
- ".xdr"=>"video/x-amt-demorun",
414
- ".bm"=>"image/bmp",
415
- ".mpc"=>"application/x-project",
416
- ".qif"=>"image/x-quicktime",
417
- ".gl"=>"video/x-gl",
418
- ".img"=>"application/octet-stream",
419
- ".gsd"=>"audio/x-gsm",
420
- ".xsl"=>"application/xslt+xml",
421
- ".pcx"=>"image/x-pcx",
422
- ".pmr"=>"application/x-perfmon",
423
- ".jps"=>"image/x-jps",
424
- ".mpe"=>"video/mpeg",
425
- ".src"=>"application/x-wais-source",
426
- ".man"=>"application/x-troff-man",
427
- ".wpd"=>"application/wordperfect",
428
- ".vew"=>"application/groupwise",
429
- ".dxr"=>"application/x-director",
430
- ".mpg"=>"video/mpeg",
431
- ".ico"=>"image/x-icon",
432
- ".wq1"=>"application/x-lotus",
433
- ".scm"=>"video/x-scm",
434
- ".map"=>"application/x-navimap",
435
- ".nix"=>"application/x-mix-transfer",
436
- ".vos"=>"video/vosaic",
437
- ".boz"=>"application/x-bzip2",
438
- ".jut"=>"image/jutvision",
439
- ".cat"=>"application/octet-stream",
440
- ".lha"=>"application/x-lha",
441
- ".p7a"=>"application/x-pkcs7-signature",
442
- ".avi"=>"video/avi",
443
- ".prt"=>"application/pro_eng",
444
- ".pmw"=>"application/x-perfmon",
445
- ".smi"=>"application/smil",
446
- ".p7b"=>"application/x-pkcs7-certificates",
447
- ".mar"=>"text/plain",
448
- ".xsr"=>"video/x-amt-showrun",
449
- ".tiff"=>"image/tiff",
450
- ".hqx"=>"application/binhex",
451
- ".p7c"=>"application/x-pkcs7-mime",
452
- ".lma"=>"audio/x-nspaudio",
453
- ".swf"=>"application/x-shockwave-flash",
454
- ".war"=>"application/java-archive",
455
- ".vcd"=>"application/x-cdlink",
456
- ".cpp"=>"text/x-c",
457
- ".gsm"=>"audio/x-gsm",
458
- ".vox"=>"audio/voxware",
459
- ".m2v"=>"video/mpeg",
460
- ".ltx"=>"application/x-latex",
461
- ".xla"=>"application/excel",
462
- ".vcf"=>"text/x-vcard",
463
- ".sct"=>"text/scriptlet",
464
- ".ppa"=>"application/vnd.ms-powerpoint",
465
- ".aifc"=>"audio/aiff",
466
- ".hta"=>"application/hta",
467
- ".bz"=>"application/x-bzip",
468
- ".omcd"=>"application/x-omcdatamaker",
469
- ".mpp"=>"application/vnd.ms-project",
470
- ".pict"=>"image/pict",
471
- ".gsp"=>"application/x-gsp",
472
- ".xlb"=>"application/excel",
473
- ".wav"=>"audio/x-wav",
474
- ".eot"=>"application/octet-stream",
475
- ".cpt"=>"application/x-cpt",
476
- ".naplps"=>"image/naplps",
477
- ".htc"=>"text/x-component",
478
- ".xlc"=>"application/excel",
479
- ".vmd"=>"application/vocaltec-media-desc",
480
- ".tif"=>"image/tiff",
481
- ".pkg"=>"application/x-newton-compatible-pkg",
482
- ".jng"=>"image/x-jng",
483
- ".qt"=>"video/quicktime",
484
- ".tcsh"=>"text/x-script.tcsh",
485
- ".aiff"=>"audio/aiff",
486
- ".xld"=>"application/excel",
487
- ".pub"=>"application/x-mspublisher",
488
- ".pwz"=>"application/vnd.ms-powerpoint",
489
- ".gss"=>"application/x-gss",
490
- ".avs"=>"video/avs-video",
491
- ".gz"=>"application/x-compressed",
492
- ".wks"=>"application/vnd.ms-works",
493
- ".uls"=>"text/iuls",
494
- ".dll"=>"application/octet-stream",
495
- ".vmf"=>"application/vocaltec-media-file",
496
- ".mdb"=>"application/x-msaccess",
497
- ".nvd"=>"application/x-navidoc",
498
- ".mpt"=>"application/x-project",
499
- ".p7m"=>"application/x-pkcs7-mime",
500
- ".xbm"=>"image/xbm",
501
- ".cdf"=>"application/cdf",
502
- ".wps"=>"application/vnd.ms-works",
503
- ".rtf"=>"text/richtext",
504
- ".mpv"=>"application/x-project",
505
- ".m13"=>"application/x-msmediaview",
506
- ".dvi"=>"application/x-dvi",
507
- ".shtml"=>"text/x-server-parsed-html",
508
- ".vivo"=>"video/vnd.vivo",
509
- ".setreg"=>"application/set-registration-initiation",
510
- ".etx"=>"text/x-setext",
511
- ".bmp"=>"image/bmp",
512
- ".m14"=>"application/x-msmediaview",
513
- ".wdb"=>"application/vnd.ms-works",
514
- ".mpx"=>"application/x-project",
515
- ".midi"=>"audio/x-midi",
516
- ".pas"=>"text/pascal",
517
- ".xlk"=>"application/excel",
518
- ".w60"=>"application/wordperfect6.0",
519
- ".tsi"=>"audio/tsp-audio",
520
- ".mid"=>"audio/x-midi",
521
- ".p7r"=>"application/x-pkcs7-certreqresp",
522
- ".xll"=>"application/excel",
523
- ".w61"=>"application/wordperfect6.1",
524
- ".ppm"=>"image/x-portable-pixmap",
525
- ".p7s"=>"application/x-pkcs7-signature",
526
- ".htm"=>"text/html",
527
- ".pko"=>"application/ynd.ms-pkipko",
528
- ".xlm"=>"application/excel",
529
- ".vcs"=>"text/x-vcalendar",
530
- ".omc"=>"application/x-omc",
531
- ".mif"=>"application/x-mif"
532
- }
533
-
534
-
535
- end
536
-