merb 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +3 -3
- data/examples/sample_app/app/controllers/posts.rb +3 -3
- data/examples/sample_app/app/controllers/test.rb +2 -2
- data/examples/sample_app/app/controllers/upload.rb +4 -4
- data/examples/sample_app/app/views/posts/list.rhtml +1 -1
- data/examples/sample_app/app/views/posts/show.rhtml +1 -1
- data/examples/sample_app/app/views/test/hello.rhtml +1 -1
- data/examples/sample_app/app/views/upload/upload.rhtml +2 -2
- data/examples/sample_app/conf/router.rb +13 -4
- data/lib/merb/merb_controller.rb +20 -1
- data/lib/merb/merb_daemon.rb +1 -1
- data/lib/merb/merb_handler.rb +94 -45
- data/lib/merb/merb_router.rb +25 -30
- data/lib/merb.rb +1 -1
- metadata +2 -21
- data/doc/rdoc/classes/Merb/Config.html +0 -159
- data/doc/rdoc/classes/Merb.html +0 -128
- data/doc/rdoc/created.rid +0 -1
- data/doc/rdoc/files/LICENSE.html +0 -129
- data/doc/rdoc/files/README.html +0 -297
- data/doc/rdoc/files/lib/merb_config_rb.html +0 -101
- data/doc/rdoc/files/lib/merb_rb.html +0 -113
- data/doc/rdoc/files/server_rb.html +0 -122
- data/doc/rdoc/fr_class_index.html +0 -28
- data/doc/rdoc/fr_file_index.html +0 -31
- data/doc/rdoc/fr_method_index.html +0 -27
- data/doc/rdoc/index.html +0 -24
- data/doc/rdoc/rdoc-style.css +0 -208
- data/server.rb +0 -13
data/Rakefile
CHANGED
@@ -7,7 +7,7 @@ require 'fileutils'
|
|
7
7
|
include FileUtils
|
8
8
|
|
9
9
|
NAME = "merb"
|
10
|
-
VERS = "0.0.
|
10
|
+
VERS = "0.0.3"
|
11
11
|
CLEAN.include ['**/.*.sw?', '*.gem', '.config']
|
12
12
|
RDOC_OPTS = ['--quiet', '--title', "Merb Documentation",
|
13
13
|
"--opname", "index.html",
|
@@ -26,7 +26,7 @@ Rake::RDocTask.new do |rdoc|
|
|
26
26
|
rdoc.options += RDOC_OPTS
|
27
27
|
rdoc.main = "README"
|
28
28
|
rdoc.title = "Merb Documentation"
|
29
|
-
rdoc.rdoc_files.add ['README', 'LICENSE', 'lib/*.rb'
|
29
|
+
rdoc.rdoc_files.add ['README', 'LICENSE', 'lib/*.rb']
|
30
30
|
end
|
31
31
|
|
32
32
|
spec = Gem::Specification.new do |s|
|
@@ -47,7 +47,7 @@ spec = Gem::Specification.new do |s|
|
|
47
47
|
s.add_dependency('mongrel')
|
48
48
|
s.required_ruby_version = '>= 1.8.4'
|
49
49
|
|
50
|
-
s.files = %w(LICENSE README Rakefile
|
50
|
+
s.files = %w(LICENSE README Rakefile) + Dir.glob("{app,bin,doc,test,lib,examples}/**/*")
|
51
51
|
|
52
52
|
s.require_path = "lib"
|
53
53
|
s.bindir = "bin"
|
@@ -3,8 +3,8 @@ class Posts < Merb::Controller
|
|
3
3
|
template_dir :posts
|
4
4
|
|
5
5
|
def new(args={})
|
6
|
-
unless
|
7
|
-
@post = Post.create( :title =>
|
6
|
+
unless params.to_s.empty?
|
7
|
+
@post = Post.create( :title => params[:title], :body => params[:body])
|
8
8
|
render 'show'
|
9
9
|
else
|
10
10
|
render
|
@@ -12,7 +12,7 @@ class Posts < Merb::Controller
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def show(args={})
|
15
|
-
@post = Post.find
|
15
|
+
@post = Post.find args[:id]
|
16
16
|
render
|
17
17
|
end
|
18
18
|
|
@@ -1,16 +1,16 @@
|
|
1
1
|
class Upload < Merb::Controller
|
2
2
|
template_dir :upload
|
3
3
|
|
4
|
-
def start(
|
4
|
+
def start(args={})
|
5
5
|
# Assign the parameter to an instance variable
|
6
6
|
@args = args
|
7
7
|
render
|
8
8
|
end
|
9
9
|
|
10
|
-
def upload(
|
11
|
-
puts
|
10
|
+
def upload(args={})
|
11
|
+
puts params[:file].inspect
|
12
12
|
|
13
|
-
FileUtils.mv
|
13
|
+
FileUtils.mv params[:file][:tempfile].path, ::Merb::Server.config[:merb_root]+"/public/files/#{params[:file][:filename]}"
|
14
14
|
|
15
15
|
render
|
16
16
|
end
|
@@ -1,10 +1,19 @@
|
|
1
|
-
|
1
|
+
# Merb::RouteMatcher is the request routing mapper for the merb framework.
|
2
|
+
# You can define placeholder parts of the url with the :smbol notation.
|
3
|
+
# so r.add '/foo/:bar/baz/:id', :class => 'Bar', :method => 'foo'
|
4
|
+
# will match against a request to /foo/123/baz/456. It will then
|
5
|
+
# use the class Bar as your merb controller and call the foo method on it.
|
6
|
+
# the foo method will recieve a hash with {:bar => '123', :id => '456'}
|
7
|
+
# as the content. So the :placeholders sections of your routes become
|
8
|
+
# a hash of arguments to your controller methods. These two methods map
|
9
|
+
# the default /controller/action and /controller/action/id urls you will
|
10
|
+
# use so you will want these two by default, in this order:
|
11
|
+
# r.add '/:class/:method/:id', {}
|
12
|
+
# r.add '/:class/:method', {}
|
2
13
|
|
14
|
+
puts "Compiling routes: \n"
|
3
15
|
Merb::RouteMatcher.prepare do |r|
|
4
16
|
r.add '/foo/:bar/baz/:id', :class => 'Test', :method => 'foo'
|
5
|
-
r.add '/hey/:there/you/:guys', :class => 'Test', :method => 'hello'
|
6
|
-
r.add '/upload/start', :class => 'Upload', :method => 'start'
|
7
|
-
r.add '/posts/:method', :class => 'Posts'
|
8
17
|
r.add '/:class/:method/:id', {}
|
9
18
|
r.add '/:class/:method', {}
|
10
19
|
end
|
data/lib/merb/merb_controller.rb
CHANGED
@@ -1,7 +1,14 @@
|
|
1
1
|
module Merb
|
2
2
|
|
3
|
+
# controller class for the merb pocket-framework. All of your
|
4
|
+
# controllers will inherit from Merb::Controller. This superclass
|
5
|
+
# takes care of parsing the incoming headers and body into params
|
6
|
+
# and cookies and headers. If the request is a file upload it will
|
7
|
+
# stream it into a tempfile and pass in the filename and tempfile object
|
8
|
+
# to your controller via params. It also parses the ?query=string and
|
9
|
+
# puts that into params as well.
|
3
10
|
class Controller
|
4
|
-
attr_accessor :status
|
11
|
+
attr_accessor :status
|
5
12
|
# Stolen from Camping without a twinge of remorse ;)
|
6
13
|
def initialize(req, env, method=(env['REQUEST_METHOD']||"GET")) #:nodoc:
|
7
14
|
env = MerbHash[env.to_hash]
|
@@ -50,6 +57,18 @@ module Merb
|
|
50
57
|
@cookies, @params = @k.dup, qs.dup
|
51
58
|
end
|
52
59
|
|
60
|
+
def params
|
61
|
+
@params
|
62
|
+
end
|
63
|
+
|
64
|
+
def cookies
|
65
|
+
@cookies
|
66
|
+
end
|
67
|
+
|
68
|
+
def headers
|
69
|
+
@headers
|
70
|
+
end
|
71
|
+
|
53
72
|
def query_parse(qs, d = '&;')
|
54
73
|
m = proc {|_,o,n|o.update(n,&m)rescue([*o]<<n)}
|
55
74
|
(qs||'').split(/[#{d}] */n).inject(MerbHash[]) { |h,p|
|
data/lib/merb/merb_daemon.rb
CHANGED
@@ -63,7 +63,7 @@ class Merb::Server
|
|
63
63
|
|
64
64
|
|
65
65
|
h = Mongrel::HttpServer.new((@@merb_opts[:host]||"0.0.0.0"), (@@merb_opts[:port]||4000), (@@merb_opts[:numprocs]||40))
|
66
|
-
h.register("/", MerbHandler.new)
|
66
|
+
h.register("/", MerbHandler.new(@@merb_opts[:merb_root]+'/public'))
|
67
67
|
h.register("/favicon.ico", Mongrel::Error404Handler.new(""))
|
68
68
|
h.run.join
|
69
69
|
|
data/lib/merb/merb_handler.rb
CHANGED
@@ -1,64 +1,109 @@
|
|
1
1
|
class MerbHandler < Mongrel::HttpHandler
|
2
|
+
@@file_only_methods = ["GET","HEAD"]
|
2
3
|
|
4
|
+
# take the name of a directory and use that as the doc root or public
|
5
|
+
# directory of your site. This is set to the root of your merb app + '/public'
|
6
|
+
# by default. See merb_daemon.rb if you want to change this.
|
7
|
+
def initialize(dir, opts = {})
|
8
|
+
@files = Mongrel::DirHandler.new(dir,false)
|
9
|
+
end
|
10
|
+
|
11
|
+
# process incoming http requests and do a number of things
|
12
|
+
# 1. check for rails style cached pages. add .html to the
|
13
|
+
# url and see if there is a static file in public that matches.
|
14
|
+
# serve that file directly without invoking Merb and be done with it.
|
15
|
+
# 2. Serve static asset and html files directly from public/ if
|
16
|
+
# they exist and fall back to Merb otherwise
|
17
|
+
# 3. If none of the above apply, we take apart the request url
|
18
|
+
# and feed it into Merb::RouteMatcher to let it decide which
|
19
|
+
# controller and method will serve the request.
|
20
|
+
# 4. after the controller has done its thing, we check for the
|
21
|
+
# X-SENDFILE header. if you set this header to the path to a file
|
22
|
+
# in your controller then mongrel will serve the file directly
|
23
|
+
# and your controller can go on processing other requests.
|
3
24
|
def process(request, response)
|
25
|
+
|
4
26
|
if response.socket.closed?
|
5
27
|
return
|
6
28
|
end
|
7
29
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
30
|
+
# Rails style page caching. Check the public dir first for
|
31
|
+
# .html pages and serve directly. Otherwise fall back to Merb
|
32
|
+
# routing and request dispatching.
|
33
|
+
path_info = request.params[Mongrel::Const::PATH_INFO]
|
34
|
+
page_cached = path_info + ".html"
|
35
|
+
get_or_head = @@file_only_methods.include? request.params[Mongrel::Const::REQUEST_METHOD]
|
36
|
+
|
37
|
+
if get_or_head and @files.can_serve(path_info)
|
38
|
+
# File exists as-is so serve it up
|
39
|
+
@files.process(request,response)
|
40
|
+
elsif get_or_head and @files.can_serve(page_cached)
|
41
|
+
# Possible cached page, serve it up
|
42
|
+
request.params[Mongrel::Const::PATH_INFO] = page_cached
|
43
|
+
@files.process(request,response)
|
44
|
+
else
|
45
|
+
begin
|
46
|
+
controller, method, args = handle(request)
|
47
|
+
output = if (controller && controller.kind_of?(Merb::Controller))
|
48
|
+
if method
|
49
|
+
( args ? controller.send( method, args ) : controller.send(method) )
|
50
|
+
else
|
51
|
+
controller.to_s
|
52
|
+
end
|
13
53
|
else
|
14
|
-
|
54
|
+
nil
|
55
|
+
end
|
56
|
+
rescue Exception => e
|
57
|
+
response.start(500) do |head,out|
|
58
|
+
head["Content-Type"] = "text/html"
|
59
|
+
out <<"<html><h2>Merb Error!</h2><pre>#{ e.message } - (#{ e.class })" <<
|
60
|
+
"\n" << "#{(e.backtrace or []).join('\n')}</pre></html>"
|
15
61
|
end
|
16
|
-
|
17
|
-
nil
|
18
|
-
end
|
19
|
-
rescue Exception => e
|
20
|
-
response.start(500) do |head,out|
|
21
|
-
head["Content-Type"] = "text/html"
|
22
|
-
out <<"<html><h2>Merb Error!</h2><pre>#{ e.message } - (#{ e.class })" <<
|
23
|
-
"\n" << "#{(e.backtrace or []).join('\n')}</pre></html>"
|
62
|
+
return
|
24
63
|
end
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
64
|
+
|
65
|
+
unless output
|
66
|
+
response.start(404) do |head,out|
|
67
|
+
head["Content-Type"] = "text/html"
|
68
|
+
out << "<html><body>Error: no merb controller found for this url.</body></html>"
|
69
|
+
end
|
70
|
+
return
|
71
|
+
end
|
72
|
+
|
73
|
+
sendfile, clength = nil
|
74
|
+
response.status = controller.status
|
75
|
+
|
76
|
+
# check for the X-SENDFILE heaqder from your Merb::Controller
|
77
|
+
# and serve the file directly instead of buffering.
|
78
|
+
controller.headers.each do |k, v|
|
79
|
+
if k =~ /^X-SENDFILE$/i
|
80
|
+
sendfile = v
|
81
|
+
elsif k =~ /^CONTENT-LENGTH$/i
|
82
|
+
clength = v.to_i
|
83
|
+
else
|
84
|
+
[*v].each do |vi|
|
85
|
+
response.header[k] = vi
|
86
|
+
end
|
87
|
+
end
|
32
88
|
end
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
if k =~ /^X-SENDFILE$/i
|
40
|
-
sendfile = v
|
41
|
-
elsif k =~ /^CONTENT-LENGTH$/i
|
42
|
-
clength = v.to_i
|
89
|
+
|
90
|
+
if sendfile
|
91
|
+
# send X-SENDFILE header to mongrel
|
92
|
+
response.send_status(File.size(sendfile))
|
93
|
+
response.send_header
|
94
|
+
response.send_file(sendfile)
|
43
95
|
else
|
44
|
-
|
45
|
-
|
46
|
-
|
96
|
+
# render response from successful controller
|
97
|
+
response.send_status(output.length)
|
98
|
+
response.send_header
|
99
|
+
response.write(output)
|
47
100
|
end
|
48
101
|
end
|
49
|
-
|
50
|
-
if sendfile
|
51
|
-
response.send_status(File.size(sendfile))
|
52
|
-
response.send_header
|
53
|
-
response.send_file(sendfile)
|
54
|
-
else
|
55
|
-
response.send_status(output.length)
|
56
|
-
response.send_header
|
57
|
-
response.write(output)
|
58
|
-
end
|
59
|
-
|
60
102
|
end
|
61
103
|
|
104
|
+
# This is where we grab the incoming request PATH_INFO
|
105
|
+
# and use that in the merb routematcher to determine
|
106
|
+
# which controller and method to run.
|
62
107
|
def handle(request)
|
63
108
|
path = request.params["PATH_INFO"].sub(/\/+/, '/')
|
64
109
|
path = path[0..-2] if (path[-1] == ?/)
|
@@ -72,6 +117,10 @@ class MerbHandler < Mongrel::HttpHandler
|
|
72
117
|
end
|
73
118
|
end
|
74
119
|
|
120
|
+
# take a controller class name string and reload or require
|
121
|
+
# the right controller file then upcase the first letter and
|
122
|
+
# trun it into a new object p[assing in the request and response.
|
123
|
+
# this is where your Merb::Controller is instantiated.
|
75
124
|
def instantiate_controller(controller_name, req, env)
|
76
125
|
if !File.exist?(Merb::Server.config[:merb_root]+"/app/controllers/#{controller_name}.rb")
|
77
126
|
return Object.const_get(:Noroutefound).new(req, env)
|
data/lib/merb/merb_router.rb
CHANGED
@@ -1,5 +1,30 @@
|
|
1
1
|
module Merb
|
2
2
|
|
3
|
+
# Merb::RouteMatcher is the request routing mapper for the merb framework.
|
4
|
+
# You can define placeholder parts of the url with the :smbol notation.
|
5
|
+
# so r.add '/foo/:bar/baz/:id', :class => 'Bar', :method => 'foo'
|
6
|
+
# will match against a request to /foo/123/baz/456. It will then
|
7
|
+
# use the class Bar as your merb controller and call the foo method on it.
|
8
|
+
# the foo method will recieve a hash with {:bar => '123', :id => '456'}
|
9
|
+
# as the content. So the :placeholders sections of your routes become
|
10
|
+
# a hash of arguments to your controller methods. These two methods map
|
11
|
+
# the default /controller/action and /controller/action/id urls you will
|
12
|
+
# use so you will want these two by default, in this order:
|
13
|
+
# r.add '/:class/:method/:id', {}
|
14
|
+
# r.add '/:class/:method', {}
|
15
|
+
#
|
16
|
+
# This is what a route prepare definition looks like. I have added
|
17
|
+
# code that will spit out the compiled routing lambda so you can see
|
18
|
+
# what is generated:
|
19
|
+
#
|
20
|
+
# puts "Compiling routes: \n"
|
21
|
+
# Merb::RouteMatcher.prepare do |r|
|
22
|
+
# r.add '/foo/:bar/baz/:id', :class => 'Test', :method => 'foo'
|
23
|
+
# r.add '/:class/:method/:id', {}
|
24
|
+
# r.add '/:class/:method', {}
|
25
|
+
# end
|
26
|
+
# m = Merb::RouteMatcher.new
|
27
|
+
# puts m.compiled_statement
|
3
28
|
class RouteMatcher
|
4
29
|
|
5
30
|
attr_accessor :sections
|
@@ -55,33 +80,3 @@ module Merb
|
|
55
80
|
end
|
56
81
|
|
57
82
|
end
|
58
|
-
|
59
|
-
=begin
|
60
|
-
if __FILE__ == $0
|
61
|
-
Merb::RouteMatcher.prepare do |r|
|
62
|
-
r.add '/foo/:bar/baz/:id', :class => 'Test', :method => 'foo'
|
63
|
-
r.add '/hey/:there/you/:guys', :class => 'Test', :method => 'hello'
|
64
|
-
r.add '/these/:routes/are/:sweet', :class => 'Upload', :method => 'start'
|
65
|
-
r.add '/h/:a/b/:c/d/:f/g/:id', :class => 'Test'
|
66
|
-
r.add '/:class/:method/:id', {}
|
67
|
-
r.add '/:class/:method', {}
|
68
|
-
end
|
69
|
-
|
70
|
-
routes = Merb::RouteMatcher.new
|
71
|
-
puts routes.compiled_statement
|
72
|
-
p routes.route_request( "/foo/234/baz/dsdsd")
|
73
|
-
routes = Merb::RouteMatcher.new
|
74
|
-
p routes.route_request( "/hey/jon/you/girls")
|
75
|
-
routes = Merb::RouteMatcher.new
|
76
|
-
p routes.route_request( "/upload/test/12")
|
77
|
-
routes = Merb::RouteMatcher.new
|
78
|
-
p routes.route_request( "/these/234/are/yup")
|
79
|
-
routes = Merb::RouteMatcher.new
|
80
|
-
p routes.route_request( '/h/12/b/red/d/blue/g/12')
|
81
|
-
routes = Merb::RouteMatcher.new
|
82
|
-
p routes.route_request( '/hdsfvsdfsdfdsf')
|
83
|
-
|
84
|
-
p routes.routes
|
85
|
-
|
86
|
-
end
|
87
|
-
=end
|
data/lib/merb.rb
CHANGED
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
|
|
3
3
|
specification_version: 1
|
4
4
|
name: merb
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.0.
|
7
|
-
date: 2006-10-
|
6
|
+
version: 0.0.3
|
7
|
+
date: 2006-10-17 00:00:00 -07:00
|
8
8
|
summary: Merb == Mongrel + Erb. Pocket rocket web framework.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -32,26 +32,7 @@ files:
|
|
32
32
|
- LICENSE
|
33
33
|
- README
|
34
34
|
- Rakefile
|
35
|
-
- server.rb
|
36
35
|
- bin/merb
|
37
|
-
- doc/rdoc
|
38
|
-
- doc/rdoc/classes
|
39
|
-
- doc/rdoc/created.rid
|
40
|
-
- doc/rdoc/files
|
41
|
-
- doc/rdoc/fr_class_index.html
|
42
|
-
- doc/rdoc/fr_file_index.html
|
43
|
-
- doc/rdoc/fr_method_index.html
|
44
|
-
- doc/rdoc/index.html
|
45
|
-
- doc/rdoc/rdoc-style.css
|
46
|
-
- doc/rdoc/classes/Merb
|
47
|
-
- doc/rdoc/classes/Merb.html
|
48
|
-
- doc/rdoc/classes/Merb/Config.html
|
49
|
-
- doc/rdoc/files/lib
|
50
|
-
- doc/rdoc/files/LICENSE.html
|
51
|
-
- doc/rdoc/files/README.html
|
52
|
-
- doc/rdoc/files/server_rb.html
|
53
|
-
- doc/rdoc/files/lib/merb_config_rb.html
|
54
|
-
- doc/rdoc/files/lib/merb_rb.html
|
55
36
|
- test/test_helper.rb
|
56
37
|
- test/unit
|
57
38
|
- test/unit/route_matcher_test.rb
|
@@ -1,159 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
-
<!DOCTYPE html
|
3
|
-
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
-
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
-
|
6
|
-
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
7
|
-
<head>
|
8
|
-
<title>Class: Merb::Config</title>
|
9
|
-
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
-
<meta http-equiv="Content-Script-Type" content="text/javascript" />
|
11
|
-
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
12
|
-
<script type="text/javascript">
|
13
|
-
// <![CDATA[
|
14
|
-
|
15
|
-
function popupCode( url ) {
|
16
|
-
window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
|
17
|
-
}
|
18
|
-
|
19
|
-
function toggleCode( id ) {
|
20
|
-
if ( document.getElementById )
|
21
|
-
elem = document.getElementById( id );
|
22
|
-
else if ( document.all )
|
23
|
-
elem = eval( "document.all." + id );
|
24
|
-
else
|
25
|
-
return false;
|
26
|
-
|
27
|
-
elemStyle = elem.style;
|
28
|
-
|
29
|
-
if ( elemStyle.display != "block" ) {
|
30
|
-
elemStyle.display = "block"
|
31
|
-
} else {
|
32
|
-
elemStyle.display = "none"
|
33
|
-
}
|
34
|
-
|
35
|
-
return true;
|
36
|
-
}
|
37
|
-
|
38
|
-
// Make codeblocks hidden by default
|
39
|
-
document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
|
40
|
-
|
41
|
-
// ]]>
|
42
|
-
</script>
|
43
|
-
|
44
|
-
</head>
|
45
|
-
<body>
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
<div id="classHeader">
|
50
|
-
<table class="header-table">
|
51
|
-
<tr class="top-aligned-row">
|
52
|
-
<td><strong>Class</strong></td>
|
53
|
-
<td class="class-name-in-header">Merb::Config</td>
|
54
|
-
</tr>
|
55
|
-
<tr class="top-aligned-row">
|
56
|
-
<td><strong>In:</strong></td>
|
57
|
-
<td>
|
58
|
-
<a href="../../files/lib/merb_config_rb.html">
|
59
|
-
lib/merb_config.rb
|
60
|
-
</a>
|
61
|
-
<br />
|
62
|
-
</td>
|
63
|
-
</tr>
|
64
|
-
|
65
|
-
<tr class="top-aligned-row">
|
66
|
-
<td><strong>Parent:</strong></td>
|
67
|
-
<td>
|
68
|
-
Object
|
69
|
-
</td>
|
70
|
-
</tr>
|
71
|
-
</table>
|
72
|
-
</div>
|
73
|
-
<!-- banner header -->
|
74
|
-
|
75
|
-
<div id="bodyContent">
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
<div id="contextContent">
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
</div>
|
84
|
-
|
85
|
-
<div id="method-list">
|
86
|
-
<h3 class="section-bar">Methods</h3>
|
87
|
-
|
88
|
-
<div class="name-list">
|
89
|
-
<a href="#M000001">setup</a>
|
90
|
-
</div>
|
91
|
-
</div>
|
92
|
-
|
93
|
-
</div>
|
94
|
-
|
95
|
-
|
96
|
-
<!-- if includes -->
|
97
|
-
|
98
|
-
<div id="section">
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
<!-- if method_list -->
|
108
|
-
<div id="methods">
|
109
|
-
<h3 class="section-bar">Public Class methods</h3>
|
110
|
-
|
111
|
-
<div id="method-M000001" class="method-detail">
|
112
|
-
<a name="M000001"></a>
|
113
|
-
|
114
|
-
<div class="method-heading">
|
115
|
-
<a href="#M000001" class="method-signature">
|
116
|
-
<span class="method-name">setup</span><span class="method-args">()</span>
|
117
|
-
</a>
|
118
|
-
</div>
|
119
|
-
|
120
|
-
<div class="method-description">
|
121
|
-
<p><a class="source-toggle" href="#"
|
122
|
-
onclick="toggleCode('M000001-source');return false;">[Source]</a></p>
|
123
|
-
<div class="method-source-code" id="M000001-source">
|
124
|
-
<pre>
|
125
|
-
<span class="ruby-comment cmt"># File lib/merb_config.rb, line 5</span>
|
126
|
-
5: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">setup</span>
|
127
|
-
6: <span class="ruby-identifier">defaults</span> = {
|
128
|
-
7: <span class="ruby-identifier">:host</span> =<span class="ruby-operator">></span> <span class="ruby-value str">"0.0.0.0"</span>,
|
129
|
-
8: <span class="ruby-identifier">:port</span> =<span class="ruby-operator">></span> <span class="ruby-value str">"4000"</span>,
|
130
|
-
9: <span class="ruby-identifier">:allow_reloading</span> =<span class="ruby-operator">></span> <span class="ruby-keyword kw">true</span>,
|
131
|
-
10: <span class="ruby-identifier">:merb_root</span> =<span class="ruby-operator">></span> <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">pwd</span>
|
132
|
-
11: }
|
133
|
-
12:
|
134
|
-
13: <span class="ruby-keyword kw">begin</span>
|
135
|
-
14: <span class="ruby-identifier">options</span> = <span class="ruby-identifier">defaults</span>.<span class="ruby-identifier">merge</span>(<span class="ruby-constant">YAML</span>.<span class="ruby-identifier">load</span>(<span class="ruby-constant">ERB</span>.<span class="ruby-identifier">new</span>(<span class="ruby-constant">IO</span>.<span class="ruby-identifier">read</span>(<span class="ruby-node">"#{defaults[:merb_root]}/conf/merb.yml"</span>)).<span class="ruby-identifier">result</span>))
|
136
|
-
15: <span class="ruby-keyword kw">rescue</span>
|
137
|
-
16: <span class="ruby-identifier">options</span> = <span class="ruby-identifier">defaults</span>
|
138
|
-
17: <span class="ruby-keyword kw">end</span>
|
139
|
-
18:
|
140
|
-
19: <span class="ruby-identifier">options</span>
|
141
|
-
20: <span class="ruby-keyword kw">end</span>
|
142
|
-
</pre>
|
143
|
-
</div>
|
144
|
-
</div>
|
145
|
-
</div>
|
146
|
-
|
147
|
-
|
148
|
-
</div>
|
149
|
-
|
150
|
-
|
151
|
-
</div>
|
152
|
-
|
153
|
-
|
154
|
-
<div id="validator-badges">
|
155
|
-
<p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
|
156
|
-
</div>
|
157
|
-
|
158
|
-
</body>
|
159
|
-
</html>
|