dyoder-waves 0.7.7 → 0.8.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 (171) hide show
  1. data/bin/waves +19 -56
  2. data/doc/HISTORY +1 -0
  3. data/doc/LICENSE +22 -0
  4. data/doc/README +1 -0
  5. data/doc/VERSION +1 -0
  6. data/lib/caches/file.rb +48 -0
  7. data/lib/caches/memcached.rb +40 -0
  8. data/lib/caches/simple.rb +25 -0
  9. data/lib/caches/synchronized.rb +25 -0
  10. data/lib/commands/console.rb +35 -0
  11. data/lib/commands/generate.rb +52 -0
  12. data/lib/commands/help.rb +5 -0
  13. data/lib/commands/{waves-server.rb → server.rb} +16 -3
  14. data/lib/dispatchers/base.rb +21 -20
  15. data/lib/dispatchers/default.rb +11 -63
  16. data/lib/ext/float.rb +13 -0
  17. data/lib/{utilities → ext}/hash.rb +2 -2
  18. data/lib/{utilities → ext}/integer.rb +5 -2
  19. data/lib/ext/kernel.rb +20 -0
  20. data/lib/ext/module.rb +20 -0
  21. data/lib/{utilities → ext}/object.rb +3 -5
  22. data/lib/ext/string.rb +20 -0
  23. data/lib/ext/symbol.rb +11 -0
  24. data/lib/ext/tempfile.rb +5 -0
  25. data/lib/foundations/classic.rb +64 -0
  26. data/lib/foundations/compact.rb +50 -0
  27. data/lib/helpers/basic.rb +11 -0
  28. data/lib/helpers/doc_type.rb +34 -0
  29. data/lib/helpers/extended.rb +21 -0
  30. data/lib/helpers/form.rb +3 -1
  31. data/lib/helpers/formatting.rb +3 -3
  32. data/lib/helpers/layouts.rb +37 -0
  33. data/lib/helpers/model.rb +8 -4
  34. data/lib/helpers/view.rb +2 -4
  35. data/lib/layers/inflect/english.rb +67 -0
  36. data/lib/layers/mvc.rb +18 -18
  37. data/lib/layers/mvc/controllers.rb +41 -0
  38. data/lib/layers/mvc/extensions.rb +52 -0
  39. data/lib/layers/orm/{active_record.rb → providers/active_record.rb} +12 -18
  40. data/lib/layers/orm/{active_record → providers/active_record}/migrations/empty.rb.erb +0 -0
  41. data/lib/layers/orm/{active_record → providers/active_record}/tasks/generate.rb +1 -1
  42. data/lib/layers/orm/{active_record → providers/active_record}/tasks/schema.rb +1 -1
  43. data/lib/layers/orm/{data_mapper.rb → providers/data_mapper.rb} +3 -4
  44. data/lib/layers/orm/providers/filebase.rb +25 -0
  45. data/lib/layers/orm/{sequel.rb → providers/sequel.rb} +16 -12
  46. data/lib/layers/orm/{sequel → providers/sequel}/migrations/empty.rb.erb +0 -0
  47. data/lib/layers/orm/{sequel → providers/sequel}/tasks/generate.rb +5 -3
  48. data/lib/layers/orm/{sequel → providers/sequel}/tasks/schema.rb +2 -2
  49. data/lib/{renderers → layers/renderers}/erubis.rb +10 -13
  50. data/lib/layers/renderers/haml.rb +47 -0
  51. data/lib/layers/renderers/markaby.rb +29 -0
  52. data/lib/matchers/accept.rb +21 -0
  53. data/lib/matchers/base.rb +30 -0
  54. data/lib/matchers/content_type.rb +17 -0
  55. data/lib/matchers/path.rb +67 -0
  56. data/lib/matchers/query.rb +21 -0
  57. data/lib/matchers/request.rb +27 -0
  58. data/lib/matchers/resource.rb +19 -0
  59. data/lib/matchers/traits.rb +19 -0
  60. data/lib/matchers/uri.rb +20 -0
  61. data/lib/renderers/mixin.rb +15 -29
  62. data/lib/resources/mixin.rb +132 -0
  63. data/lib/resources/paths.rb +34 -0
  64. data/lib/runtime/configuration.rb +55 -135
  65. data/lib/runtime/console.rb +4 -1
  66. data/lib/runtime/logger.rb +24 -48
  67. data/lib/runtime/mime_types.rb +516 -2
  68. data/lib/runtime/mocks.rb +14 -0
  69. data/lib/runtime/monitor.rb +32 -0
  70. data/lib/runtime/request.rb +107 -39
  71. data/lib/runtime/response.rb +5 -2
  72. data/lib/runtime/response_mixin.rb +43 -22
  73. data/lib/runtime/runtime.rb +67 -0
  74. data/lib/runtime/server.rb +14 -101
  75. data/lib/runtime/session.rb +4 -43
  76. data/lib/runtime/worker.rb +86 -0
  77. data/lib/servers/base.rb +42 -0
  78. data/lib/servers/mongrel.rb +13 -0
  79. data/lib/servers/webrick.rb +13 -0
  80. data/lib/tasks/gem.rb +1 -0
  81. data/lib/tasks/generate.rb +67 -62
  82. data/lib/views/errors.rb +49 -0
  83. data/lib/views/mixin.rb +34 -82
  84. data/lib/waves.rb +36 -55
  85. data/samples/blog/Rakefile +25 -0
  86. data/samples/blog/configurations/default.rb +11 -0
  87. data/samples/blog/configurations/development.rb +29 -0
  88. data/samples/blog/configurations/production.rb +26 -0
  89. data/samples/blog/models/comment.rb +23 -0
  90. data/samples/blog/models/entry.rb +31 -0
  91. data/samples/blog/public/css/site.css +13 -0
  92. data/samples/blog/public/javascript/jquery-1.2.6.min.js +32 -0
  93. data/samples/blog/public/javascript/site.js +13 -0
  94. data/samples/blog/resources/entry.rb +39 -0
  95. data/samples/blog/resources/map.rb +9 -0
  96. data/samples/blog/schema/migrations/001_initial_schema.rb +17 -0
  97. data/samples/blog/schema/migrations/002_add_comments.rb +18 -0
  98. data/samples/blog/schema/migrations/templates/empty.rb.erb +9 -0
  99. data/samples/blog/startup.rb +8 -0
  100. data/samples/blog/templates/comment/add.mab +12 -0
  101. data/samples/blog/templates/comment/list.mab +6 -0
  102. data/samples/blog/templates/entry/edit.mab +14 -0
  103. data/samples/blog/templates/entry/list.mab +16 -0
  104. data/samples/blog/templates/entry/show.mab +18 -0
  105. data/samples/blog/templates/entry/summary.mab +9 -0
  106. data/samples/blog/templates/errors/not_found_404.mab +7 -0
  107. data/{app → samples/blog}/templates/errors/server_error_500.mab +0 -0
  108. data/samples/blog/templates/layouts/default.mab +19 -0
  109. data/samples/blog/templates/waves/status.mab +85 -0
  110. data/templates/classic/Rakefile +130 -0
  111. data/templates/classic/configurations/default.rb.erb +9 -0
  112. data/{app → templates/classic}/configurations/development.rb.erb +3 -7
  113. data/{app → templates/classic}/configurations/production.rb.erb +3 -4
  114. data/templates/classic/resources/map.rb.erb +8 -0
  115. data/templates/classic/startup.rb.erb +11 -0
  116. data/{app → templates/classic}/templates/errors/not_found_404.mab +0 -0
  117. data/templates/classic/templates/errors/server_error_500.mab +2 -0
  118. data/{app → templates/classic}/templates/layouts/default.mab +0 -0
  119. data/templates/compact/startup.rb.erb +11 -0
  120. metadata +967 -144
  121. data/app/Rakefile +0 -14
  122. data/app/bin/waves-console +0 -4
  123. data/app/bin/waves-server +0 -4
  124. data/app/configurations/mapping.rb.erb +0 -13
  125. data/app/controllers/.gitignore +0 -0
  126. data/app/doc/.gitignore +0 -0
  127. data/app/helpers/.gitignore +0 -0
  128. data/app/lib/application.rb.erb +0 -5
  129. data/app/lib/tasks/.gitignore +0 -0
  130. data/app/log/.gitignore +0 -0
  131. data/app/models/.gitignore +0 -0
  132. data/app/public/css/.gitignore +0 -0
  133. data/app/public/flash/.gitignore +0 -0
  134. data/app/public/images/.gitignore +0 -0
  135. data/app/public/javascript/.gitignore +0 -0
  136. data/app/schema/migrations/.gitignore +0 -0
  137. data/app/startup.rb +0 -5
  138. data/app/tmp/sessions/.gitignore +0 -0
  139. data/app/views/.gitignore +0 -0
  140. data/bin/waves-console +0 -4
  141. data/bin/waves-server +0 -4
  142. data/lib/commands/waves-console.rb +0 -21
  143. data/lib/controllers/base.rb +0 -11
  144. data/lib/controllers/mixin.rb +0 -165
  145. data/lib/foundations/default.rb +0 -26
  146. data/lib/foundations/simple.rb +0 -30
  147. data/lib/helpers/asset_helper.rb +0 -67
  148. data/lib/helpers/common.rb +0 -66
  149. data/lib/helpers/default.rb +0 -13
  150. data/lib/helpers/number_helper.rb +0 -25
  151. data/lib/helpers/tag_helper.rb +0 -58
  152. data/lib/helpers/url_helper.rb +0 -77
  153. data/lib/layers/default_errors.rb +0 -26
  154. data/lib/layers/orm/filebase.rb +0 -22
  155. data/lib/layers/simple.rb +0 -35
  156. data/lib/layers/simple_errors.rb +0 -23
  157. data/lib/mapping/mapping.rb +0 -289
  158. data/lib/mapping/pretty_urls.rb +0 -96
  159. data/lib/renderers/markaby.rb +0 -33
  160. data/lib/runtime/application.rb +0 -69
  161. data/lib/runtime/blackboard.rb +0 -57
  162. data/lib/runtime/debugger.rb +0 -9
  163. data/lib/runtime/response_proxy.rb +0 -30
  164. data/lib/tasks/cluster.rb +0 -26
  165. data/lib/utilities/inflect.rb +0 -110
  166. data/lib/utilities/inflect/english.rb +0 -84
  167. data/lib/utilities/module.rb +0 -21
  168. data/lib/utilities/proc.rb +0 -16
  169. data/lib/utilities/string.rb +0 -61
  170. data/lib/utilities/symbol.rb +0 -10
  171. data/lib/views/base.rb +0 -9
@@ -0,0 +1,19 @@
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
@@ -0,0 +1,20 @@
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
@@ -6,42 +6,28 @@ module Waves
6
6
  # Just include this in your Renderer class and write your render method.
7
7
  module Mixin
8
8
 
9
- # Adds the following methods to the target class:
10
- #
11
- # - extension: allows you to set or get the extension used by this renderer.
12
- #
13
- # Renderers::Markaby.extension 'foo' # tell Waves to use .foo as Markaby extension
9
+ # Adds the following methods to the mod class:
14
10
  #
15
11
  # - filename: generate a filename for the template based on a logical path.
16
12
  # - template: read the template from the file corresponding to the given logical path.
17
13
  # - helper: return a helper module that corresponds to the given logical path.
18
14
  #
19
- def self.included(target)
20
- class << target
21
-
22
- def extension(*args)
23
- return @extension if args.length == 0
24
- @extension = args.first
25
- end
26
-
27
- def filename(path)
28
- :templates / "#{path}.#{self.extension}"
29
- end
30
-
31
- def render(path,args=nil)
32
- end
33
-
34
- def template( path )
35
- File.read( filename( path ) )
36
- end
37
-
38
- def helper( path )
39
- Waves.application.helpers[
40
- File.basename( File.dirname( path ) ).camel_case ]
41
- end
42
- end
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 ) )
43
26
  end
44
27
 
28
+ def helper( path )
29
+ Waves.main[ :helpers ][ File.basename( File.dirname( path ) ).camel_case ]
30
+ end
45
31
 
46
32
  end
47
33
 
@@ -0,0 +1,132 @@
1
+ module Waves
2
+
3
+ module Resources
4
+
5
+ StatusCodes = {
6
+ Waves::Dispatchers::NotFoundError => 404
7
+ }
8
+
9
+
10
+ module Mixin
11
+
12
+ attr_reader :request
13
+
14
+ module ClassMethods
15
+
16
+ def paths
17
+ unless @paths
18
+ resource = self
19
+ @paths = Class.new( superclass.respond_to?( :paths ) ? superclass.paths : Waves::Resources::Paths ) do
20
+ @resource = resource
21
+ def self.resource ; @resource ; end
22
+ end
23
+ else
24
+ @paths
25
+ end
26
+ end
27
+ def with( options ) ; @options = options ; yield ; @options = nil ; end
28
+ def on( method, path = true, options = nil, &block )
29
+ if path.is_a? Hash
30
+ generator = path.keys.first
31
+ path = path.values.first
32
+ end
33
+ if options
34
+ options[ :path ] = path
35
+ else
36
+ options = { :path => path }
37
+ end
38
+ options = @options.merge( options ) if @options
39
+ matcher = Waves::Matchers::Resource.new( options )
40
+ methods = case method
41
+ when nil then nil
42
+ when true then [ :post, :get, :put, :delete ]
43
+ when Array then method
44
+ else [ method ]
45
+ end
46
+ methods.each do | method |
47
+ functor_with_self( method, matcher, &block )
48
+ end
49
+ paths.module_eval {
50
+ define_method( generator ) { | *args | generate( path, args ) }
51
+ } if generator
52
+ end
53
+ def before( path = nil, options = {}, &block )
54
+ on( :before, path, options, &block )
55
+ end
56
+ def after( path = nil, options = {}, &block )
57
+ on( :after, path, options, &block )
58
+ end
59
+ def wrap( path = nil, options = {}, &block )
60
+ before( path, options, &block )
61
+ after( path, options, &block )
62
+ end
63
+ def handler( exception, &block ) ; functor( :handler, exception, &block ) ; end
64
+ def always( &block ) ; define_method( :always, &block ) ; end
65
+
66
+ end
67
+
68
+ # this is necessary because you can't define functors within a module because the functor attempts
69
+ # to incorporate the superclass functor table into it's own
70
+ def self.included( resource )
71
+
72
+ resource.module_eval do
73
+
74
+ include ResponseMixin, Functor::Method ; extend ClassMethods
75
+
76
+ def initialize( request ); @request = request ; end
77
+
78
+ def process
79
+ begin
80
+ before ; body = send( request.method ) ; after
81
+ rescue Exception => e
82
+ response.status = ( StatusCodes[ e.class ] || 500 )
83
+ ( body = handler( e ) ) rescue raise e
84
+ Waves::Logger.warn e.to_s
85
+ Waves::Logger.debug "#{e.class.name} : #{e.message}"
86
+ e.backtrace.each { |t| Waves::Logger.debug " #{t}" }
87
+ ensure
88
+ always
89
+ end
90
+ return body
91
+ end
92
+
93
+ def to( resource )
94
+ resource = case resource
95
+ when Base
96
+ resource
97
+ when Symbol, String
98
+ begin
99
+ Waves.main::Resources[ resource ]
100
+ rescue NameError
101
+ raise Waves::Dispatchers::NotFoundError
102
+ end
103
+ Waves.main::Resources[ resource ]
104
+ end
105
+ r = traits.waves.resource = resource.new( request )
106
+ r.process
107
+ end
108
+
109
+ def redirect( path ) ; request.redirect( path ) ; end
110
+
111
+ # override for resources that may have long-running requests. this helps servers
112
+ # determine how to handle the request
113
+ def deferred? ; false ; end
114
+
115
+ before {} ; after {} ; always {}
116
+
117
+ %w( post get put delete head ).each do | method |
118
+ on( method ) { not_found }
119
+ end
120
+
121
+ end
122
+
123
+ end
124
+
125
+ end
126
+
127
+ class Base ; include Mixin ; end
128
+
129
+ end
130
+
131
+
132
+ end
@@ -0,0 +1,34 @@
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,114 +1,5 @@
1
1
  module Waves
2
2
 
3
- # Waves configurations are Ruby code. This means you can use a Ruby expression as
4
- # the value of a configuration attribute, extend and inherit your configurations, and
5
- # add your own attributes. You can even use it as a repository
6
- # for your application configuration.
7
- #
8
- # You can access configuration attributes using the attribute name as a method, with the value as the argument.
9
- #
10
- # == Example
11
- #
12
- # module Blog
13
- # module Configurations
14
- # class Development < Default
15
- # host '127.0.0.1'
16
- # port 2000
17
- # reloadable [ Blog ]
18
- # log :level => :debug
19
- # application do
20
- # use Rack::ShowExceptions
21
- # run Waves::Dispatchers::Default.new
22
- # end
23
- # end
24
- # end
25
- # end
26
- #
27
- # There are three forms for accessing attributes:
28
- #
29
- # Waves.config.port # generic form - gets the value for current config
30
- # Blog.configurations[:development].port # gets the value for a specified config
31
- # Blog::Configurations::Development.port # Access a specific config constant directly
32
- #
33
- # Configuration data is inheritable, as shown in the example above. Typically, you
34
- # would set data common to all configurations in the Default class, from which
35
- # your variations inherit.
36
- #
37
- # You may define your own heritable attributes using the +attribute+ class method:
38
- #
39
- # class Default < Waves::Configurations::Default
40
- # attribute 'theme' # define an attribute named "theme"
41
- # theme 'ultra' # set an inheritable default
42
- # end
43
- #
44
- # Certain attributes are reserved for internal use by Waves:
45
- #
46
- # - application: configure the application for use with Rack
47
- # - database: initialization parameters needed by the ORM layer
48
- # - reloadable: an array of module names to reload; see below for more
49
- # - log: takes a hash of parameters; see below for more
50
- # - host: the host to bind the server to (string)
51
- # - port: the port for the server to listen on (number)
52
- # - ports: used by the cluster:start task for clustering servers (array of numbers)
53
- # - debug: true if running in "debug" mode, which automatically reloads code
54
- #
55
- # == Configuring The Rack Application
56
- #
57
- # One of the really nice features of Rack is the ability to install "middleware"
58
- # components to optimize the way you handle requests. Waves exposes this ability
59
- # directly to the application developer via the +application+ configuration method.
60
- #
61
- # *Example*
62
- #
63
- # # Typical debugging configuration
64
- # application do
65
- # use Rack::ShowExceptions
66
- # run Waves::Dispatchers::Default.new
67
- # end
68
- #
69
- # == Configuring Database Access
70
- #
71
- # The ORM layers provided with Waves use the +database+ attribute for connection initialization.
72
- # Most ORMs take a hash for this purpose, with keys that may vary depending on the ORM and backend.
73
- #
74
- # # Sequel with a MySQL db
75
- # database :host => 'localhost', :adapter => 'mysql', :database => 'blog',
76
- # :user => 'root', :password => 'guess'
77
- #
78
- # # Sequel with an SQLite db
79
- # database :adapter => 'sqlite', :database => 'blog'
80
- #
81
- # See the documentation for each ORM layer for details.
82
- #
83
- # == Configuring Code Reloading
84
- #
85
- # The +reloadable+ attribute takes an array of modules. Before every request, the default Waves
86
- # dispatcher calls +reload+ on each listed module. The module should remove any reloadable constants
87
- # currently defined in its namespace.
88
- #
89
- # In a Waves application built on the Default foundation, +reload+ functionality is provided
90
- # by AutoCode for the Configurations, Controllers, Helpers, Models, and Views modules.
91
- #
92
- # Listing only your application module will work in most cases:
93
- #
94
- # reloadable [ Blog ]
95
- #
96
- # As an alternative, you could reload only some of the modules within your application:
97
- #
98
- # reloadable [ Blog::Models, Blog::Controllers ]
99
- #
100
- # == Configuring Logging
101
- #
102
- # The +log+ configuration attribute takes hash with these keys:
103
- # - :level - The log filter level. Uses Ruby's built in Logger class.
104
- # - :output - A filename or IO object. Should be a filename if running as a daemon.
105
- #
106
- # *Examples*
107
- #
108
- # log :level => :info, :output => $stderr
109
- # log :level => :error, :output => 'log/blog.log'
110
- #
111
-
112
3
  module Configurations
113
4
 
114
5
  class Base
@@ -131,33 +22,51 @@ module Waves
131
22
  end
132
23
  self[ name ] = nil
133
24
  end
25
+
26
+ def self.attributes( *names )
27
+ names.each { |name| attribute( name ) }
28
+ end
134
29
 
135
30
  end
136
31
 
137
32
  # The Default configuration defines sensible defaults for attributes required by Waves.
138
- # debug true
139
- # synchronize? true
140
- # session :duration => 30.minutes, :path => '/tmp/sessions'
141
- # log :level => :info, :output => $stderr
142
- # reloadable []
143
33
  class Default < Base
144
-
145
- %w( host port ports log reloadable database session debug root synchronize? ).
146
- each { |name| attribute(name) }
147
-
148
- # Set the Rack handler, along with any specific options
149
- # that need to be passed to the handler's #run method.
150
- #
151
- # When accessing the value
152
- # (calling with no arguments), returns an array of the handler and options.
153
- def self.handler(*args)
154
- if args.length > 0
155
- @rack_handler, @rack_handler_options = args
156
- else
157
- [ @rack_handler, @rack_handler_options ]
158
- end
159
- end
160
-
34
+
35
+ # define where a server should listen
36
+ # can be overridden by -p and -h options
37
+ attributes( :host, :port, :ports )
38
+
39
+ # which server to use, ex: Waves::Servers::Mongrel
40
+ attribute( :server )
41
+
42
+ # where will the logger write to? can be a IO object or a pathname
43
+ # also can set the level here to :fatal, :debug, :warn, :info
44
+ attribute( :log )
45
+
46
+ # which modules are going to be reloaded on each request?
47
+ attribute( :reloadable )
48
+
49
+ # which resource to use as the "main" resource for this server
50
+ attribute( :resource )
51
+
52
+ # parameters for the database connection, varies by ORM
53
+ attribute( :database )
54
+
55
+ # options for the session: options for duration and path
56
+ attribute( :session )
57
+
58
+ # set the debug mode flag; typically done in dev / test configurations
59
+ attribute( :debug )
60
+
61
+ # what object to use as the main Waves cache
62
+ attribute( :cache )
63
+
64
+ # do you want to run a console thread (ex: LiveConsole)
65
+ attribute( :console )
66
+
67
+ # are there any gems we need to check for on startup?
68
+ attributes( :dependencies )
69
+
161
70
  # Provides access to the Waves::MimeTypes class via the configuration. You
162
71
  # can override #mime_types to return your own MIME types repository class.
163
72
  def self.mime_types
@@ -173,13 +82,24 @@ module Waves
173
82
  self['application']
174
83
  end
175
84
  end
176
-
177
- debug true ; synchronize? true
85
+
86
+ # default options
87
+ debug true
178
88
  session :duration => 30.minutes, :path => '/tmp/sessions'
179
89
  log :level => :info, :output => $stderr
180
90
  reloadable []
91
+ dependencies []
92
+ server Waves::Servers::WEBrick
93
+ application {
94
+ use ::Rack::ShowExceptions
95
+ use Rack::Session::Cookie, :key => 'rack.session',
96
+ # :domain => 'foo.com',
97
+ :path => '/',
98
+ :expire_after => 2592000,
99
+ :secret => 'Change it'
100
+
101
+ run ::Waves::Dispatchers::Default.new
102
+ }
181
103
  end
182
104
  end
183
105
  end
184
-
185
-