merb 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. data/README +41 -2
  2. data/Rakefile +4 -2
  3. data/TODO +3 -3
  4. data/bin/merb +157 -3
  5. data/doc/rdoc/classes/Hash.html +4 -4
  6. data/doc/rdoc/classes/Merb.html +2 -12
  7. data/doc/rdoc/classes/Merb/Controller.html +347 -156
  8. data/doc/rdoc/classes/Merb/RouteMatcher.html +93 -59
  9. data/doc/rdoc/classes/MerbHandler.html +117 -107
  10. data/doc/rdoc/classes/MerbHash.html +64 -58
  11. data/doc/rdoc/classes/Noroutefound.html +16 -10
  12. data/doc/rdoc/classes/Object.html +5 -5
  13. data/doc/rdoc/classes/String.html +28 -16
  14. data/doc/rdoc/classes/Symbol.html +15 -8
  15. data/doc/rdoc/created.rid +1 -1
  16. data/doc/rdoc/files/README.html +56 -4
  17. data/doc/rdoc/files/TODO.html +4 -4
  18. data/doc/rdoc/files/lib/merb/merb_controller_rb.html +1 -1
  19. data/doc/rdoc/files/lib/merb/merb_handler_rb.html +1 -1
  20. data/doc/rdoc/files/lib/merb/merb_router_rb.html +1 -1
  21. data/doc/rdoc/files/lib/merb/merb_utils_rb.html +1 -1
  22. data/doc/rdoc/files/lib/merb_rb.html +30 -2
  23. data/doc/rdoc/files/lib/{merb_config_rb.html → merb_tasks_rb.html} +4 -4
  24. data/doc/rdoc/fr_class_index.html +0 -2
  25. data/doc/rdoc/fr_file_index.html +1 -3
  26. data/doc/rdoc/fr_method_index.html +21 -21
  27. data/examples/app_skeleton/Rakefile +81 -0
  28. data/examples/app_skeleton/dist/conf/merb_init.rb +15 -0
  29. data/examples/{skeleton → app_skeleton}/dist/conf/router.rb +5 -7
  30. data/examples/app_skeleton/scripts/merb_stop +5 -0
  31. data/examples/app_skeleton/scripts/new_migration +21 -0
  32. data/examples/{skeleton → app_skeleton}/test/test_helper.rb +0 -0
  33. data/examples/sample_app/Rakefile +81 -0
  34. data/examples/sample_app/dist/app/controllers/posts.rb +26 -10
  35. data/examples/sample_app/dist/app/models/comment.rb +3 -0
  36. data/examples/sample_app/dist/app/models/post.rb +2 -11
  37. data/examples/sample_app/dist/app/views/layout/application.rhtml +59 -4
  38. data/examples/sample_app/dist/app/views/posts/_comments.rhtml +11 -0
  39. data/examples/sample_app/dist/app/views/posts/comment.merbjs +1 -0
  40. data/examples/sample_app/dist/app/views/posts/list.rhtml +2 -4
  41. data/examples/sample_app/dist/app/views/posts/new.rhtml +2 -2
  42. data/examples/sample_app/dist/app/views/posts/show.rhtml +35 -3
  43. data/examples/sample_app/dist/conf/merb_init.rb +2 -4
  44. data/examples/sample_app/dist/conf/router.rb +3 -4
  45. data/examples/sample_app/dist/public/images/bg.jpg +0 -0
  46. data/examples/sample_app/dist/public/images/book.gif +0 -0
  47. data/examples/sample_app/dist/public/images/booksmall.gif +0 -0
  48. data/examples/sample_app/dist/public/images/greenright.jpg +0 -0
  49. data/examples/sample_app/dist/public/images/louiecon.gif +0 -0
  50. data/examples/sample_app/dist/public/images/menu.gif +0 -0
  51. data/examples/sample_app/dist/public/images/menuleft.gif +0 -0
  52. data/examples/sample_app/dist/public/images/menuright.gif +0 -0
  53. data/examples/sample_app/dist/public/images/mountain.jpg +0 -0
  54. data/examples/sample_app/dist/public/images/n3.jpg +0 -0
  55. data/examples/sample_app/dist/public/images/nautica.jpg +0 -0
  56. data/examples/sample_app/dist/public/javascripts/application.js +0 -0
  57. data/examples/sample_app/dist/public/javascripts/effects.js +975 -0
  58. data/examples/sample_app/dist/public/javascripts/prototype.js +2264 -0
  59. data/examples/sample_app/dist/public/stylesheets/merb.css +277 -0
  60. data/examples/sample_app/dist/schema/migrations/001_add_comments_to_posts.rb +22 -0
  61. data/examples/sample_app/dist/schema/schema.rb +22 -0
  62. data/examples/sample_app/log/merb.log +164394 -0
  63. data/examples/sample_app/script/merb_stop +9 -0
  64. data/examples/sample_app/script/new_migration +21 -0
  65. data/lib/merb.rb +7 -4
  66. data/lib/merb/merb_controller.rb +83 -4
  67. data/lib/merb/merb_handler.rb +20 -9
  68. data/lib/merb/merb_router.rb +18 -1
  69. data/lib/merb/merb_utils.rb +11 -1
  70. data/lib/merb_tasks.rb +7 -0
  71. data/lib/tasks/db.rake +53 -0
  72. metadata +67 -34
  73. data/doc/rdoc/classes/Merb/Config.html +0 -161
  74. data/doc/rdoc/classes/Merb/Server.html +0 -288
  75. data/doc/rdoc/files/lib/merb/merb_daemon_rb.html +0 -113
  76. data/doc/rdoc/files/lib/merb/noroutefound_rb.html +0 -101
  77. data/examples/sample_app/dist/app/views/layout/posts.rhtml +0 -6
  78. data/examples/skeleton/dist/conf/merb_init.rb +0 -21
  79. data/lib/merb/merb_daemon.rb +0 -91
  80. data/lib/merb/noroutefound.rb +0 -11
  81. data/lib/merb_config.rb +0 -21
data/README CHANGED
@@ -29,7 +29,7 @@ including multipart uploads and post as well as ?query=strings. Puts the
29
29
  params into params and the cookies into cookies when it instantiates your
30
30
  controller class.
31
31
 
32
- 2. New RouteMatcher and route compiler. Reads your route definition and compiles
32
+ 2. RouteMatcher and route compiler. Reads your route definition and compiles
33
33
  a method on the fly that will match the request path against each route and do the
34
34
  right thing. So the following routes:
35
35
 
@@ -93,6 +93,34 @@ end
93
93
  <h1>Hello, <%= @name %>!</h1>
94
94
  <% end %>
95
95
 
96
+ You can also render partials like so:
97
+ <%= partial(:comments) %>
98
+
99
+ This assumes a _comments.rhtml file in the same view dir as the current
100
+ controller/view
101
+
102
+ Merb also allows for returning javascript instead of html for ajax actions
103
+ You have to use the render_js instead of normal render
104
+
105
+ def ajax_action
106
+ @posts = Post.find :all
107
+ render_js
108
+ end
109
+
110
+ # ajax_action.merbjs
111
+ $('comments').update('<%= escape_js(partial(:posts)) %>');
112
+
113
+ # _posts.rhtml
114
+ <ul>
115
+ <% @posts.each do |p| %>
116
+ <li>
117
+ <%= p.title %><br />
118
+ <%= p.body %>
119
+ </li>
120
+ <% end %>
121
+ </ul>
122
+
123
+
96
124
 
97
125
  4. the server. right now you add your routes in
98
126
  the appdir/conf/router.rb file. So by default it runs on port 4000
@@ -100,6 +128,15 @@ the appdir/conf/router.rb file. So by default it runs on port 4000
100
128
  $ cd /path/to/your/merb/app
101
129
  $ merb
102
130
 
131
+ Or to start merb on a different port:
132
+ $ merb -p 3500
133
+
134
+ To start a cluster of merb servers you specify the first port and then how many
135
+ servers you want spawned. SO this command will start a merb instance on ports
136
+ 3000, 3001, 3002
137
+
138
+ $ merb -p 3000 -c 3
139
+
103
140
  5. File uploads. This is the thing that Merb was written for. Rails doesn't allow
104
141
  multiple concurrent file uploads at once without blocking an entire rails backend
105
142
  for each file upload. Merb allows multiple file uploads at once. Start the server
@@ -125,11 +162,12 @@ and DIST_ROOT. MERB_ROOT is the root of the whole tree. And DISTROOT is MERB_ROO
125
162
  You will cd into MERB_ROOT to run the merb command line. ANd when you deploy live you
126
163
  will put the dist dir into another empty MERB_ROOT on the production server.
127
164
 
128
- skeleton_app
165
+ app_skeleton
129
166
  Rakefile
130
167
  README
131
168
  scripts
132
169
  test
170
+ test_helper.rb
133
171
  fixtures
134
172
  spec
135
173
  unit
@@ -143,3 +181,4 @@ skeleton_app
143
181
  lib
144
182
  public
145
183
  plugins
184
+ schema
data/Rakefile CHANGED
@@ -3,11 +3,12 @@ require 'rake/clean'
3
3
  require 'rake/gempackagetask'
4
4
  require 'rake/rdoctask'
5
5
  require 'rake/testtask'
6
+ require 'code_statistics'
6
7
  require 'fileutils'
7
8
  include FileUtils
8
9
 
9
10
  NAME = "merb"
10
- VERS = "0.0.4"
11
+ VERS = "0.0.5"
11
12
  CLEAN.include ['**/.*.sw?', '*.gem', '.config']
12
13
  RDOC_OPTS = ['--quiet', '--title', "Merb Documentation",
13
14
  "--opname", "index.html",
@@ -68,6 +69,7 @@ task :uninstall => [:clean] do
68
69
  sh %{sudo gem uninstall #{NAME}}
69
70
  end
70
71
 
72
+ desc "rdoc to rubyforge"
71
73
  task :doc_rforge do
72
74
  sh %{rake doc}
73
75
  sh %{scp -r -p doc/rdoc/* ezmobius@rubyforge.org:/var/www/gforge-projects/merb}
@@ -112,7 +114,7 @@ STATS_DIRECTORIES = [
112
114
 
113
115
  desc "Report code statistics (KLOCs, etc) from the application"
114
116
  task :stats do
115
- require 'extra/stats'
117
+ #require 'extra/stats'
116
118
  verbose = true
117
119
  CodeStatistics.new(*STATS_DIRECTORIES).to_s
118
120
  end
data/TODO CHANGED
@@ -1,8 +1,8 @@
1
1
  [TODO]
2
2
  * Irb Console **DONE**
3
- * Migrations
3
+ * Migrations **DONE**
4
4
  * Helpers
5
- * config file
5
+ * config file **DONE**
6
6
  * merg args and params **DONE**
7
7
  * session
8
8
  ** AR
@@ -11,7 +11,7 @@
11
11
  * Mongoose ?
12
12
  * Text backend?
13
13
  * plugins support(rails plugins too?)
14
- * Layouts
14
+ * Layouts **DONE**
15
15
  * auto template_dir
16
16
  * before/after filters
17
17
  * merbjs
data/bin/merb CHANGED
@@ -1,7 +1,161 @@
1
1
  #!/usr/local/bin/ruby
2
2
  require 'rubygems'
3
3
  require 'merb'
4
- #require 'merb_daemon'
5
- require 'merb_config'
6
- DEBUG=true
4
+ require 'optparse'
5
+ require 'ostruct'
6
+ require 'fileutils'
7
+ module Merb
8
+ end
9
+
10
+ class Merb::Config
11
+ def self.setup
12
+ defaults = {
13
+ :host => "0.0.0.0",
14
+ :port => "4000",
15
+ :allow_reloading => true,
16
+ :merb_root => Dir.pwd
17
+ }
18
+
19
+ begin
20
+ options = defaults.merge(YAML.load(ERB.new(IO.read("#{defaults[:merb_root]}/dist/conf/merb.yml")).result))
21
+ rescue
22
+ options = defaults
23
+ end
24
+
25
+ options
26
+ end
27
+ end
28
+
29
+ class Merb::Server
30
+
31
+ def self.merb_config
32
+ options = Merb::Config.setup
33
+
34
+ opts = OptionParser.new do |opts|
35
+ opts.on("-f", "--config-file [String]") do |config|
36
+ options[:config] = config
37
+ end
38
+
39
+ opts.on("-d", "--daemonize [String]") do |config|
40
+ options[:daemonize] = true
41
+ end
42
+
43
+ opts.on("-c", "--cluster-nodes [String]") do |nodes|
44
+ options[:cluster] = nodes
45
+ end
46
+
47
+ opts.on("-p", "--port [Integer]") do |port|
48
+ options[:port] = port
49
+ end
50
+
51
+ opts.on("-n", "--num-procs [Integer]") do |numprocs|
52
+ options[:numprocs] = numprocs
53
+ end
54
+
55
+ opts.on("-h", "--host [String]") do |host|
56
+ options[:host] = host
57
+ end
58
+
59
+ opts.on("-m", "--merb-root [String]") do |merb_root|
60
+ options[:merb_root] = File.expand_path(merb_root)
61
+ end
62
+
63
+ opts.on("-i", "--irb-console [String]") do |console|
64
+ options[:console] = true
65
+ end
66
+ end
67
+
68
+ opts.parse!(@@merb_raw_opts)
69
+
70
+
71
+ @@merb_opts = options
72
+ puts %{Merb started with these options:}
73
+ puts @@merb_opts.to_yaml; puts
74
+ end
75
+
76
+ def self.run
77
+ @@merb_raw_opts = ARGV
78
+ merb_config
79
+
80
+ @@merb_opts[:dist_root] = @@merb_opts[:merb_root]+'/dist'
81
+
82
+ $LOAD_PATH.unshift( File.join(@@merb_opts[:merb_root] , '/dist/app/controllers') )
83
+ $LOAD_PATH.unshift( File.join(@@merb_opts[:merb_root] , '/dist/lib') )
84
+ require @@merb_opts[:merb_root]+'/dist/conf/router.rb'
85
+ require @@merb_opts[:merb_root]+'/dist/conf/merb_init.rb'
86
+
87
+ if @@merb_opts[:console]
88
+ ARGV.clear # Avoid passing args to IRB
89
+ require 'irb'
90
+ require 'irb/completion'
91
+ def exit
92
+ exit!
93
+ end
94
+ if File.exists? ".irbrc"
95
+ ENV['IRBRC'] = ".irbrc"
96
+ end
97
+ IRB.start
98
+ exit!
99
+ end
100
+
101
+ if @@merb_opts[:cluster]
102
+ delete_pidfile
103
+ @@merb_opts[:port].to_i.upto(@@merb_opts[:port].to_i+@@merb_opts[:cluster].to_i-1) do |port|
104
+ puts "Starting merb server on port: #{port}"
105
+ start(port)
106
+ end
107
+ elsif @@merb_opts[:daemonize]
108
+ delete_pidfile
109
+ start(@@merb_opts[:port])
110
+ else
111
+ trap('INT') {exit}
112
+ mongrel_start(@@merb_opts[:port])
113
+ end
114
+
115
+ end
116
+
117
+ def self.store_pid(pid)
118
+ File.open("#{@@merb_opts[:merb_root]}/log/merb.pid", 'a'){|f| f.write("#{Process.pid}\n")}
119
+ end
120
+
121
+ def self.start(port)
122
+ fork do
123
+ Process.setsid
124
+ exit if fork
125
+ store_pid(Process.pid)
126
+ Dir.chdir @@merb_opts[:merb_root]
127
+ File.umask 0000
128
+ STDIN.reopen "/dev/null"
129
+ STDOUT.reopen "/dev/null", "a"
130
+ STDERR.reopen STDOUT
131
+ trap("TERM") { exit }
132
+ mongrel_start(port)
133
+ end
134
+ end
135
+
136
+ def self.delete_pidfile
137
+ FileUtils.rm("#{@@merb_opts[:merb_root]}/log/merb.pid") rescue nil
138
+ end
139
+
140
+ def self.start_cluster(ports)
141
+ delete_pidfile
142
+ ports.each do |p|
143
+ start(port)
144
+ end
145
+ end
146
+
147
+ def self.mongrel_start(port)
148
+ h = Mongrel::HttpServer.new((@@merb_opts[:host]||"0.0.0.0"), (port ||4000), (@@merb_opts[:numprocs]||100))
149
+ h.register("/", MerbHandler.new(@@merb_opts[:dist_root]+'/public'))
150
+ h.register("/favicon.ico", Mongrel::Error404Handler.new(""))
151
+ h.run.join
152
+ end
153
+
154
+ def self.config
155
+ @@merb_opts
156
+ end
157
+
158
+ end
159
+
160
+
7
161
  Merb::Server.run
@@ -124,10 +124,10 @@
124
124
  onclick="toggleCode('M000008-source');return false;">[Source]</a></p>
125
125
  <div class="method-source-code" id="M000008-source">
126
126
  <pre>
127
- <span class="ruby-comment cmt"># File lib/merb/merb_utils.rb, line 38</span>
128
- 38: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">with_indifferent_access</span>
129
- 39: <span class="ruby-constant">MerbHash</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
130
- 40: <span class="ruby-keyword kw">end</span>
127
+ <span class="ruby-comment cmt"># File lib/merb/merb_utils.rb, line 47</span>
128
+ 47: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">with_indifferent_access</span>
129
+ 48: <span class="ruby-constant">MerbHash</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
130
+ 49: <span class="ruby-keyword kw">end</span>
131
131
  </pre>
132
132
  </div>
133
133
  </div>
@@ -58,18 +58,10 @@
58
58
  <a href="../files/lib/merb_rb.html">
59
59
  lib/merb.rb
60
60
  </a>
61
- <br />
62
- <a href="../files/lib/merb_config_rb.html">
63
- lib/merb_config.rb
64
- </a>
65
61
  <br />
66
62
  <a href="../files/lib/merb/merb_controller_rb.html">
67
63
  lib/merb/merb_controller.rb
68
64
  </a>
69
- <br />
70
- <a href="../files/lib/merb/merb_daemon_rb.html">
71
- lib/merb/merb_daemon.rb
72
- </a>
73
65
  <br />
74
66
  <a href="../files/lib/merb/merb_router_rb.html">
75
67
  lib/merb/merb_router.rb
@@ -103,10 +95,8 @@
103
95
  <div id="class-list">
104
96
  <h3 class="section-bar">Classes and Modules</h3>
105
97
 
106
- Class <a href="Merb/Config.html" class="link">Merb::Config</a><br />
107
- Class <a href="Merb/Controller.html" class="link">Merb::Controller</a><br />
98
+ Class <a href="Merb/Controller.html" class="link">Merb::Controller</a><br />
108
99
  Class <a href="Merb/RouteMatcher.html" class="link">Merb::RouteMatcher</a><br />
109
- Class <a href="Merb/Server.html" class="link">Merb::Server</a><br />
110
100
 
111
101
  </div>
112
102
 
@@ -118,7 +108,7 @@ Class <a href="Merb/Server.html" class="link">Merb::Server</a><br />
118
108
  <tr class="top-aligned-row context-row">
119
109
  <td class="context-item-name">VERSION</td>
120
110
  <td>=</td>
121
- <td class="context-item-value">'0.0.4' unless defined?VERSION</td>
111
+ <td class="context-item-value">'0.0.5' unless defined?VERSION</td>
122
112
  </tr>
123
113
  </table>
124
114
  </div>
@@ -84,14 +84,14 @@
84
84
  <p>
85
85
  All of your controllers will inherit from <a
86
86
  href="Controller.html">Merb::Controller</a>. This superclass takes care of
87
- parsing the incoming <a href="Controller.html#M000040">headers</a> and body
88
- into <a href="Controller.html#M000038">params</a> and <a
89
- href="Controller.html#M000039">cookies</a> and <a
90
- href="Controller.html#M000040">headers</a>. If the request is a file upload
87
+ parsing the incoming <a href="Controller.html#M000039">headers</a> and body
88
+ into <a href="Controller.html#M000037">params</a> and <a
89
+ href="Controller.html#M000038">cookies</a> and <a
90
+ href="Controller.html#M000039">headers</a>. If the request is a file upload
91
91
  it will stream it into a tempfile and pass in the filename and tempfile
92
- object to your controller via <a href="Controller.html#M000038">params</a>.
92
+ object to your controller via <a href="Controller.html#M000037">params</a>.
93
93
  It also parses the ?query=string and puts that into <a
94
- href="Controller.html#M000038">params</a> as well.
94
+ href="Controller.html#M000037">params</a> as well.
95
95
  </p>
96
96
 
97
97
  </div>
@@ -103,19 +103,24 @@ href="Controller.html#M000038">params</a> as well.
103
103
  <h3 class="section-bar">Methods</h3>
104
104
 
105
105
  <div class="name-list">
106
- <a href="#M000039">cookies</a>&nbsp;&nbsp;
107
- <a href="#M000045">current_method_name</a>&nbsp;&nbsp;
108
- <a href="#M000042">escape</a>&nbsp;&nbsp;
109
- <a href="#M000040">headers</a>&nbsp;&nbsp;
110
- <a href="#M000046">layout</a>&nbsp;&nbsp;
111
- <a href="#M000038">params</a>&nbsp;&nbsp;
112
- <a href="#M000041">query_parse</a>&nbsp;&nbsp;
113
- <a href="#M000036">redirect</a>&nbsp;&nbsp;
114
- <a href="#M000048">render</a>&nbsp;&nbsp;
115
- <a href="#M000047">render_no_layout</a>&nbsp;&nbsp;
116
- <a href="#M000037">send_file</a>&nbsp;&nbsp;
117
- <a href="#M000044">template_dir</a>&nbsp;&nbsp;
118
- <a href="#M000043">unescape</a>&nbsp;&nbsp;
106
+ <a href="#M000038">cookies</a>&nbsp;&nbsp;
107
+ <a href="#M000046">current_method_name</a>&nbsp;&nbsp;
108
+ <a href="#M000041">escape</a>&nbsp;&nbsp;
109
+ <a href="#M000043">escape_js</a>&nbsp;&nbsp;
110
+ <a href="#M000039">headers</a>&nbsp;&nbsp;
111
+ <a href="#M000044">js</a>&nbsp;&nbsp;
112
+ <a href="#M000048">layout</a>&nbsp;&nbsp;
113
+ <a href="#M000037">params</a>&nbsp;&nbsp;
114
+ <a href="#M000051">partial</a>&nbsp;&nbsp;
115
+ <a href="#M000040">query_parse</a>&nbsp;&nbsp;
116
+ <a href="#M000035">redirect</a>&nbsp;&nbsp;
117
+ <a href="#M000052">render</a>&nbsp;&nbsp;
118
+ <a href="#M000047">render_js</a>&nbsp;&nbsp;
119
+ <a href="#M000050">render_no_layout</a>&nbsp;&nbsp;
120
+ <a href="#M000049">render_nothing</a>&nbsp;&nbsp;
121
+ <a href="#M000036">send_file</a>&nbsp;&nbsp;
122
+ <a href="#M000045">template_dir</a>&nbsp;&nbsp;
123
+ <a href="#M000042">unescape</a>&nbsp;&nbsp;
119
124
  </div>
120
125
  </div>
121
126
 
@@ -150,230 +155,346 @@ href="Controller.html#M000038">params</a> as well.
150
155
  <div id="methods">
151
156
  <h3 class="section-bar">Public Instance methods</h3>
152
157
 
153
- <div id="method-M000039" class="method-detail">
154
- <a name="M000039"></a>
158
+ <div id="method-M000038" class="method-detail">
159
+ <a name="M000038"></a>
155
160
 
156
161
  <div class="method-heading">
157
- <a href="#M000039" class="method-signature">
162
+ <a href="#M000038" class="method-signature">
158
163
  <span class="method-name">cookies</span><span class="method-args">()</span>
159
164
  </a>
160
165
  </div>
161
166
 
162
167
  <div class="method-description">
168
+ <p>
169
+ accessor for @<a href="Controller.html#M000038">cookies</a>. Please use <a
170
+ href="Controller.html#M000038">cookies</a> and never @<a
171
+ href="Controller.html#M000038">cookies</a> directly.
172
+ </p>
163
173
  <p><a class="source-toggle" href="#"
164
- onclick="toggleCode('M000039-source');return false;">[Source]</a></p>
165
- <div class="method-source-code" id="M000039-source">
174
+ onclick="toggleCode('M000038-source');return false;">[Source]</a></p>
175
+ <div class="method-source-code" id="M000038-source">
166
176
  <pre>
167
- <span class="ruby-comment cmt"># File lib/merb/merb_controller.rb, line 77</span>
168
- 77: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">cookies</span>
169
- 78: <span class="ruby-ivar">@cookies</span>
170
- 79: <span class="ruby-keyword kw">end</span>
177
+ <span class="ruby-comment cmt"># File lib/merb/merb_controller.rb, line 92</span>
178
+ 92: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">cookies</span>
179
+ 93: <span class="ruby-ivar">@cookies</span>
180
+ 94: <span class="ruby-keyword kw">end</span>
171
181
  </pre>
172
182
  </div>
173
183
  </div>
174
184
  </div>
175
185
 
176
- <div id="method-M000045" class="method-detail">
177
- <a name="M000045"></a>
186
+ <div id="method-M000046" class="method-detail">
187
+ <a name="M000046"></a>
178
188
 
179
189
  <div class="method-heading">
180
- <a href="#M000045" class="method-signature">
190
+ <a href="#M000046" class="method-signature">
181
191
  <span class="method-name">current_method_name</span><span class="method-args">(depth=0)</span>
182
192
  </a>
183
193
  </div>
184
194
 
185
195
  <div class="method-description">
196
+ <p>
197
+ returns the current method name. Used for auto discovery of which template
198
+ to <a href="Controller.html#M000052">render</a> based on the action name.
199
+ </p>
186
200
  <p><a class="source-toggle" href="#"
187
- onclick="toggleCode('M000045-source');return false;">[Source]</a></p>
188
- <div class="method-source-code" id="M000045-source">
201
+ onclick="toggleCode('M000046-source');return false;">[Source]</a></p>
202
+ <div class="method-source-code" id="M000046-source">
189
203
  <pre>
190
- <span class="ruby-comment cmt"># File lib/merb/merb_controller.rb, line 107</span>
191
- 107: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">current_method_name</span>(<span class="ruby-identifier">depth</span>=<span class="ruby-value">0</span>)
192
- 108: <span class="ruby-identifier">caller</span>[<span class="ruby-identifier">depth</span>] <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/`(.*)'$/</span>; <span class="ruby-identifier">$1</span>
193
- 109: <span class="ruby-keyword kw">end</span>
204
+ <span class="ruby-comment cmt"># File lib/merb/merb_controller.rb, line 140</span>
205
+ 140: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">current_method_name</span>(<span class="ruby-identifier">depth</span>=<span class="ruby-value">0</span>)
206
+ 141: <span class="ruby-identifier">caller</span>[<span class="ruby-identifier">depth</span>] <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/`(.*)'$/</span>; <span class="ruby-identifier">$1</span>
207
+ 142: <span class="ruby-keyword kw">end</span>
194
208
  </pre>
195
209
  </div>
196
210
  </div>
197
211
  </div>
198
212
 
199
- <div id="method-M000042" class="method-detail">
200
- <a name="M000042"></a>
213
+ <div id="method-M000041" class="method-detail">
214
+ <a name="M000041"></a>
201
215
 
202
216
  <div class="method-heading">
203
- <a href="#M000042" class="method-signature">
217
+ <a href="#M000041" class="method-signature">
204
218
  <span class="method-name">escape</span><span class="method-args">(s)</span>
205
219
  </a>
206
220
  </div>
207
221
 
208
222
  <div class="method-description">
223
+ <p>
224
+ does url escaping
225
+ </p>
209
226
  <p><a class="source-toggle" href="#"
210
- onclick="toggleCode('M000042-source');return false;">[Source]</a></p>
211
- <div class="method-source-code" id="M000042-source">
227
+ onclick="toggleCode('M000041-source');return false;">[Source]</a></p>
228
+ <div class="method-source-code" id="M000041-source">
212
229
  <pre>
213
- <span class="ruby-comment cmt"># File lib/merb/merb_controller.rb, line 94</span>
214
- 94: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">escape</span>(<span class="ruby-identifier">s</span>)
215
- 95: <span class="ruby-constant">Mongrel</span><span class="ruby-operator">::</span><span class="ruby-constant">HttpRequest</span>.<span class="ruby-identifier">escape</span>(<span class="ruby-identifier">s</span>)
216
- 96: <span class="ruby-keyword kw">end</span>
230
+ <span class="ruby-comment cmt"># File lib/merb/merb_controller.rb, line 117</span>
231
+ 117: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">escape</span>(<span class="ruby-identifier">s</span>)
232
+ 118: <span class="ruby-constant">Mongrel</span><span class="ruby-operator">::</span><span class="ruby-constant">HttpRequest</span>.<span class="ruby-identifier">escape</span>(<span class="ruby-identifier">s</span>)
233
+ 119: <span class="ruby-keyword kw">end</span>
217
234
  </pre>
218
235
  </div>
219
236
  </div>
220
237
  </div>
221
238
 
222
- <div id="method-M000040" class="method-detail">
223
- <a name="M000040"></a>
239
+ <div id="method-M000043" class="method-detail">
240
+ <a name="M000043"></a>
224
241
 
225
242
  <div class="method-heading">
226
- <a href="#M000040" class="method-signature">
243
+ <a href="#M000043" class="method-signature">
244
+ <span class="method-name">escape_js</span><span class="method-args">(javascript)</span>
245
+ </a>
246
+ </div>
247
+
248
+ <div class="method-description">
249
+ <p>
250
+ <a href="Controller.html#M000041">escape</a> text for javascript.
251
+ </p>
252
+ <p><a class="source-toggle" href="#"
253
+ onclick="toggleCode('M000043-source');return false;">[Source]</a></p>
254
+ <div class="method-source-code" id="M000043-source">
255
+ <pre>
256
+ <span class="ruby-comment cmt"># File lib/merb/merb_controller.rb, line 127</span>
257
+ 127: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">escape_js</span>(<span class="ruby-identifier">javascript</span>)
258
+ 128: (<span class="ruby-identifier">javascript</span> <span class="ruby-operator">||</span> <span class="ruby-value str">''</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-value str">'\\'</span>,<span class="ruby-value str">'\0\0'</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/\r\n|\n|\r/</span>, <span class="ruby-value str">&quot;\\n&quot;</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/[&quot;']/</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">m</span><span class="ruby-operator">|</span> <span class="ruby-node">&quot;\\#{m}&quot;</span> }
259
+ 129: <span class="ruby-keyword kw">end</span>
260
+ </pre>
261
+ </div>
262
+ </div>
263
+ </div>
264
+
265
+ <div id="method-M000039" class="method-detail">
266
+ <a name="M000039"></a>
267
+
268
+ <div class="method-heading">
269
+ <a href="#M000039" class="method-signature">
227
270
  <span class="method-name">headers</span><span class="method-args">()</span>
228
271
  </a>
229
272
  </div>
230
273
 
231
274
  <div class="method-description">
275
+ <p>
276
+ accessor for @<a href="Controller.html#M000039">headers</a>. Please use <a
277
+ href="Controller.html#M000039">headers</a> and never @<a
278
+ href="Controller.html#M000039">headers</a> directly.
279
+ </p>
232
280
  <p><a class="source-toggle" href="#"
233
- onclick="toggleCode('M000040-source');return false;">[Source]</a></p>
234
- <div class="method-source-code" id="M000040-source">
281
+ onclick="toggleCode('M000039-source');return false;">[Source]</a></p>
282
+ <div class="method-source-code" id="M000039-source">
235
283
  <pre>
236
- <span class="ruby-comment cmt"># File lib/merb/merb_controller.rb, line 81</span>
237
- 81: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">headers</span>
238
- 82: <span class="ruby-ivar">@headers</span>
239
- 83: <span class="ruby-keyword kw">end</span>
284
+ <span class="ruby-comment cmt"># File lib/merb/merb_controller.rb, line 98</span>
285
+ 98: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">headers</span>
286
+ 99: <span class="ruby-ivar">@headers</span>
287
+ 100: <span class="ruby-keyword kw">end</span>
240
288
  </pre>
241
289
  </div>
242
290
  </div>
243
291
  </div>
244
292
 
245
- <div id="method-M000046" class="method-detail">
246
- <a name="M000046"></a>
293
+ <div id="method-M000044" class="method-detail">
294
+ <a name="M000044"></a>
247
295
 
248
296
  <div class="method-heading">
249
- <a href="#M000046" class="method-signature">
297
+ <span class="method-name">js</span><span class="method-args">(javascript)</span>
298
+ </div>
299
+
300
+ <div class="method-description">
301
+ <p>
302
+ Alias for <a href="Controller.html#M000043">escape_js</a>
303
+ </p>
304
+ </div>
305
+ </div>
306
+
307
+ <div id="method-M000048" class="method-detail">
308
+ <a name="M000048"></a>
309
+
310
+ <div class="method-heading">
311
+ <a href="#M000048" class="method-signature">
250
312
  <span class="method-name">layout</span><span class="method-args">(l)</span>
251
313
  </a>
252
314
  </div>
253
315
 
254
316
  <div class="method-description">
317
+ <p>
318
+ set the @<a href="Controller.html#M000048">layout</a>. Use this right
319
+ before a <a href="Controller.html#M000052">render</a> to set the name of
320
+ the <a href="Controller.html#M000048">layout</a> to use minus the .rhtml
321
+ </p>
255
322
  <p><a class="source-toggle" href="#"
256
- onclick="toggleCode('M000046-source');return false;">[Source]</a></p>
257
- <div class="method-source-code" id="M000046-source">
323
+ onclick="toggleCode('M000048-source');return false;">[Source]</a></p>
324
+ <div class="method-source-code" id="M000048-source">
258
325
  <pre>
259
- <span class="ruby-comment cmt"># File lib/merb/merb_controller.rb, line 112</span>
260
- 112: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">layout</span>(<span class="ruby-identifier">l</span>)
261
- 113: <span class="ruby-ivar">@layout</span> = <span class="ruby-identifier">l</span>
262
- 114: <span class="ruby-keyword kw">end</span>
326
+ <span class="ruby-comment cmt"># File lib/merb/merb_controller.rb, line 156</span>
327
+ 156: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">layout</span>(<span class="ruby-identifier">l</span>)
328
+ 157: <span class="ruby-ivar">@layout</span> = <span class="ruby-identifier">l</span>
329
+ 158: <span class="ruby-keyword kw">end</span>
263
330
  </pre>
264
331
  </div>
265
332
  </div>
266
333
  </div>
267
334
 
268
- <div id="method-M000038" class="method-detail">
269
- <a name="M000038"></a>
335
+ <div id="method-M000037" class="method-detail">
336
+ <a name="M000037"></a>
270
337
 
271
338
  <div class="method-heading">
272
- <a href="#M000038" class="method-signature">
339
+ <a href="#M000037" class="method-signature">
273
340
  <span class="method-name">params</span><span class="method-args">()</span>
274
341
  </a>
275
342
  </div>
276
343
 
277
344
  <div class="method-description">
345
+ <p>
346
+ accessor for @<a href="Controller.html#M000037">params</a>. Please use <a
347
+ href="Controller.html#M000037">params</a> and never @<a
348
+ href="Controller.html#M000037">params</a> directly.
349
+ </p>
278
350
  <p><a class="source-toggle" href="#"
279
- onclick="toggleCode('M000038-source');return false;">[Source]</a></p>
280
- <div class="method-source-code" id="M000038-source">
351
+ onclick="toggleCode('M000037-source');return false;">[Source]</a></p>
352
+ <div class="method-source-code" id="M000037-source">
281
353
  <pre>
282
- <span class="ruby-comment cmt"># File lib/merb/merb_controller.rb, line 73</span>
283
- 73: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">params</span>
284
- 74: <span class="ruby-ivar">@params</span>
285
- 75: <span class="ruby-keyword kw">end</span>
354
+ <span class="ruby-comment cmt"># File lib/merb/merb_controller.rb, line 86</span>
355
+ 86: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">params</span>
356
+ 87: <span class="ruby-ivar">@params</span>
357
+ 88: <span class="ruby-keyword kw">end</span>
286
358
  </pre>
287
359
  </div>
288
360
  </div>
289
361
  </div>
290
362
 
291
- <div id="method-M000041" class="method-detail">
292
- <a name="M000041"></a>
363
+ <div id="method-M000051" class="method-detail">
364
+ <a name="M000051"></a>
293
365
 
294
366
  <div class="method-heading">
295
- <a href="#M000041" class="method-signature">
367
+ <a href="#M000051" class="method-signature">
368
+ <span class="method-name">partial</span><span class="method-args">(template)</span>
369
+ </a>
370
+ </div>
371
+
372
+ <div class="method-description">
373
+ <p><a class="source-toggle" href="#"
374
+ onclick="toggleCode('M000051-source');return false;">[Source]</a></p>
375
+ <div class="method-source-code" id="M000051-source">
376
+ <pre>
377
+ <span class="ruby-comment cmt"># File lib/merb/merb_controller.rb, line 171</span>
378
+ 171: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">partial</span>(<span class="ruby-identifier">template</span>)
379
+ 172: <span class="ruby-identifier">template</span> = <span class="ruby-constant">Erubis</span><span class="ruby-operator">::</span><span class="ruby-constant">Eruby</span>.<span class="ruby-identifier">new</span>( <span class="ruby-constant">IO</span>.<span class="ruby-identifier">read</span>( <span class="ruby-identifier">template_dir</span>(<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">class</span>.<span class="ruby-identifier">name</span>.<span class="ruby-identifier">snake_case</span>) <span class="ruby-operator">+</span> <span class="ruby-node">&quot;/_#{template}.rhtml&quot;</span> ) )
380
+ 173: <span class="ruby-identifier">template</span>.<span class="ruby-identifier">result</span>(<span class="ruby-identifier">binding</span>)
381
+ 174: <span class="ruby-keyword kw">end</span>
382
+ </pre>
383
+ </div>
384
+ </div>
385
+ </div>
386
+
387
+ <div id="method-M000040" class="method-detail">
388
+ <a name="M000040"></a>
389
+
390
+ <div class="method-heading">
391
+ <a href="#M000040" class="method-signature">
296
392
  <span class="method-name">query_parse</span><span class="method-args">(qs, d = '&amp;;')</span>
297
393
  </a>
298
394
  </div>
299
395
 
300
396
  <div class="method-description">
397
+ <p>
398
+ parses a query string or the payload of a POST request into the <a
399
+ href="Controller.html#M000037">params</a> hash. So for example:
400
+ /foo?bar=nik&amp;post[title]=heya&amp;post[body]=whatever parses into:
401
+ {:bar =&gt; &#8216;nik&#8217;, :post =&gt; {:title =&gt;
402
+ &#8216;heya&#8217;, :body =&gt; &#8216;whatever}}
403
+ </p>
301
404
  <p><a class="source-toggle" href="#"
302
- onclick="toggleCode('M000041-source');return false;">[Source]</a></p>
303
- <div class="method-source-code" id="M000041-source">
405
+ onclick="toggleCode('M000040-source');return false;">[Source]</a></p>
406
+ <div class="method-source-code" id="M000040-source">
304
407
  <pre>
305
- <span class="ruby-comment cmt"># File lib/merb/merb_controller.rb, line 85</span>
306
- 85: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_parse</span>(<span class="ruby-identifier">qs</span>, <span class="ruby-identifier">d</span> = <span class="ruby-value str">'&amp;;'</span>)
307
- 86: <span class="ruby-identifier">m</span> = <span class="ruby-identifier">proc</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">_</span>,<span class="ruby-identifier">o</span>,<span class="ruby-identifier">n</span><span class="ruby-operator">|</span><span class="ruby-identifier">o</span>.<span class="ruby-identifier">update</span>(<span class="ruby-identifier">n</span>,<span class="ruby-operator">&amp;</span><span class="ruby-identifier">m</span>)<span class="ruby-keyword kw">rescue</span>([<span class="ruby-operator">*</span><span class="ruby-identifier">o</span>]<span class="ruby-operator">&lt;&lt;</span><span class="ruby-identifier">n</span>)}
308
- 87: (<span class="ruby-identifier">qs</span><span class="ruby-operator">||</span><span class="ruby-value str">''</span>).<span class="ruby-identifier">split</span>(<span class="ruby-node">/[#{d}] */n</span>).<span class="ruby-identifier">inject</span>(<span class="ruby-constant">MerbHash</span>[]) { <span class="ruby-operator">|</span><span class="ruby-identifier">h</span>,<span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
309
- 88: <span class="ruby-identifier">k</span>, <span class="ruby-identifier">v</span>=<span class="ruby-identifier">unescape</span>(<span class="ruby-identifier">p</span>).<span class="ruby-identifier">split</span>(<span class="ruby-value str">'='</span>,<span class="ruby-value">2</span>)
310
- 89: <span class="ruby-identifier">h</span>.<span class="ruby-identifier">update</span>(<span class="ruby-identifier">k</span>.<span class="ruby-identifier">split</span>(<span class="ruby-regexp re">/[\]\[]+/</span>).<span class="ruby-identifier">reverse</span>.
311
- 90: <span class="ruby-identifier">inject</span>(<span class="ruby-identifier">v</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">x</span>,<span class="ruby-identifier">i</span><span class="ruby-operator">|</span> <span class="ruby-constant">MerbHash</span>[<span class="ruby-identifier">i</span>,<span class="ruby-identifier">x</span>] },<span class="ruby-operator">&amp;</span><span class="ruby-identifier">m</span>)
312
- 91: }
313
- 92: <span class="ruby-keyword kw">end</span>
408
+ <span class="ruby-comment cmt"># File lib/merb/merb_controller.rb, line 107</span>
409
+ 107: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_parse</span>(<span class="ruby-identifier">qs</span>, <span class="ruby-identifier">d</span> = <span class="ruby-value str">'&amp;;'</span>)
410
+ 108: <span class="ruby-identifier">m</span> = <span class="ruby-identifier">proc</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">_</span>,<span class="ruby-identifier">o</span>,<span class="ruby-identifier">n</span><span class="ruby-operator">|</span><span class="ruby-identifier">o</span>.<span class="ruby-identifier">update</span>(<span class="ruby-identifier">n</span>,<span class="ruby-operator">&amp;</span><span class="ruby-identifier">m</span>)<span class="ruby-keyword kw">rescue</span>([<span class="ruby-operator">*</span><span class="ruby-identifier">o</span>]<span class="ruby-operator">&lt;&lt;</span><span class="ruby-identifier">n</span>)}
411
+ 109: (<span class="ruby-identifier">qs</span><span class="ruby-operator">||</span><span class="ruby-value str">''</span>).<span class="ruby-identifier">split</span>(<span class="ruby-node">/[#{d}] */n</span>).<span class="ruby-identifier">inject</span>(<span class="ruby-constant">MerbHash</span>[]) { <span class="ruby-operator">|</span><span class="ruby-identifier">h</span>,<span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
412
+ 110: <span class="ruby-identifier">k</span>, <span class="ruby-identifier">v</span>=<span class="ruby-identifier">unescape</span>(<span class="ruby-identifier">p</span>).<span class="ruby-identifier">split</span>(<span class="ruby-value str">'='</span>,<span class="ruby-value">2</span>)
413
+ 111: <span class="ruby-identifier">h</span>.<span class="ruby-identifier">update</span>(<span class="ruby-identifier">k</span>.<span class="ruby-identifier">split</span>(<span class="ruby-regexp re">/[\]\[]+/</span>).<span class="ruby-identifier">reverse</span>.
414
+ 112: <span class="ruby-identifier">inject</span>(<span class="ruby-identifier">v</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">x</span>,<span class="ruby-identifier">i</span><span class="ruby-operator">|</span> <span class="ruby-constant">MerbHash</span>[<span class="ruby-identifier">i</span>,<span class="ruby-identifier">x</span>] },<span class="ruby-operator">&amp;</span><span class="ruby-identifier">m</span>)
415
+ 113: }
416
+ 114: <span class="ruby-keyword kw">end</span>
314
417
  </pre>
315
418
  </div>
316
419
  </div>
317
420
  </div>
318
421
 
319
- <div id="method-M000036" class="method-detail">
320
- <a name="M000036"></a>
422
+ <div id="method-M000035" class="method-detail">
423
+ <a name="M000035"></a>
321
424
 
322
425
  <div class="method-heading">
323
- <a href="#M000036" class="method-signature">
426
+ <a href="#M000035" class="method-signature">
324
427
  <span class="method-name">redirect</span><span class="method-args">(url)</span>
325
428
  </a>
326
429
  </div>
327
430
 
328
431
  <div class="method-description">
432
+ <p>
433
+ <a href="Controller.html#M000035">redirect</a> to another url It can be
434
+ like /foo/bar for redirecting within your same app. Or it can be a fully
435
+ qualified url to another site.
436
+ </p>
329
437
  <p><a class="source-toggle" href="#"
330
- onclick="toggleCode('M000036-source');return false;">[Source]</a></p>
331
- <div class="method-source-code" id="M000036-source">
438
+ onclick="toggleCode('M000035-source');return false;">[Source]</a></p>
439
+ <div class="method-source-code" id="M000035-source">
332
440
  <pre>
333
- <span class="ruby-comment cmt"># File lib/merb/merb_controller.rb, line 62</span>
334
- 62: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">redirect</span>(<span class="ruby-identifier">url</span>)
335
- 63: <span class="ruby-ivar">@status</span> = <span class="ruby-value">302</span>
336
- 64: <span class="ruby-ivar">@headers</span>.<span class="ruby-identifier">merge!</span>({<span class="ruby-value str">'Location'</span>=<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">url</span>})
337
- 65: <span class="ruby-keyword kw">return</span> <span class="ruby-value str">''</span>
338
- 66: <span class="ruby-keyword kw">end</span>
441
+ <span class="ruby-comment cmt"># File lib/merb/merb_controller.rb, line 69</span>
442
+ 69: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">redirect</span>(<span class="ruby-identifier">url</span>)
443
+ 70: <span class="ruby-constant">MERB_LOGGER</span>.<span class="ruby-identifier">info</span>(<span class="ruby-node">&quot;Redirecting to: #{url}&quot;</span>)
444
+ 71: <span class="ruby-ivar">@status</span> = <span class="ruby-value">302</span>
445
+ 72: <span class="ruby-ivar">@headers</span>.<span class="ruby-identifier">merge!</span>({<span class="ruby-value str">'Location'</span>=<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">url</span>})
446
+ 73: <span class="ruby-keyword kw">return</span> <span class="ruby-value str">''</span>
447
+ 74: <span class="ruby-keyword kw">end</span>
339
448
  </pre>
340
449
  </div>
341
450
  </div>
342
451
  </div>
343
452
 
344
- <div id="method-M000048" class="method-detail">
345
- <a name="M000048"></a>
453
+ <div id="method-M000052" class="method-detail">
454
+ <a name="M000052"></a>
346
455
 
347
456
  <div class="method-heading">
348
- <a href="#M000048" class="method-signature">
457
+ <a href="#M000052" class="method-signature">
349
458
  <span class="method-name">render</span><span class="method-args">(template=current_method_name(1), b=binding)</span>
350
459
  </a>
351
460
  </div>
352
461
 
353
462
  <div class="method-description">
463
+ <p>
464
+ renders a template based on the current action name you can pass the name
465
+ of a template if you want to <a href="Controller.html#M000052">render</a> a
466
+ template with a different name then then current action name. Wraps the
467
+ rendered template in the <a href="Controller.html#M000048">layout</a>. Uses
468
+ layout/application.rhtml unless there is a <a
469
+ href="Controller.html#M000048">layout</a> named after the current
470
+ controller or @<a href="Controller.html#M000048">layout</a> has been set to
471
+ another value.
472
+ </p>
354
473
  <p><a class="source-toggle" href="#"
355
- onclick="toggleCode('M000048-source');return false;">[Source]</a></p>
356
- <div class="method-source-code" id="M000048-source">
474
+ onclick="toggleCode('M000052-source');return false;">[Source]</a></p>
475
+ <div class="method-source-code" id="M000052-source">
357
476
  <pre>
358
- <span class="ruby-comment cmt"># File lib/merb/merb_controller.rb, line 121</span>
359
- 121: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">render</span>(<span class="ruby-identifier">template</span>=<span class="ruby-identifier">current_method_name</span>(<span class="ruby-value">1</span>), <span class="ruby-identifier">b</span>=<span class="ruby-identifier">binding</span>)
360
- 122: <span class="ruby-identifier">name</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">class</span>.<span class="ruby-identifier">name</span>.<span class="ruby-identifier">snake_case</span>
361
- 123: <span class="ruby-identifier">template</span> = <span class="ruby-constant">Erubis</span><span class="ruby-operator">::</span><span class="ruby-constant">Eruby</span>.<span class="ruby-identifier">new</span>( <span class="ruby-constant">IO</span>.<span class="ruby-identifier">read</span>( <span class="ruby-identifier">template_dir</span>(<span class="ruby-identifier">name</span>) <span class="ruby-operator">+</span> <span class="ruby-node">&quot;/#{template}.rhtml&quot;</span> ) )
362
- 124: <span class="ruby-identifier">layout_content</span> = <span class="ruby-identifier">template</span>.<span class="ruby-identifier">result</span>(<span class="ruby-identifier">b</span>)
363
- 125: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">layout_content</span> <span class="ruby-keyword kw">if</span> (<span class="ruby-ivar">@layout</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'none'</span>)
364
- 126: <span class="ruby-keyword kw">if</span> [<span class="ruby-value str">'application'</span>, <span class="ruby-identifier">name</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-ivar">@layout</span>.<span class="ruby-identifier">to_s</span>)
365
- 127: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">template_dir</span>(<span class="ruby-node">&quot;layout/#{name}.rhtml&quot;</span>))
366
- 128: <span class="ruby-identifier">layout</span> = <span class="ruby-identifier">name</span>
367
- 129: <span class="ruby-keyword kw">else</span>
368
- 130: <span class="ruby-identifier">layout</span> = <span class="ruby-value str">'application'</span>
369
- 131: <span class="ruby-keyword kw">end</span>
370
- 132: <span class="ruby-keyword kw">else</span>
371
- 133: <span class="ruby-identifier">layout</span> = <span class="ruby-ivar">@layout</span>.<span class="ruby-identifier">to_s</span>
372
- 134: <span class="ruby-keyword kw">end</span>
373
- 135: <span class="ruby-ivar">@layout_content</span> = <span class="ruby-identifier">layout_content</span>
374
- 136: <span class="ruby-identifier">layout_tmpl</span> = <span class="ruby-constant">Erubis</span><span class="ruby-operator">::</span><span class="ruby-constant">Eruby</span>.<span class="ruby-identifier">new</span>( <span class="ruby-constant">IO</span>.<span class="ruby-identifier">read</span>( <span class="ruby-identifier">template_dir</span>(<span class="ruby-value str">'layout'</span>) <span class="ruby-operator">+</span> <span class="ruby-node">&quot;/#{layout}.rhtml&quot;</span> ) )
375
- 137: <span class="ruby-identifier">layout_tmpl</span>.<span class="ruby-identifier">result</span>(<span class="ruby-identifier">b</span>)
376
- 138: <span class="ruby-keyword kw">end</span>
477
+ <span class="ruby-comment cmt"># File lib/merb/merb_controller.rb, line 183</span>
478
+ 183: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">render</span>(<span class="ruby-identifier">template</span>=<span class="ruby-identifier">current_method_name</span>(<span class="ruby-value">1</span>), <span class="ruby-identifier">b</span>=<span class="ruby-identifier">binding</span>)
479
+ 184: <span class="ruby-constant">MERB_LOGGER</span>.<span class="ruby-identifier">info</span>(<span class="ruby-node">&quot;Rendering template: #{template_dir(template)}&quot;</span>)
480
+ 185: <span class="ruby-identifier">name</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">class</span>.<span class="ruby-identifier">name</span>.<span class="ruby-identifier">snake_case</span>
481
+ 186: <span class="ruby-identifier">template</span> = <span class="ruby-constant">Erubis</span><span class="ruby-operator">::</span><span class="ruby-constant">Eruby</span>.<span class="ruby-identifier">new</span>( <span class="ruby-constant">IO</span>.<span class="ruby-identifier">read</span>( <span class="ruby-identifier">template_dir</span>(<span class="ruby-identifier">name</span>) <span class="ruby-operator">+</span> <span class="ruby-node">&quot;/#{template}.rhtml&quot;</span> ) )
482
+ 187: <span class="ruby-identifier">layout_content</span> = <span class="ruby-identifier">template</span>.<span class="ruby-identifier">result</span>(<span class="ruby-identifier">b</span>)
483
+ 188: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">layout_content</span> <span class="ruby-keyword kw">if</span> (<span class="ruby-ivar">@layout</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'none'</span>)
484
+ 189: <span class="ruby-keyword kw">if</span> [<span class="ruby-value str">'application'</span>, <span class="ruby-identifier">name</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-ivar">@layout</span>.<span class="ruby-identifier">to_s</span>)
485
+ 190: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">template_dir</span>(<span class="ruby-node">&quot;layout/#{name}.rhtml&quot;</span>))
486
+ 191: <span class="ruby-identifier">layout</span> = <span class="ruby-identifier">name</span>
487
+ 192: <span class="ruby-keyword kw">else</span>
488
+ 193: <span class="ruby-identifier">layout</span> = <span class="ruby-value str">'application'</span>
489
+ 194: <span class="ruby-keyword kw">end</span>
490
+ 195: <span class="ruby-keyword kw">else</span>
491
+ 196: <span class="ruby-identifier">layout</span> = <span class="ruby-ivar">@layout</span>.<span class="ruby-identifier">to_s</span>
492
+ 197: <span class="ruby-keyword kw">end</span>
493
+ 198: <span class="ruby-constant">MERB_LOGGER</span>.<span class="ruby-identifier">info</span>(<span class="ruby-node">&quot;With Layout: #{template_dir('layout')}/#{layout}.rhtml&quot;</span>)
494
+ 199: <span class="ruby-ivar">@layout_content</span> = <span class="ruby-identifier">layout_content</span>
495
+ 200: <span class="ruby-identifier">layout_tmpl</span> = <span class="ruby-constant">Erubis</span><span class="ruby-operator">::</span><span class="ruby-constant">Eruby</span>.<span class="ruby-identifier">new</span>( <span class="ruby-constant">IO</span>.<span class="ruby-identifier">read</span>( <span class="ruby-identifier">template_dir</span>(<span class="ruby-value str">'layout'</span>) <span class="ruby-operator">+</span> <span class="ruby-node">&quot;/#{layout}.rhtml&quot;</span> ) )
496
+ 201: <span class="ruby-identifier">layout_tmpl</span>.<span class="ruby-identifier">result</span>(<span class="ruby-identifier">b</span>)
497
+ 202: <span class="ruby-keyword kw">end</span>
377
498
  </pre>
378
499
  </div>
379
500
  </div>
@@ -384,90 +505,160 @@ href="Controller.html#M000038">params</a> as well.
384
505
 
385
506
  <div class="method-heading">
386
507
  <a href="#M000047" class="method-signature">
387
- <span class="method-name">render_no_layout</span><span class="method-args">(template=current_method_name(1), b=binding)</span>
508
+ <span class="method-name">render_js</span><span class="method-args">(template=current_method_name(1), b=binding)</span>
388
509
  </a>
389
510
  </div>
390
511
 
391
512
  <div class="method-description">
513
+ <p>
514
+ does a <a href="Controller.html#M000052">render</a> with no <a
515
+ href="Controller.html#M000048">layout</a>. Also sets the content type
516
+ header to text/javascript and escapes the template for javascript eval on
517
+ the client
518
+ </p>
392
519
  <p><a class="source-toggle" href="#"
393
520
  onclick="toggleCode('M000047-source');return false;">[Source]</a></p>
394
521
  <div class="method-source-code" id="M000047-source">
395
522
  <pre>
396
- <span class="ruby-comment cmt"># File lib/merb/merb_controller.rb, line 116</span>
397
- 116: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">render_no_layout</span>(<span class="ruby-identifier">template</span>=<span class="ruby-identifier">current_method_name</span>(<span class="ruby-value">1</span>), <span class="ruby-identifier">b</span>=<span class="ruby-identifier">binding</span>)
398
- 117: <span class="ruby-identifier">template</span> = <span class="ruby-constant">Erubis</span><span class="ruby-operator">::</span><span class="ruby-constant">Eruby</span>.<span class="ruby-identifier">new</span>( <span class="ruby-constant">IO</span>.<span class="ruby-identifier">read</span>( <span class="ruby-identifier">template_dir</span>(<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">class</span>.<span class="ruby-identifier">name</span>.<span class="ruby-identifier">snake_case</span>) <span class="ruby-operator">+</span> <span class="ruby-node">&quot;/#{template}.rhtml&quot;</span> ) )
399
- 118: <span class="ruby-identifier">template</span>.<span class="ruby-identifier">result</span>(<span class="ruby-identifier">b</span>)
400
- 119: <span class="ruby-keyword kw">end</span>
523
+ <span class="ruby-comment cmt"># File lib/merb/merb_controller.rb, line 148</span>
524
+ 148: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">render_js</span>(<span class="ruby-identifier">template</span>=<span class="ruby-identifier">current_method_name</span>(<span class="ruby-value">1</span>), <span class="ruby-identifier">b</span>=<span class="ruby-identifier">binding</span>)
525
+ 149: <span class="ruby-identifier">headers</span>[<span class="ruby-value str">'Content-Type'</span>] = <span class="ruby-value str">&quot;text/javascript&quot;</span>
526
+ 150: <span class="ruby-identifier">template</span> = <span class="ruby-constant">Erubis</span><span class="ruby-operator">::</span><span class="ruby-constant">Eruby</span>.<span class="ruby-identifier">new</span>(<span class="ruby-constant">IO</span>.<span class="ruby-identifier">read</span>( <span class="ruby-identifier">template_dir</span>(<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">class</span>.<span class="ruby-identifier">name</span>.<span class="ruby-identifier">snake_case</span>) <span class="ruby-operator">+</span> <span class="ruby-node">&quot;/#{template}.merbjs&quot;</span> ))
527
+ 151: <span class="ruby-identifier">template</span>.<span class="ruby-identifier">result</span>(<span class="ruby-identifier">b</span>)
528
+ 152: <span class="ruby-keyword kw">end</span>
401
529
  </pre>
402
530
  </div>
403
531
  </div>
404
532
  </div>
405
533
 
406
- <div id="method-M000037" class="method-detail">
407
- <a name="M000037"></a>
534
+ <div id="method-M000050" class="method-detail">
535
+ <a name="M000050"></a>
408
536
 
409
537
  <div class="method-heading">
410
- <a href="#M000037" class="method-signature">
538
+ <a href="#M000050" class="method-signature">
539
+ <span class="method-name">render_no_layout</span><span class="method-args">(template=current_method_name(1), b=binding)</span>
540
+ </a>
541
+ </div>
542
+
543
+ <div class="method-description">
544
+ <p>
545
+ renders the action without wrapping it in a <a
546
+ href="Controller.html#M000048">layout</a>.
547
+ </p>
548
+ <p><a class="source-toggle" href="#"
549
+ onclick="toggleCode('M000050-source');return false;">[Source]</a></p>
550
+ <div class="method-source-code" id="M000050-source">
551
+ <pre>
552
+ <span class="ruby-comment cmt"># File lib/merb/merb_controller.rb, line 166</span>
553
+ 166: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">render_no_layout</span>(<span class="ruby-identifier">template</span>=<span class="ruby-identifier">current_method_name</span>(<span class="ruby-value">1</span>), <span class="ruby-identifier">b</span>=<span class="ruby-identifier">binding</span>)
554
+ 167: <span class="ruby-identifier">template</span> = <span class="ruby-constant">Erubis</span><span class="ruby-operator">::</span><span class="ruby-constant">Eruby</span>.<span class="ruby-identifier">new</span>( <span class="ruby-constant">IO</span>.<span class="ruby-identifier">read</span>( <span class="ruby-identifier">template_dir</span>(<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">class</span>.<span class="ruby-identifier">name</span>.<span class="ruby-identifier">snake_case</span>) <span class="ruby-operator">+</span> <span class="ruby-node">&quot;/#{template}.rhtml&quot;</span> ) )
555
+ 168: <span class="ruby-identifier">template</span>.<span class="ruby-identifier">result</span>(<span class="ruby-identifier">b</span>)
556
+ 169: <span class="ruby-keyword kw">end</span>
557
+ </pre>
558
+ </div>
559
+ </div>
560
+ </div>
561
+
562
+ <div id="method-M000049" class="method-detail">
563
+ <a name="M000049"></a>
564
+
565
+ <div class="method-heading">
566
+ <a href="#M000049" class="method-signature">
567
+ <span class="method-name">render_nothing</span><span class="method-args">(status)</span>
568
+ </a>
569
+ </div>
570
+
571
+ <div class="method-description">
572
+ <p><a class="source-toggle" href="#"
573
+ onclick="toggleCode('M000049-source');return false;">[Source]</a></p>
574
+ <div class="method-source-code" id="M000049-source">
575
+ <pre>
576
+ <span class="ruby-comment cmt"># File lib/merb/merb_controller.rb, line 160</span>
577
+ 160: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">render_nothing</span>(<span class="ruby-identifier">status</span>)
578
+ 161: <span class="ruby-ivar">@status</span> = <span class="ruby-identifier">status</span>
579
+ 162: <span class="ruby-keyword kw">return</span> <span class="ruby-value str">''</span>
580
+ 163: <span class="ruby-keyword kw">end</span>
581
+ </pre>
582
+ </div>
583
+ </div>
584
+ </div>
585
+
586
+ <div id="method-M000036" class="method-detail">
587
+ <a name="M000036"></a>
588
+
589
+ <div class="method-heading">
590
+ <a href="#M000036" class="method-signature">
411
591
  <span class="method-name">send_file</span><span class="method-args">(file)</span>
412
592
  </a>
413
593
  </div>
414
594
 
415
595
  <div class="method-description">
596
+ <p>
597
+ pass in a path to a file and this will set the right <a
598
+ href="Controller.html#M000039">headers</a> and let mongrel do its thang and
599
+ serve the static file directly.
600
+ </p>
416
601
  <p><a class="source-toggle" href="#"
417
- onclick="toggleCode('M000037-source');return false;">[Source]</a></p>
418
- <div class="method-source-code" id="M000037-source">
602
+ onclick="toggleCode('M000036-source');return false;">[Source]</a></p>
603
+ <div class="method-source-code" id="M000036-source">
419
604
  <pre>
420
- <span class="ruby-comment cmt"># File lib/merb/merb_controller.rb, line 68</span>
421
- 68: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">send_file</span>(<span class="ruby-identifier">file</span>)
422
- 69: <span class="ruby-identifier">headers</span>[<span class="ruby-value str">'X-SENDFILE'</span>] = <span class="ruby-identifier">file</span>
423
- 70: <span class="ruby-keyword kw">return</span>
424
- 71: <span class="ruby-keyword kw">end</span>
605
+ <span class="ruby-comment cmt"># File lib/merb/merb_controller.rb, line 79</span>
606
+ 79: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">send_file</span>(<span class="ruby-identifier">file</span>)
607
+ 80: <span class="ruby-identifier">headers</span>[<span class="ruby-value str">'X-SENDFILE'</span>] = <span class="ruby-identifier">file</span>
608
+ 81: <span class="ruby-keyword kw">return</span>
609
+ 82: <span class="ruby-keyword kw">end</span>
425
610
  </pre>
426
611
  </div>
427
612
  </div>
428
613
  </div>
429
614
 
430
- <div id="method-M000044" class="method-detail">
431
- <a name="M000044"></a>
615
+ <div id="method-M000045" class="method-detail">
616
+ <a name="M000045"></a>
432
617
 
433
618
  <div class="method-heading">
434
- <a href="#M000044" class="method-signature">
619
+ <a href="#M000045" class="method-signature">
435
620
  <span class="method-name">template_dir</span><span class="method-args">(loc)</span>
436
621
  </a>
437
622
  </div>
438
623
 
439
624
  <div class="method-description">
625
+ <p>
626
+ shortcut to a template path based on name.
627
+ </p>
440
628
  <p><a class="source-toggle" href="#"
441
- onclick="toggleCode('M000044-source');return false;">[Source]</a></p>
442
- <div class="method-source-code" id="M000044-source">
629
+ onclick="toggleCode('M000045-source');return false;">[Source]</a></p>
630
+ <div class="method-source-code" id="M000045-source">
443
631
  <pre>
444
- <span class="ruby-comment cmt"># File lib/merb/merb_controller.rb, line 103</span>
445
- 103: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">template_dir</span>(<span class="ruby-identifier">loc</span>)
446
- 104: <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-constant">Merb</span><span class="ruby-operator">::</span><span class="ruby-constant">Server</span>.<span class="ruby-identifier">config</span>[<span class="ruby-identifier">:merb_root</span>] <span class="ruby-operator">+</span> <span class="ruby-node">&quot;/dist/app/views/#{loc}&quot;</span>)
447
- 105: <span class="ruby-keyword kw">end</span>
632
+ <span class="ruby-comment cmt"># File lib/merb/merb_controller.rb, line 133</span>
633
+ 133: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">template_dir</span>(<span class="ruby-identifier">loc</span>)
634
+ 134: <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-constant">Merb</span><span class="ruby-operator">::</span><span class="ruby-constant">Server</span>.<span class="ruby-identifier">config</span>[<span class="ruby-identifier">:merb_root</span>] <span class="ruby-operator">+</span> <span class="ruby-node">&quot;/dist/app/views/#{loc}&quot;</span>)
635
+ 135: <span class="ruby-keyword kw">end</span>
448
636
  </pre>
449
637
  </div>
450
638
  </div>
451
639
  </div>
452
640
 
453
- <div id="method-M000043" class="method-detail">
454
- <a name="M000043"></a>
641
+ <div id="method-M000042" class="method-detail">
642
+ <a name="M000042"></a>
455
643
 
456
644
  <div class="method-heading">
457
- <a href="#M000043" class="method-signature">
645
+ <a href="#M000042" class="method-signature">
458
646
  <span class="method-name">unescape</span><span class="method-args">(s)</span>
459
647
  </a>
460
648
  </div>
461
649
 
462
650
  <div class="method-description">
651
+ <p>
652
+ does url unescaping
653
+ </p>
463
654
  <p><a class="source-toggle" href="#"
464
- onclick="toggleCode('M000043-source');return false;">[Source]</a></p>
465
- <div class="method-source-code" id="M000043-source">
655
+ onclick="toggleCode('M000042-source');return false;">[Source]</a></p>
656
+ <div class="method-source-code" id="M000042-source">
466
657
  <pre>
467
- <span class="ruby-comment cmt"># File lib/merb/merb_controller.rb, line 98</span>
468
- 98: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">unescape</span>(<span class="ruby-identifier">s</span>)
469
- 99: <span class="ruby-constant">Mongrel</span><span class="ruby-operator">::</span><span class="ruby-constant">HttpRequest</span>.<span class="ruby-identifier">unescape</span>(<span class="ruby-identifier">s</span>)
470
- 100: <span class="ruby-keyword kw">end</span>
658
+ <span class="ruby-comment cmt"># File lib/merb/merb_controller.rb, line 122</span>
659
+ 122: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">unescape</span>(<span class="ruby-identifier">s</span>)
660
+ 123: <span class="ruby-constant">Mongrel</span><span class="ruby-operator">::</span><span class="ruby-constant">HttpRequest</span>.<span class="ruby-identifier">unescape</span>(<span class="ruby-identifier">s</span>)
661
+ 124: <span class="ruby-keyword kw">end</span>
471
662
  </pre>
472
663
  </div>
473
664
  </div>