waves-edge 2009.03.10.13.14
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/waves +30 -0
- data/doc/HISTORY +1 -0
- data/doc/LICENSE +22 -0
- data/doc/README +1 -0
- data/doc/VERSION +1 -0
- data/lib/caches/file.rb +48 -0
- data/lib/caches/memcached.rb +40 -0
- data/lib/caches/simple.rb +25 -0
- data/lib/caches/synchronized.rb +25 -0
- data/lib/commands/console.rb +35 -0
- data/lib/commands/generate.rb +52 -0
- data/lib/commands/help.rb +5 -0
- data/lib/commands/server.rb +68 -0
- data/lib/dispatchers/base.rb +68 -0
- data/lib/dispatchers/default.rb +25 -0
- data/lib/ext/float.rb +13 -0
- data/lib/ext/hash.rb +31 -0
- data/lib/ext/integer.rb +27 -0
- data/lib/ext/kernel.rb +20 -0
- data/lib/ext/module.rb +20 -0
- data/lib/ext/object.rb +33 -0
- data/lib/ext/string.rb +20 -0
- data/lib/ext/symbol.rb +11 -0
- data/lib/ext/tempfile.rb +5 -0
- data/lib/foundations/classic.rb +59 -0
- data/lib/foundations/compact.rb +52 -0
- data/lib/helpers/basic.rb +11 -0
- data/lib/helpers/doc_type.rb +34 -0
- data/lib/helpers/extended.rb +21 -0
- data/lib/helpers/form.rb +42 -0
- data/lib/helpers/formatting.rb +30 -0
- data/lib/helpers/layouts.rb +37 -0
- data/lib/helpers/model.rb +37 -0
- data/lib/helpers/view.rb +22 -0
- data/lib/layers/inflect/english.rb +35 -0
- data/lib/layers/mvc.rb +41 -0
- data/lib/layers/mvc/controllers.rb +41 -0
- data/lib/layers/mvc/extensions.rb +52 -0
- data/lib/layers/orm/migration.rb +79 -0
- data/lib/layers/orm/providers/active_record.rb +84 -0
- data/lib/layers/orm/providers/active_record/migrations/empty.rb.erb +9 -0
- data/lib/layers/orm/providers/active_record/tasks/generate.rb +28 -0
- data/lib/layers/orm/providers/active_record/tasks/schema.rb +22 -0
- data/lib/layers/orm/providers/data_mapper.rb +37 -0
- data/lib/layers/orm/providers/filebase.rb +25 -0
- data/lib/layers/orm/providers/sequel.rb +87 -0
- data/lib/layers/orm/providers/sequel/migrations/empty.rb.erb +9 -0
- data/lib/layers/orm/providers/sequel/tasks/generate.rb +30 -0
- data/lib/layers/orm/providers/sequel/tasks/schema.rb +16 -0
- data/lib/layers/renderers/erubis.rb +52 -0
- data/lib/layers/renderers/haml.rb +67 -0
- data/lib/layers/renderers/markaby.rb +41 -0
- data/lib/matchers/accept.rb +21 -0
- data/lib/matchers/base.rb +30 -0
- data/lib/matchers/content_type.rb +17 -0
- data/lib/matchers/path.rb +67 -0
- data/lib/matchers/query.rb +21 -0
- data/lib/matchers/request.rb +27 -0
- data/lib/matchers/resource.rb +19 -0
- data/lib/matchers/traits.rb +19 -0
- data/lib/matchers/uri.rb +20 -0
- data/lib/renderers/mixin.rb +13 -0
- data/lib/resources/mixin.rb +136 -0
- data/lib/resources/paths.rb +132 -0
- data/lib/runtime/configuration.rb +100 -0
- data/lib/runtime/console.rb +23 -0
- data/lib/runtime/logger.rb +35 -0
- data/lib/runtime/mime_types.rb +536 -0
- data/lib/runtime/mocks.rb +14 -0
- data/lib/runtime/monitor.rb +32 -0
- data/lib/runtime/request.rb +152 -0
- data/lib/runtime/response.rb +43 -0
- data/lib/runtime/response_mixin.rb +54 -0
- data/lib/runtime/runtime.rb +69 -0
- data/lib/runtime/server.rb +20 -0
- data/lib/runtime/session.rb +27 -0
- data/lib/runtime/worker.rb +86 -0
- data/lib/servers/base.rb +42 -0
- data/lib/servers/mongrel.rb +13 -0
- data/lib/servers/webrick.rb +13 -0
- data/lib/tasks/gem.rb +32 -0
- data/lib/tasks/generate.rb +85 -0
- data/lib/views/errors.rb +49 -0
- data/lib/views/mixin.rb +64 -0
- data/lib/waves.rb +63 -0
- data/samples/blog/Rakefile +25 -0
- data/samples/blog/configurations/default.rb +11 -0
- data/samples/blog/configurations/development.rb +29 -0
- data/samples/blog/configurations/production.rb +26 -0
- data/samples/blog/models/comment.rb +23 -0
- data/samples/blog/models/entry.rb +31 -0
- data/samples/blog/public/css/site.css +13 -0
- data/samples/blog/public/javascript/jquery-1.2.6.min.js +32 -0
- data/samples/blog/public/javascript/site.js +13 -0
- data/samples/blog/resources/entry.rb +39 -0
- data/samples/blog/resources/map.rb +9 -0
- data/samples/blog/schema/migrations/001_initial_schema.rb +17 -0
- data/samples/blog/schema/migrations/002_add_comments.rb +18 -0
- data/samples/blog/schema/migrations/templates/empty.rb.erb +9 -0
- data/samples/blog/startup.rb +8 -0
- data/samples/blog/templates/comment/add.mab +12 -0
- data/samples/blog/templates/comment/list.mab +6 -0
- data/samples/blog/templates/entry/edit.mab +14 -0
- data/samples/blog/templates/entry/list.mab +16 -0
- data/samples/blog/templates/entry/show.mab +18 -0
- data/samples/blog/templates/entry/summary.mab +9 -0
- data/samples/blog/templates/errors/not_found_404.mab +7 -0
- data/samples/blog/templates/errors/server_error_500.mab +2 -0
- data/samples/blog/templates/layouts/default.mab +19 -0
- data/samples/blog/templates/waves/status.mab +85 -0
- data/templates/classic/Rakefile +90 -0
- data/templates/classic/configurations/default.rb.erb +9 -0
- data/templates/classic/configurations/development.rb.erb +26 -0
- data/templates/classic/configurations/production.rb.erb +29 -0
- data/templates/classic/controllers/.gitignore +0 -0
- data/templates/classic/helpers/.gitignore +0 -0
- data/templates/classic/lib/tasks/.gitignore +0 -0
- data/templates/classic/models/.gitignore +0 -0
- data/templates/classic/public/css/.gitignore +0 -0
- data/templates/classic/public/flash/.gitignore +0 -0
- data/templates/classic/public/images/.gitignore +0 -0
- data/templates/classic/public/javascript/.gitignore +0 -0
- data/templates/classic/resources/.gitignore +0 -0
- data/templates/classic/resources/map.rb.erb +8 -0
- data/templates/classic/schema/migrations/.gitignore +0 -0
- data/templates/classic/startup.rb.erb +11 -0
- data/templates/classic/templates/errors/not_found_404.mab +7 -0
- data/templates/classic/templates/errors/server_error_500.mab +7 -0
- data/templates/classic/templates/layouts/default.mab +14 -0
- data/templates/classic/tmp/sessions/.gitignore +0 -0
- data/templates/classic/views/.gitignore +0 -0
- data/templates/compact/startup.rb.erb +11 -0
- data/test/ext/object.rb +55 -0
- data/test/ext/shortcuts.rb +73 -0
- data/test/helpers.rb +17 -0
- data/test/match/accept.rb +34 -0
- data/test/match/methods.rb +22 -0
- data/test/match/params.rb +33 -0
- data/test/match/path.rb +106 -0
- data/test/match/query.rb +40 -0
- data/test/process/request.rb +75 -0
- data/test/process/resource.rb +53 -0
- data/test/resources/path.rb +166 -0
- data/test/runtime/configurations.rb +19 -0
- data/test/runtime/request.rb +63 -0
- data/test/runtime/response.rb +55 -0
- data/test/views/views.rb +34 -0
- metadata +394 -0
data/lib/servers/base.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
module Waves
|
2
|
+
|
3
|
+
module Servers
|
4
|
+
|
5
|
+
# Inherit from this class and define the #call method to create Servers.
|
6
|
+
# Like Rack Handlers, except with an attempt at a more generic interface.
|
7
|
+
# The #call method should yield with the actual server object.
|
8
|
+
|
9
|
+
class Base
|
10
|
+
|
11
|
+
attr_reader :application, :host, :port
|
12
|
+
def initialize( application, host, port )
|
13
|
+
@application = application
|
14
|
+
@host = host ;@port = port
|
15
|
+
end
|
16
|
+
|
17
|
+
# starts server, retrying every second until it succeeds
|
18
|
+
def start
|
19
|
+
Thread.new do
|
20
|
+
connect = false
|
21
|
+
until connect do
|
22
|
+
begin
|
23
|
+
call do |server|
|
24
|
+
@server = server
|
25
|
+
Waves::Logger.info "#{self.class.basename} started on #{host}:#{port}."
|
26
|
+
end
|
27
|
+
rescue RuntimeError => e
|
28
|
+
Waves::Logger.error e.to_s
|
29
|
+
sleep 1
|
30
|
+
end
|
31
|
+
connect = true
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def stop
|
37
|
+
Waves::Logger.info "#{self.class.basename} on #{host}:#{port} stopped."
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Waves
|
2
|
+
module Servers
|
3
|
+
class WEBrick < Base
|
4
|
+
|
5
|
+
def call
|
6
|
+
Rack::Handler::WEBrick.run( application, :Host => host, :Port => port ) { | server | yield server if block_given? }
|
7
|
+
end
|
8
|
+
|
9
|
+
def stop ; @server.stop ; super ; end
|
10
|
+
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/lib/tasks/gem.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
namespace :gem do
|
2
|
+
|
3
|
+
desc "freeze a gem using gem=<gem name> [version=<gem version>]"
|
4
|
+
task :freeze do
|
5
|
+
raise "No gem specified" unless gem_name = ENV['gem']
|
6
|
+
|
7
|
+
require 'rubygems'
|
8
|
+
Gem.manage_gems
|
9
|
+
|
10
|
+
gem = (version = ENV['version']) ?
|
11
|
+
Gem.cache.search(gem_name, "= #{version}").first :
|
12
|
+
Gem.cache.search(gem_name).sort_by { |g| g.version }.last
|
13
|
+
|
14
|
+
version ||= gem.version.version rescue nil
|
15
|
+
|
16
|
+
target_dir = File.join(Waves::Configurations::Default.root, 'gems')
|
17
|
+
mkdir_p target_dir
|
18
|
+
sh "gem install #{gem_name} --version #{version} -i #{target_dir} --no-rdoc --no-ri"
|
19
|
+
|
20
|
+
puts "Unpacked #{gem_name} #{version} to '#{target_dir}'"
|
21
|
+
end
|
22
|
+
|
23
|
+
desc "unfreeze a gem using gem=<gem>"
|
24
|
+
task :unfreeze do
|
25
|
+
raise "No gem specified" unless gem_name = ENV['gem']
|
26
|
+
|
27
|
+
target_dir = File.join(Waves::Configurations::Default.root, 'gems')
|
28
|
+
ENV['GEM_HOME'] = target_dir # no install_dir option for gem uninstall
|
29
|
+
|
30
|
+
sh "gem uninstall #{gem_name}"
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
namespace :generate do
|
2
|
+
|
3
|
+
# We're declaring these tasks first so we can add descriptions.
|
4
|
+
# The real work is done in the rule, below.
|
5
|
+
desc 'Generate new controller, with name=<name>'
|
6
|
+
task :controller
|
7
|
+
|
8
|
+
desc 'Generate new view, with name=<name>'
|
9
|
+
task :view
|
10
|
+
|
11
|
+
desc 'Generate new resource, with name=<name>'
|
12
|
+
task :resource
|
13
|
+
|
14
|
+
# Rake rules are awesome. In the main block, t.name is the task name that matched
|
15
|
+
# the regex. t.source is the string returned by the lambda argument to rule.
|
16
|
+
rule( /controller|view|resource/ => lambda { |task| basetask(task).camel_case << "s" } ) do |t|
|
17
|
+
content = class_template( app_name, t.source, constant_name )
|
18
|
+
name = basetask(t.name) << "s"
|
19
|
+
File.write( filename( name ), content )
|
20
|
+
end
|
21
|
+
|
22
|
+
desc 'Generate new helper, with name=<name>'
|
23
|
+
task :helper do |task|
|
24
|
+
content = module_template( app_name, "Helpers", constant_name) do
|
25
|
+
"include Waves::Helpers::Default"
|
26
|
+
end
|
27
|
+
File.write( filename( "helpers" ), content )
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
desc "Generate resource, controller, view, and helper with name=<name>"
|
33
|
+
task :generate => %w{ generate:resource generate:controller generate:view generate:helper }
|
34
|
+
|
35
|
+
# Helper methods
|
36
|
+
|
37
|
+
def app_name
|
38
|
+
( ENV['app'] || Dir.pwd.split('/').last ).camel_case
|
39
|
+
end
|
40
|
+
|
41
|
+
def constant_name
|
42
|
+
str = ENV['name'].camel_case
|
43
|
+
raise "Cannot generate Default yet" if str == 'Default'
|
44
|
+
str
|
45
|
+
end
|
46
|
+
|
47
|
+
def filename( kind )
|
48
|
+
path = File.expand_path "#{kind}/#{ENV['name'].snake_case}.rb"
|
49
|
+
if File.exist?(path)
|
50
|
+
$stderr.puts " Problem encountered:\n #{path} already exists"
|
51
|
+
exit
|
52
|
+
end
|
53
|
+
path
|
54
|
+
end
|
55
|
+
|
56
|
+
# Rake only pretends to namespace tasks, so to get what we think of as
|
57
|
+
# the task name, you must split and grab.
|
58
|
+
def basetask(str)
|
59
|
+
str.split(":").last
|
60
|
+
end
|
61
|
+
|
62
|
+
def class_template(app_name, place, class_name)
|
63
|
+
str = <<TEXT
|
64
|
+
module #{app_name}
|
65
|
+
module #{place}
|
66
|
+
class #{class_name} < Default
|
67
|
+
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
TEXT
|
72
|
+
end
|
73
|
+
|
74
|
+
# This method expects its block to return something usable as a string.
|
75
|
+
def module_template(app_name, place, module_name, &block)
|
76
|
+
str = <<TEXT
|
77
|
+
module #{app_name}
|
78
|
+
module #{place}
|
79
|
+
module #{module_name}
|
80
|
+
#{block.call if block}
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
TEXT
|
85
|
+
end
|
data/lib/views/errors.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'helpers/doc_type'
|
2
|
+
module Waves
|
3
|
+
module Views
|
4
|
+
class Errors < Waves::Views::Base
|
5
|
+
|
6
|
+
include Waves::Helpers::DocType
|
7
|
+
|
8
|
+
def header( title )
|
9
|
+
<<-HTML
|
10
|
+
<head>
|
11
|
+
<title>#{title}</title>
|
12
|
+
<style>
|
13
|
+
body { background: #933; padding: 20px; font-family: verdana, sans-serif; }
|
14
|
+
h1 { font-size: 60px; font-weight: bold; }
|
15
|
+
p { font-size: 24px; }
|
16
|
+
</style>
|
17
|
+
</head>
|
18
|
+
HTML
|
19
|
+
end
|
20
|
+
|
21
|
+
def not_found_404
|
22
|
+
DOCTYPES[ :html4_transitional ]
|
23
|
+
<<-HTML
|
24
|
+
<html>
|
25
|
+
#{ header( '404: Not Found' ) }
|
26
|
+
<body>
|
27
|
+
<h1>404</h1>
|
28
|
+
<p>That URL does not exist on this server.</p>
|
29
|
+
</body>
|
30
|
+
</html>
|
31
|
+
HTML
|
32
|
+
end
|
33
|
+
|
34
|
+
def server_error_500
|
35
|
+
DOCTYPES[ :html4_transitional ]
|
36
|
+
<<-HTML
|
37
|
+
<html>
|
38
|
+
#{ header( '500: Server Error' ) }
|
39
|
+
<body>
|
40
|
+
<h1>500</h1>
|
41
|
+
<p>Internal server error. Sorry, but your request could not be processed.</p>
|
42
|
+
</body>
|
43
|
+
</html>
|
44
|
+
HTML
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/views/mixin.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
module Waves
|
2
|
+
|
3
|
+
module Views
|
4
|
+
|
5
|
+
class NoTemplateError < Exception # :nodoc:
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.renderers ; @renderers ||= [] ; end
|
9
|
+
def self.extensions; @extensions ||= renderers.map { |r| r::Extension }; end
|
10
|
+
|
11
|
+
module Mixin
|
12
|
+
|
13
|
+
attr_reader :request
|
14
|
+
|
15
|
+
include Waves::ResponseMixin
|
16
|
+
|
17
|
+
def self.included( target )
|
18
|
+
target.send(:include, Ext) unless target.instance_methods.include?("render") #Don't redefine render
|
19
|
+
def target.process( request, *args, &block )
|
20
|
+
self.new( request ).instance_exec( *args, &block )
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def initialize( request )
|
25
|
+
@request = request
|
26
|
+
@layout = :default
|
27
|
+
clear! if respond_to?(:clear!) #For Hoshi compatibility
|
28
|
+
end
|
29
|
+
|
30
|
+
def template_file(name)
|
31
|
+
template = "templates/#{self.class.basename.snake_case}/#{name}"
|
32
|
+
extensions = Views.extensions.join(',')
|
33
|
+
# globbing on a {x,y,z} group returns the found files in x,y,z order
|
34
|
+
raise NoTemplateError.new( path ) unless file = Dir["#{template}.{#{extensions}}"].first
|
35
|
+
file
|
36
|
+
end
|
37
|
+
|
38
|
+
# The Views::Mixin::Ext includes functionality that may be incompatible
|
39
|
+
# with some template engines. It is included when the Mixin is included
|
40
|
+
# unless the target class is incompatible
|
41
|
+
module Ext
|
42
|
+
# Render the template found in the directory named after this view (snake cased, of course)
|
43
|
+
# E.g. App::Views::Gnome.new.render( "stink" ) would look for templates/gnome/stink.<ext>
|
44
|
+
|
45
|
+
def render( name, assigns={})
|
46
|
+
file = template_file(name)
|
47
|
+
ext = File.extname(file).slice(1..-1)
|
48
|
+
Waves.log.debug "Rendering: #{file}"
|
49
|
+
self.send( ext, File.read(file), assigns.merge!( :request => request ))
|
50
|
+
end
|
51
|
+
|
52
|
+
# Render the template with the name of the missing method.
|
53
|
+
# E.g. App::Views::Gnome.new.stink would look for templates/gnome/stink
|
54
|
+
def method_missing(name,*args) ; render( name, *args ) ; end
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
class Base ; include Mixin ; end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
end
|
data/lib/waves.rb
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
# External Dependencies
|
2
|
+
require 'rack'
|
3
|
+
require 'daemons'
|
4
|
+
|
5
|
+
# a bunch of handy stuff
|
6
|
+
require 'extensions/io'
|
7
|
+
require 'extensions/symbol' unless Symbol.instance_methods.include? 'to_proc'
|
8
|
+
require 'fileutils'
|
9
|
+
require 'metaid'
|
10
|
+
require 'forwardable'
|
11
|
+
require 'date'
|
12
|
+
require 'benchmark'
|
13
|
+
require 'base64'
|
14
|
+
require 'functor'
|
15
|
+
require 'filebase'
|
16
|
+
require 'filebase/model'
|
17
|
+
|
18
|
+
require 'english/style'
|
19
|
+
|
20
|
+
# selected project-specific extensions
|
21
|
+
require 'ext/integer'
|
22
|
+
require 'ext/float'
|
23
|
+
require 'ext/string'
|
24
|
+
require 'ext/symbol'
|
25
|
+
require 'ext/hash'
|
26
|
+
require 'ext/tempfile'
|
27
|
+
require 'ext/module'
|
28
|
+
require 'ext/object'
|
29
|
+
require 'ext/kernel'
|
30
|
+
|
31
|
+
# waves Runtime
|
32
|
+
require 'servers/base'
|
33
|
+
require 'servers/webrick'
|
34
|
+
require 'servers/mongrel'
|
35
|
+
require 'dispatchers/base'
|
36
|
+
require 'dispatchers/default'
|
37
|
+
require 'runtime/logger'
|
38
|
+
require 'runtime/mime_types'
|
39
|
+
require 'runtime/runtime'
|
40
|
+
require 'runtime/worker'
|
41
|
+
require 'runtime/request'
|
42
|
+
require 'runtime/response'
|
43
|
+
require 'runtime/response_mixin'
|
44
|
+
require 'runtime/session'
|
45
|
+
require 'runtime/configuration'
|
46
|
+
require 'caches/simple'
|
47
|
+
|
48
|
+
# waves URI mapping
|
49
|
+
require 'matchers/base'
|
50
|
+
require 'matchers/accept'
|
51
|
+
require 'matchers/content_type'
|
52
|
+
require 'matchers/path'
|
53
|
+
require 'matchers/query'
|
54
|
+
require 'matchers/traits'
|
55
|
+
require 'matchers/uri'
|
56
|
+
require 'matchers/request'
|
57
|
+
require 'matchers/resource'
|
58
|
+
require 'resources/paths'
|
59
|
+
require 'resources/mixin'
|
60
|
+
|
61
|
+
require 'views/mixin'
|
62
|
+
require 'views/errors'
|
63
|
+
require 'renderers/mixin'
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# Warning: This file is clobbered when you update your
|
2
|
+
# application with the waves script. Accordingly, you may
|
3
|
+
# wish to keep your tasks in .rb or .rake files in lib/tasks
|
4
|
+
require 'rubygems'
|
5
|
+
waves = [
|
6
|
+
( WAVES if defined? WAVES ), ENV[ 'WAVES'], './waves'
|
7
|
+
].compact.map { |dir| File.join(dir, 'lib') }.find( &File.method( :directory? ) )
|
8
|
+
if waves
|
9
|
+
$: << waves
|
10
|
+
waves = File.join( waves, 'waves' )
|
11
|
+
else
|
12
|
+
waves = 'waves'
|
13
|
+
end
|
14
|
+
require waves
|
15
|
+
require 'runtime/console'
|
16
|
+
require 'startup'
|
17
|
+
Waves::Console.load( :mode => ENV['mode'] )
|
18
|
+
|
19
|
+
# load tasks from waves framework
|
20
|
+
require 'layers/orm/providers/sequel/tasks/schema'
|
21
|
+
require 'layers/orm/providers/sequel/tasks/generate'
|
22
|
+
|
23
|
+
# load tasks from this app's lib/tasks
|
24
|
+
Dir[ "lib/tasks/*.{rb,rake}" ].each { |task| require task }
|
25
|
+
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Blog
|
2
|
+
|
3
|
+
module Configurations
|
4
|
+
|
5
|
+
class Development < Default
|
6
|
+
|
7
|
+
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
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Blog
|
2
|
+
|
3
|
+
module Configurations
|
4
|
+
|
5
|
+
class Production < Default
|
6
|
+
|
7
|
+
debug false
|
8
|
+
reloadable []
|
9
|
+
log :level => :warn, :output => ( :log / "waves.production" )
|
10
|
+
host '0.0.0.0'
|
11
|
+
port 4000
|
12
|
+
|
13
|
+
application do
|
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
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|