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.
- data/bin/waves +19 -56
- 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/{waves-server.rb → server.rb} +16 -3
- data/lib/dispatchers/base.rb +21 -20
- data/lib/dispatchers/default.rb +11 -63
- data/lib/ext/float.rb +13 -0
- data/lib/{utilities → ext}/hash.rb +2 -2
- data/lib/{utilities → ext}/integer.rb +5 -2
- data/lib/ext/kernel.rb +20 -0
- data/lib/ext/module.rb +20 -0
- data/lib/{utilities → ext}/object.rb +3 -5
- 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 +64 -0
- data/lib/foundations/compact.rb +50 -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 +3 -1
- data/lib/helpers/formatting.rb +3 -3
- data/lib/helpers/layouts.rb +37 -0
- data/lib/helpers/model.rb +8 -4
- data/lib/helpers/view.rb +2 -4
- data/lib/layers/inflect/english.rb +67 -0
- data/lib/layers/mvc.rb +18 -18
- data/lib/layers/mvc/controllers.rb +41 -0
- data/lib/layers/mvc/extensions.rb +52 -0
- data/lib/layers/orm/{active_record.rb → providers/active_record.rb} +12 -18
- data/lib/layers/orm/{active_record → providers/active_record}/migrations/empty.rb.erb +0 -0
- data/lib/layers/orm/{active_record → providers/active_record}/tasks/generate.rb +1 -1
- data/lib/layers/orm/{active_record → providers/active_record}/tasks/schema.rb +1 -1
- data/lib/layers/orm/{data_mapper.rb → providers/data_mapper.rb} +3 -4
- data/lib/layers/orm/providers/filebase.rb +25 -0
- data/lib/layers/orm/{sequel.rb → providers/sequel.rb} +16 -12
- data/lib/layers/orm/{sequel → providers/sequel}/migrations/empty.rb.erb +0 -0
- data/lib/layers/orm/{sequel → providers/sequel}/tasks/generate.rb +5 -3
- data/lib/layers/orm/{sequel → providers/sequel}/tasks/schema.rb +2 -2
- data/lib/{renderers → layers/renderers}/erubis.rb +10 -13
- data/lib/layers/renderers/haml.rb +47 -0
- data/lib/layers/renderers/markaby.rb +29 -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 +15 -29
- data/lib/resources/mixin.rb +132 -0
- data/lib/resources/paths.rb +34 -0
- data/lib/runtime/configuration.rb +55 -135
- data/lib/runtime/console.rb +4 -1
- data/lib/runtime/logger.rb +24 -48
- data/lib/runtime/mime_types.rb +516 -2
- data/lib/runtime/mocks.rb +14 -0
- data/lib/runtime/monitor.rb +32 -0
- data/lib/runtime/request.rb +107 -39
- data/lib/runtime/response.rb +5 -2
- data/lib/runtime/response_mixin.rb +43 -22
- data/lib/runtime/runtime.rb +67 -0
- data/lib/runtime/server.rb +14 -101
- data/lib/runtime/session.rb +4 -43
- 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 +1 -0
- data/lib/tasks/generate.rb +67 -62
- data/lib/views/errors.rb +49 -0
- data/lib/views/mixin.rb +34 -82
- data/lib/waves.rb +36 -55
- 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/{app → samples/blog}/templates/errors/server_error_500.mab +0 -0
- data/samples/blog/templates/layouts/default.mab +19 -0
- data/samples/blog/templates/waves/status.mab +85 -0
- data/templates/classic/Rakefile +130 -0
- data/templates/classic/configurations/default.rb.erb +9 -0
- data/{app → templates/classic}/configurations/development.rb.erb +3 -7
- data/{app → templates/classic}/configurations/production.rb.erb +3 -4
- data/templates/classic/resources/map.rb.erb +8 -0
- data/templates/classic/startup.rb.erb +11 -0
- data/{app → templates/classic}/templates/errors/not_found_404.mab +0 -0
- data/templates/classic/templates/errors/server_error_500.mab +2 -0
- data/{app → templates/classic}/templates/layouts/default.mab +0 -0
- data/templates/compact/startup.rb.erb +11 -0
- metadata +967 -144
- data/app/Rakefile +0 -14
- data/app/bin/waves-console +0 -4
- data/app/bin/waves-server +0 -4
- data/app/configurations/mapping.rb.erb +0 -13
- data/app/controllers/.gitignore +0 -0
- data/app/doc/.gitignore +0 -0
- data/app/helpers/.gitignore +0 -0
- data/app/lib/application.rb.erb +0 -5
- data/app/lib/tasks/.gitignore +0 -0
- data/app/log/.gitignore +0 -0
- data/app/models/.gitignore +0 -0
- data/app/public/css/.gitignore +0 -0
- data/app/public/flash/.gitignore +0 -0
- data/app/public/images/.gitignore +0 -0
- data/app/public/javascript/.gitignore +0 -0
- data/app/schema/migrations/.gitignore +0 -0
- data/app/startup.rb +0 -5
- data/app/tmp/sessions/.gitignore +0 -0
- data/app/views/.gitignore +0 -0
- data/bin/waves-console +0 -4
- data/bin/waves-server +0 -4
- data/lib/commands/waves-console.rb +0 -21
- data/lib/controllers/base.rb +0 -11
- data/lib/controllers/mixin.rb +0 -165
- data/lib/foundations/default.rb +0 -26
- data/lib/foundations/simple.rb +0 -30
- data/lib/helpers/asset_helper.rb +0 -67
- data/lib/helpers/common.rb +0 -66
- data/lib/helpers/default.rb +0 -13
- data/lib/helpers/number_helper.rb +0 -25
- data/lib/helpers/tag_helper.rb +0 -58
- data/lib/helpers/url_helper.rb +0 -77
- data/lib/layers/default_errors.rb +0 -26
- data/lib/layers/orm/filebase.rb +0 -22
- data/lib/layers/simple.rb +0 -35
- data/lib/layers/simple_errors.rb +0 -23
- data/lib/mapping/mapping.rb +0 -289
- data/lib/mapping/pretty_urls.rb +0 -96
- data/lib/renderers/markaby.rb +0 -33
- data/lib/runtime/application.rb +0 -69
- data/lib/runtime/blackboard.rb +0 -57
- data/lib/runtime/debugger.rb +0 -9
- data/lib/runtime/response_proxy.rb +0 -30
- data/lib/tasks/cluster.rb +0 -26
- data/lib/utilities/inflect.rb +0 -110
- data/lib/utilities/inflect/english.rb +0 -84
- data/lib/utilities/module.rb +0 -21
- data/lib/utilities/proc.rb +0 -16
- data/lib/utilities/string.rb +0 -61
- data/lib/utilities/symbol.rb +0 -10
- 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
|
data/lib/matchers/uri.rb
ADDED
|
@@ -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
|
data/lib/renderers/mixin.rb
CHANGED
|
@@ -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
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
#
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
#
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
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
|
-
|
|
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
|
-
|