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
@@ -0,0 +1,33 @@
1
+ module Waves
2
+
3
+ class Server < Hive::Worker
4
+
5
+ include Waves::Runtime
6
+
7
+ def initialize( options = {} )
8
+ require 'ruby-debug' if options[:debugger]
9
+ super( options )
10
+ load # load the runtime
11
+ end
12
+
13
+ def start_tasks
14
+ @server = config.server.new( application, host, port )
15
+ @server.start
16
+ end
17
+
18
+ def stop_tasks() ; @server.stop ; end
19
+
20
+ private
21
+
22
+ def application()
23
+ @app ||= begin
24
+ config.application.run( config.dispatcher.new )
25
+ config.application.to_app
26
+ end
27
+ end
28
+ def port() ; ( @port ||= options[:port] || config.port ) ; end
29
+ def host() ; ( @host ||= options[:host] || config.host ) ; end
30
+
31
+ end
32
+
33
+ end
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,173 @@
1
+ # Markaby-ish way to declare CSS
2
+ # This code is based on code written by automatthew:
3
+ # http://github.com/automatthew/cassandra/tree/master
4
+ class Cassy
5
+
6
+ HTML_TAGS = %w( a abbr acronym address area b base bdo big blockquote body br button caption cite code col colgroup dd del dfn div dl dt em fieldset form
7
+ h1 h2 h3 h4 h5 h6 head hr html i img input ins kbd label legend li link map meta noscript object ol optgroup option p param pre q samp script select
8
+ small span strong style sub sup table tbody td textarea tfoot th thead title tr tt ul var )
9
+
10
+ CSS_PROPERTIES = %w( azimuth background background_attachment background_color background_image background_position background_repeat border
11
+ border_left border_top border_right border_bottom border_collapse border_color border_spacing border_style border_top border_top_color border_top_style
12
+ border_top_width border_width bottom caption_side clear clip color content counter_increment counter_reset cue cue_after cue_before cursor
13
+ direction display elevation empty_cells float font font_family font_size font_size_adjust font_stretch font_style font_variant font_weight height
14
+ left letter_spacing line_height list_style list_style_image list_style_position list_style_type margin margin_left margin_top margin_right margin_bottom
15
+ marker_offset marks max_height max_width min_height min_width orphans outline outline_color outline_style outline_width overflow padding padding_left
16
+ padding_top padding_right padding_bottom page page_break_after page_break_before page_break_inside pause pause_after pause_before pitch pitch_range
17
+ play_during position quotes richness right size speak speak_header speak_numeral speak_punctuation speech_rate stress table_layout text_align
18
+ text_decoration text_indent text_shadow text_transform top unicode_bidi vertical_align visibility voice_family volume white_space widows width
19
+ word_spacing z_index )
20
+
21
+ METHODS = %w( class include extend instance_eval send __send__ __id__ respond_to? )
22
+ instance_methods.each { |m| undef_method( m ) unless METHODS.include? m }
23
+
24
+ methods = HTML_TAGS.each do |tag|
25
+ module_eval( "def #{tag}(&block); selector_eval(@selector.first, '#{tag}', &block);end\n" )
26
+ end
27
+
28
+ attr_reader :data
29
+
30
+ def initialize(sel=nil)
31
+ @data = []
32
+ @selectors = [ sel ]
33
+ @properties = []
34
+
35
+ # Primitive state machine
36
+ # possible states are :closed_block, :chain, :open_block
37
+ @state = :closed_block
38
+ end
39
+
40
+ def self.process(*args,&block)
41
+ self.new.process(*args,&block)
42
+ end
43
+
44
+ def process(*args, &block)
45
+ if block
46
+ instance_eval(&block)
47
+ else
48
+ instance_eval(args.join("\n"))
49
+ end
50
+ self
51
+ end
52
+
53
+ def to_s
54
+ @data.map do |sel|
55
+ properties = sel.last.join("\n ")
56
+ "#{sel.first} {\n #{properties}\n}\n"
57
+ end.join
58
+ end
59
+
60
+
61
+
62
+ # Pushes an empty array on the properties stack and registers
63
+ # that array (against the current selector) in @data
64
+ def new_property_set
65
+ @properties.push []
66
+ @data << [@selectors[-1], @properties[-1] ]
67
+ end
68
+
69
+
70
+ # Declare a CSS selector using a block. May be chained and nested.
71
+ def selector(sel)
72
+ if block_given?
73
+ open_block(sel)
74
+ yield
75
+ closed_block
76
+ else
77
+ chain(sel)
78
+ end
79
+ self
80
+ end
81
+
82
+ # Catch unknown methods and treat them as CSS class or id selectors.
83
+ def method_missing(name, &block)
84
+ sel = selectify(name)
85
+ if block_given?
86
+ open_block(sel)
87
+ yield
88
+ closed_block
89
+ else
90
+ chain(sel)
91
+ end
92
+ self
93
+ end
94
+
95
+ # bang methods represent CSS ids. Otherwise CSS classes.
96
+ def selectify(method_name)
97
+ matches = method_name.to_s.match( /([\w_]+)!$/)
98
+ matches ? "##{matches[1]}" : ".#{method_name}"
99
+ end
100
+
101
+
102
+ # define tag methods that delegate to selector
103
+ methods = HTML_TAGS.map do |tag|
104
+ <<-METHOD
105
+ def #{tag}(&block)
106
+ selector('#{tag}', &block)
107
+ end
108
+ METHOD
109
+ end.join; module_eval(methods)
110
+
111
+ # define methods for CSS properties.
112
+ CSS_PROPERTIES.each do |method_name|
113
+ define_method method_name do |*args|
114
+ css_attr = method_name.gsub('_', '-')
115
+ property(css_attr, args)
116
+ end
117
+ end
118
+
119
+ # Add a property declaration string to the current selector's properties array.
120
+ def property(css_attr, *args)
121
+ @properties[-1] << "#{css_attr}: #{args.join(' ')};"
122
+ end
123
+
124
+ ## State transitions
125
+
126
+ # Push the accumulated selector and a new property array onto the
127
+ # tops of their respected stacks
128
+ def open_block(new_selector)
129
+ case @state
130
+ when :closed_block, :open_block
131
+ combined_selector = [@selectors[-1], new_selector].compact.join(" ")
132
+ @selectors.push combined_selector
133
+ new_property_set
134
+ when :chain
135
+ @selectors[-1] = "#{@selectors[-1]}#{new_selector}"
136
+ new_property_set
137
+ else
138
+ raise "You can't get to :open_block from #{@state.inspect}"
139
+ end
140
+
141
+ @state = :open_block
142
+ end
143
+
144
+ # Pushes accumulated selector on the stack without generating a new properties array.
145
+ def chain(new_selector)
146
+ case @state
147
+ when :closed_block, :open_block
148
+ combined_selector = [@selectors[-1], new_selector].compact.join(" ")
149
+ @selectors.push( combined_selector)
150
+ when :chain
151
+ @selectors[-1] = "#{@selectors[-1]}#{new_selector}"
152
+ else
153
+ raise "You can't get to :chain from #{@state.inspect}"
154
+ end
155
+
156
+ @state = :chain
157
+ end
158
+
159
+ # Pop the selector string and property array for the closing block
160
+ # off of their respective stacks
161
+ def closed_block
162
+ case @state
163
+ when :open_block, :closed_block
164
+ @selectors.pop
165
+ @properties.pop
166
+ else
167
+ raise "You can't get to :closed_block from #{@state.inspect}"
168
+ end
169
+
170
+ @state = :closed_block
171
+ end
172
+
173
+ end
@@ -1,10 +1,11 @@
1
- require 'helpers/doc_type'
1
+ require 'waves/helpers/doc_type'
2
+
2
3
  module Waves
3
4
  module Views
4
5
  class Errors < Waves::Views::Base
5
-
6
+
6
7
  include Waves::Helpers::DocType
7
-
8
+
8
9
  def header( title )
9
10
  <<-HTML
10
11
  <head>
@@ -17,7 +18,7 @@ module Waves
17
18
  </head>
18
19
  HTML
19
20
  end
20
-
21
+
21
22
  def not_found_404
22
23
  DOCTYPES[ :html4_transitional ]
23
24
  <<-HTML
@@ -30,14 +31,14 @@ module Waves
30
31
  </html>
31
32
  HTML
32
33
  end
33
-
34
+
34
35
  def server_error_500
35
36
  DOCTYPES[ :html4_transitional ]
36
37
  <<-HTML
37
38
  <html>
38
39
  #{ header( '500: Server Error' ) }
39
40
  <body>
40
- <h1>404</h1>
41
+ <h1>500</h1>
41
42
  <p>Internal server error. Sorry, but your request could not be processed.</p>
42
43
  </body>
43
44
  </html>
@@ -46,4 +47,4 @@ module Waves
46
47
 
47
48
  end
48
49
  end
49
- end
50
+ end
@@ -0,0 +1,23 @@
1
+ module Waves
2
+
3
+ module Views
4
+
5
+ module Mixin
6
+
7
+ attr_reader :request
8
+
9
+ include Waves::ResponseMixin
10
+
11
+ def initialize( request )
12
+ @request = request
13
+ super()
14
+ end
15
+
16
+ end
17
+
18
+ class Base ; include Mixin ; end
19
+
20
+ end
21
+
22
+
23
+ end
@@ -0,0 +1,40 @@
1
+ module Waves
2
+
3
+ module Views
4
+
5
+ class NoTemplateError < StandardError
6
+ end
7
+
8
+ def self.renderers ; @renderers ||= [] ; end
9
+ def self.extensions; @extensions ||= renderers.map { |r| r::Extension }; end
10
+
11
+ module Templated
12
+
13
+ def template_file(name)
14
+ template = "templates/#{self.class.basename.snake_case}/#{name}"
15
+ extensions = Views.extensions.join(',')
16
+ # globbing on a {x,y,z} group returns the found files in x,y,z order
17
+ raise NoTemplateError.new( path ) unless file = Dir["#{template}.{#{extensions}}"].first
18
+ file
19
+ end
20
+
21
+ # Render the template found in the directory named after this view (snake cased, of course)
22
+ # E.g. App::Views::Gnome.new.render( "stink" ) would look for templates/gnome/stink.<ext>
23
+
24
+ def render( name, assigns={})
25
+ file = template_file(name)
26
+ ext = File.extname(file).slice(1..-1)
27
+ Waves.log.debug "Rendering: #{file}"
28
+ self.send( ext, File.read(file), assigns.merge!( :request => request ))
29
+ end
30
+
31
+ # Render the template with the name of the missing method.
32
+ # E.g. App::Views::Gnome.new.stink would look for templates/gnome/stink
33
+ def method_missing(name,*args) ; render( name, *args ) ; end
34
+
35
+ end
36
+
37
+ end
38
+
39
+
40
+ end
@@ -0,0 +1,70 @@
1
+ require "autocode"
2
+
3
+ here = File.dirname __FILE__
4
+ waves = ENV["WAVES"] || File.join(here, "waves", "lib")
5
+
6
+ # Primitive startup file while developing the path matcher.
7
+ #
8
+ module Basic
9
+
10
+ # Register.
11
+ #
12
+ Waves << self
13
+
14
+ # All of our resources live here.
15
+ #
16
+ module Resources
17
+ include AutoCode
18
+
19
+ auto_load true, :directories => "resources"
20
+
21
+ # First-tier resource mapper.
22
+ #
23
+ class Main
24
+ include Waves::Resources::Mixin
25
+
26
+ on(:get, "moomin") { "Hi!" }
27
+ on(:get, "moomin", "there") { "Hi there!" }
28
+
29
+ # E.g. /moomin/wherever
30
+ on(:get, "moomin", :elsewhere) { "Hi #{captured.elsewhere}!" }
31
+
32
+ # E.g. /moomin/hobbies/football/medals or
33
+ # /moomin/hobbies/football/regional/medals
34
+ on(:get, "moomin", "hobbies", 1..2, "medals") { "No medals :/" }
35
+
36
+ end
37
+ end
38
+
39
+
40
+ # Configuration settings.
41
+ #
42
+ module Configurations
43
+
44
+ # Sane default config. Can be run standalone or from rackup.
45
+ #
46
+ class Development < Waves::Configurations::Default
47
+ reloadable [Basic::Resources]
48
+
49
+ # When running standalone.
50
+ server Waves::Servers::Mongrel
51
+ host "127.0.0.1"
52
+ port 8080
53
+
54
+ resource Basic::Resources::Main
55
+
56
+ application {
57
+ use Rack::ShowExceptions
58
+ use Rack::Static, :urls => %w[ /favicon.ico ],
59
+ :root => "public"
60
+ run Waves::Dispatchers::Fast.new
61
+ }
62
+ end
63
+
64
+ class Production < Development
65
+ end
66
+
67
+ end
68
+
69
+ end
70
+
@@ -0,0 +1,9 @@
1
+ WAVES = ENV["WAVES"] || File.join(File.dirname(__FILE__), "waves", "lib")
2
+
3
+ $LOAD_PATH.unshift WAVES
4
+
5
+ require "waves"
6
+ require "waves/runtime/rackup"
7
+
8
+ run Waves::Rackup.load(:startup => "basic_startup.rb")
9
+
@@ -1,3 +1,4 @@
1
+ # require 'layers/rack/rack_cache'
1
2
  module Blog
2
3
 
3
4
  module Configurations
@@ -5,22 +6,22 @@ module Blog
5
6
  class Development < Default
6
7
 
7
8
  reloadable [ Blog ]
8
- log :level => :debug
9
- host '127.0.0.1'
10
- port 4000
11
-
12
- application do
13
- use ::Rack::ShowExceptions
14
- use ::Rack::Static,
15
- :urls => %w( /css /javascript /favicon.ico ),
16
- :root => 'public'
17
- use Rack::Session::Cookie,
18
- :key => 'blog.session', :path => '/',
19
- :expire_after => 3.days
20
- run ::Waves::Dispatchers::Default.new
21
- end
22
-
23
- server Waves::Servers::Mongrel
9
+
10
+ # in case we want to use http caching
11
+ # include Waves::Cache::RackCache
12
+ application.use Rack::Session::Cookie, :key => 'rack.session',
13
+ :path => '/',
14
+ :expire_after => 2592000,
15
+ :secret => 'Change it'
16
+
17
+ application.use ::Rack::Static, :urls => %w[ /css /javascript /favicon.ico ],
18
+ :root => 'public'
19
+
20
+ application.run Waves::Dispatchers::Default.new
21
+
22
+ server Waves::Servers::Mongrel
23
+ host "0.0.0.0"
24
+ port 8080
24
25
 
25
26
  end
26
27