renee 0.3.11 → 0.4.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (231) hide show
  1. data/Gemfile +17 -0
  2. data/Gemfile-renee +8 -0
  3. data/Gemfile-renee-core +8 -0
  4. data/Gemfile-renee-render +9 -0
  5. data/Gemfile-renee-session +9 -0
  6. data/Gemfile-renee-url-generation +8 -0
  7. data/MIT-LICENSE.txt +7 -0
  8. data/README-renee-core.md +242 -0
  9. data/README-renee-render.md +38 -0
  10. data/README-renee-session.md +3 -0
  11. data/README-renee-url-generation.md +3 -0
  12. data/README.md +131 -6
  13. data/Rakefile +109 -9
  14. data/TODO.txt +45 -0
  15. data/config.ru +26 -0
  16. data/examples/blog/blog.rb +3 -1
  17. data/examples/blog/config.ru +24 -19
  18. data/examples/blog/views/edit.erb +10 -1
  19. data/examples/blog/views/show.erb +5 -0
  20. data/lib/renee.rb +11 -4
  21. data/lib/renee/core.rb +98 -0
  22. data/lib/renee/core/chaining.rb +66 -0
  23. data/lib/renee/core/env_accessors.rb +72 -0
  24. data/lib/renee/core/exceptions.rb +15 -0
  25. data/lib/renee/core/matcher.rb +61 -0
  26. data/lib/renee/core/plugins.rb +31 -0
  27. data/lib/renee/core/rack_interaction.rb +50 -0
  28. data/lib/renee/core/request_context.rb +56 -0
  29. data/lib/renee/core/responding.rb +112 -0
  30. data/lib/renee/core/response.rb +78 -0
  31. data/lib/renee/core/routing.rb +319 -0
  32. data/lib/renee/core/transform.rb +18 -0
  33. data/lib/renee/render.rb +221 -0
  34. data/lib/renee/session.rb +50 -0
  35. data/lib/renee/url_generation.rb +117 -0
  36. data/lib/renee/util.rb +7 -0
  37. data/lib/renee/version.rb +2 -4
  38. data/plan.txt +19 -0
  39. data/renee-core.gemspec +26 -0
  40. data/renee-render.gemspec +30 -0
  41. data/renee-session.gemspec +28 -0
  42. data/renee-url-generation.gemspec +24 -0
  43. data/renee.gemspec +5 -6
  44. data/site/MIT-LICENSE.txt +7 -0
  45. data/site/public/css/app.css +75 -0
  46. data/site/public/docs/renee-core/Renee.html +208 -0
  47. data/site/public/docs/renee-core/Renee/Core.html +366 -0
  48. data/site/public/docs/renee-core/Renee/Core/Chaining.html +192 -0
  49. data/site/public/docs/renee-core/Renee/Core/ClassMethods.html +725 -0
  50. data/site/public/docs/renee-core/Renee/Core/ClientError.html +317 -0
  51. data/site/public/docs/renee-core/Renee/Core/EnvAccessors.html +152 -0
  52. data/site/public/docs/renee-core/Renee/Core/EnvAccessors/ClassMethods.html +354 -0
  53. data/site/public/docs/renee-core/Renee/Core/Matcher.html +675 -0
  54. data/site/public/docs/renee-core/Renee/Core/Plugins.html +475 -0
  55. data/site/public/docs/renee-core/Renee/Core/RackInteraction.html +488 -0
  56. data/site/public/docs/renee-core/Renee/Core/RequestContext.html +511 -0
  57. data/site/public/docs/renee-core/Renee/Core/Responding.html +877 -0
  58. data/site/public/docs/renee-core/Renee/Core/Response.html +691 -0
  59. data/site/public/docs/renee-core/Renee/Core/Routing.html +1589 -0
  60. data/site/public/docs/renee-core/Renee/Core/Transform.html +249 -0
  61. data/site/public/docs/renee-core/Renee/Core/URLGeneration.html +597 -0
  62. data/site/public/docs/renee-core/_index.html +244 -0
  63. data/site/public/docs/renee-core/class_list.html +47 -0
  64. data/site/public/docs/renee-core/css/common.css +1 -0
  65. data/site/public/docs/renee-core/css/full_list.css +55 -0
  66. data/site/public/docs/renee-core/css/style.css +322 -0
  67. data/site/public/docs/renee-core/file.README-renee-core.html +341 -0
  68. data/site/public/docs/renee-core/file.README.html +212 -0
  69. data/site/public/docs/renee-core/file_list.html +49 -0
  70. data/site/public/docs/renee-core/frames.html +13 -0
  71. data/site/public/docs/renee-core/index.html +341 -0
  72. data/site/public/docs/renee-core/js/app.js +205 -0
  73. data/site/public/docs/renee-core/js/full_list.js +167 -0
  74. data/site/public/docs/renee-core/js/jquery.js +16 -0
  75. data/site/public/docs/renee-core/method_list.html +590 -0
  76. data/site/public/docs/renee-core/top-level-namespace.html +103 -0
  77. data/site/public/docs/renee-render/Renee.html +116 -0
  78. data/site/public/docs/renee-render/Renee/Core.html +346 -0
  79. data/site/public/docs/renee-render/Renee/Core/Chaining.html +125 -0
  80. data/site/public/docs/renee-render/Renee/Core/ClassMethods.html +620 -0
  81. data/site/public/docs/renee-render/Renee/Core/ClientError.html +317 -0
  82. data/site/public/docs/renee-render/Renee/Core/EnvAccessors.html +152 -0
  83. data/site/public/docs/renee-render/Renee/Core/EnvAccessors/ClassMethods.html +354 -0
  84. data/site/public/docs/renee-render/Renee/Core/Matcher.html +675 -0
  85. data/site/public/docs/renee-render/Renee/Core/RackInteraction.html +488 -0
  86. data/site/public/docs/renee-render/Renee/Core/RequestContext.html +421 -0
  87. data/site/public/docs/renee-render/Renee/Core/Responding.html +873 -0
  88. data/site/public/docs/renee-render/Renee/Core/Response.html +691 -0
  89. data/site/public/docs/renee-render/Renee/Core/Routing.html +1682 -0
  90. data/site/public/docs/renee-render/Renee/Core/Transform.html +249 -0
  91. data/site/public/docs/renee-render/Renee/Core/URLGeneration.html +597 -0
  92. data/site/public/docs/renee-render/Renee/Render.html +873 -0
  93. data/site/public/docs/renee-render/Renee/Render/ClassMethods.html +382 -0
  94. data/site/public/docs/renee-render/Renee/Render/TemplateNotFound.html +126 -0
  95. data/site/public/docs/renee-render/_index.html +143 -0
  96. data/site/public/docs/renee-render/class_list.html +47 -0
  97. data/site/public/docs/renee-render/css/common.css +1 -0
  98. data/site/public/docs/renee-render/css/full_list.css +55 -0
  99. data/site/public/docs/renee-render/css/style.css +322 -0
  100. data/site/public/docs/renee-render/file.README-renee-render.html +104 -0
  101. data/site/public/docs/renee-render/file.README.html +212 -0
  102. data/site/public/docs/renee-render/file_list.html +49 -0
  103. data/site/public/docs/renee-render/frames.html +13 -0
  104. data/site/public/docs/renee-render/index.html +104 -0
  105. data/site/public/docs/renee-render/js/app.js +205 -0
  106. data/site/public/docs/renee-render/js/full_list.js +167 -0
  107. data/site/public/docs/renee-render/js/jquery.js +16 -0
  108. data/site/public/docs/renee-render/method_list.html +110 -0
  109. data/site/public/docs/renee-render/top-level-namespace.html +103 -0
  110. data/site/public/docs/renee-session/Renee.html +106 -0
  111. data/site/public/docs/renee-session/Renee/Session.html +173 -0
  112. data/site/public/docs/renee-session/Renee/Session/ClassMethods.html +470 -0
  113. data/site/public/docs/renee-session/_index.html +136 -0
  114. data/site/public/docs/renee-session/class_list.html +47 -0
  115. data/site/public/docs/renee-session/css/common.css +1 -0
  116. data/site/public/docs/renee-session/css/full_list.css +55 -0
  117. data/site/public/docs/renee-session/css/style.css +322 -0
  118. data/site/public/docs/renee-session/file.README-renee-core.html +341 -0
  119. data/site/public/docs/renee-session/file.README-renee-session.html +69 -0
  120. data/site/public/docs/renee-session/file_list.html +49 -0
  121. data/site/public/docs/renee-session/frames.html +13 -0
  122. data/site/public/docs/renee-session/index.html +69 -0
  123. data/site/public/docs/renee-session/js/app.js +205 -0
  124. data/site/public/docs/renee-session/js/full_list.js +167 -0
  125. data/site/public/docs/renee-session/js/jquery.js +16 -0
  126. data/site/public/docs/renee-session/method_list.html +102 -0
  127. data/site/public/docs/renee-session/top-level-namespace.html +103 -0
  128. data/site/public/docs/renee-url-generation/Renee.html +208 -0
  129. data/site/public/docs/renee-url-generation/Renee/Core.html +366 -0
  130. data/site/public/docs/renee-url-generation/Renee/Core/Chaining.html +192 -0
  131. data/site/public/docs/renee-url-generation/Renee/Core/ClassMethods.html +725 -0
  132. data/site/public/docs/renee-url-generation/Renee/Core/ClientError.html +317 -0
  133. data/site/public/docs/renee-url-generation/Renee/Core/EnvAccessors.html +152 -0
  134. data/site/public/docs/renee-url-generation/Renee/Core/EnvAccessors/ClassMethods.html +354 -0
  135. data/site/public/docs/renee-url-generation/Renee/Core/Matcher.html +675 -0
  136. data/site/public/docs/renee-url-generation/Renee/Core/Plugins.html +475 -0
  137. data/site/public/docs/renee-url-generation/Renee/Core/RackInteraction.html +488 -0
  138. data/site/public/docs/renee-url-generation/Renee/Core/RequestContext.html +511 -0
  139. data/site/public/docs/renee-url-generation/Renee/Core/Responding.html +877 -0
  140. data/site/public/docs/renee-url-generation/Renee/Core/Response.html +691 -0
  141. data/site/public/docs/renee-url-generation/Renee/Core/Routing.html +1589 -0
  142. data/site/public/docs/renee-url-generation/Renee/Core/Transform.html +249 -0
  143. data/site/public/docs/renee-url-generation/_index.html +244 -0
  144. data/site/public/docs/renee-url-generation/class_list.html +47 -0
  145. data/site/public/docs/renee-url-generation/css/common.css +1 -0
  146. data/site/public/docs/renee-url-generation/css/full_list.css +55 -0
  147. data/site/public/docs/renee-url-generation/css/style.css +322 -0
  148. data/site/public/docs/renee-url-generation/file.README-renee-url-generation.html +69 -0
  149. data/site/public/docs/renee-url-generation/file_list.html +49 -0
  150. data/site/public/docs/renee-url-generation/frames.html +13 -0
  151. data/site/public/docs/renee-url-generation/index.html +69 -0
  152. data/site/public/docs/renee-url-generation/js/app.js +205 -0
  153. data/site/public/docs/renee-url-generation/js/full_list.js +167 -0
  154. data/site/public/docs/renee-url-generation/js/jquery.js +16 -0
  155. data/site/public/docs/renee-url-generation/method_list.html +590 -0
  156. data/site/public/docs/renee-url-generation/top-level-namespace.html +103 -0
  157. data/site/public/docs/renee/Renee.html +232 -0
  158. data/site/public/docs/renee/Renee/Application.html +367 -0
  159. data/site/public/docs/renee/Renee/Core.html +370 -0
  160. data/site/public/docs/renee/Renee/Core/Chaining.html +192 -0
  161. data/site/public/docs/renee/Renee/Core/ClassMethods.html +725 -0
  162. data/site/public/docs/renee/Renee/Core/ClientError.html +317 -0
  163. data/site/public/docs/renee/Renee/Core/EnvAccessors.html +152 -0
  164. data/site/public/docs/renee/Renee/Core/EnvAccessors/ClassMethods.html +354 -0
  165. data/site/public/docs/renee/Renee/Core/Matcher.html +675 -0
  166. data/site/public/docs/renee/Renee/Core/Plugins.html +475 -0
  167. data/site/public/docs/renee/Renee/Core/RackInteraction.html +488 -0
  168. data/site/public/docs/renee/Renee/Core/RequestContext.html +511 -0
  169. data/site/public/docs/renee/Renee/Core/Responding.html +877 -0
  170. data/site/public/docs/renee/Renee/Core/Response.html +691 -0
  171. data/site/public/docs/renee/Renee/Core/Routing.html +1589 -0
  172. data/site/public/docs/renee/Renee/Core/Transform.html +249 -0
  173. data/site/public/docs/renee/Renee/Core/URLGeneration.html +597 -0
  174. data/site/public/docs/renee/Renee/Render.html +877 -0
  175. data/site/public/docs/renee/Renee/Render/ClassMethods.html +382 -0
  176. data/site/public/docs/renee/Renee/Render/TemplateNotFound.html +126 -0
  177. data/site/public/docs/renee/Renee/Session.html +177 -0
  178. data/site/public/docs/renee/Renee/Session/ClassMethods.html +470 -0
  179. data/site/public/docs/renee/Renee/URLGeneration.html +142 -0
  180. data/site/public/docs/renee/Renee/URLGeneration/ClassMethods.html +593 -0
  181. data/site/public/docs/renee/Renee/Util.html +163 -0
  182. data/site/public/docs/renee/_index.html +336 -0
  183. data/site/public/docs/renee/class_list.html +47 -0
  184. data/site/public/docs/renee/css/common.css +1 -0
  185. data/site/public/docs/renee/css/full_list.css +55 -0
  186. data/site/public/docs/renee/css/style.css +322 -0
  187. data/site/public/docs/renee/file.README.html +212 -0
  188. data/site/public/docs/renee/file_list.html +49 -0
  189. data/site/public/docs/renee/frames.html +13 -0
  190. data/site/public/docs/renee/index.html +212 -0
  191. data/site/public/docs/renee/js/app.js +205 -0
  192. data/site/public/docs/renee/js/full_list.js +167 -0
  193. data/site/public/docs/renee/js/jquery.js +16 -0
  194. data/site/public/docs/renee/method_list.html +758 -0
  195. data/site/public/docs/renee/top-level-namespace.html +202 -0
  196. data/site/public/img/favicon.ico +0 -0
  197. data/site/public/img/reneeclean.png +0 -0
  198. data/site/public/img/russiangithub.png +0 -0
  199. data/site/public/img/stoneposter.png +0 -0
  200. data/site/public/img/vospit.jpeg +0 -0
  201. data/site/views/chaining.md +32 -0
  202. data/site/views/index.md +219 -0
  203. data/site/views/layouts/app.haml +16 -0
  204. data/site/views/rack-integration.md +51 -0
  205. data/site/views/responding.md +103 -0
  206. data/site/views/route-generation.md +82 -0
  207. data/site/views/routing.md +261 -0
  208. data/site/views/settings.md +19 -0
  209. data/site/views/team-renee.md +13 -0
  210. data/site/views/tutorial.md +57 -0
  211. data/site/views/variable-types.md +57 -0
  212. data/test.watchr +61 -0
  213. data/test/renee-core/chaining_test.rb +33 -0
  214. data/test/renee-core/env_accessors_test.rb +43 -0
  215. data/test/renee-core/include_test.rb +14 -0
  216. data/test/renee-core/request_context_test.rb +70 -0
  217. data/test/renee-core/responding_test.rb +128 -0
  218. data/test/renee-core/routing_test.rb +443 -0
  219. data/test/renee-core/test_helper.rb +4 -0
  220. data/test/renee-core/variable_type_test.rb +57 -0
  221. data/test/renee-render/render_test.rb +162 -0
  222. data/test/renee-render/test_helper.rb +9 -0
  223. data/test/renee-session/session_test.rb +31 -0
  224. data/test/renee-session/test_helper.rb +9 -0
  225. data/test/renee-url-generation/test_helper.rb +10 -0
  226. data/test/renee-url-generation/url_generation_test.rb +63 -0
  227. data/test/{blog_test.rb → renee/blog_test.rb} +10 -5
  228. data/test/renee/test_helper.rb +56 -0
  229. data/test/test_helper.rb +23 -10
  230. metadata +333 -156
  231. data/.yardopts +0 -6
@@ -0,0 +1,341 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
6
+ <title>
7
+ File: README-renee-core
8
+
9
+ &mdash; Documentation by YARD 0.7.4
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="css/style.css" type="text/css" media="screen" charset="utf-8" />
14
+
15
+ <link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
16
+
17
+ <script type="text/javascript" charset="utf-8">
18
+ relpath = '';
19
+ if (relpath != '') relpath += '/';
20
+ </script>
21
+
22
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
23
+
24
+ <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
25
+
26
+
27
+ </head>
28
+ <body>
29
+ <script type="text/javascript" charset="utf-8">
30
+ if (window.top.frames.main) document.body.className = 'frames';
31
+ </script>
32
+
33
+ <div id="header">
34
+ <div id="menu">
35
+
36
+ <a href="_index.html" title="Index">Index</a> &raquo;
37
+ <span class="title">File: README-renee-core</span>
38
+
39
+
40
+ <div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
41
+ </div>
42
+
43
+ <div id="search">
44
+
45
+ <a id="class_list_link" href="#">Class List</a>
46
+
47
+ <a id="method_list_link" href="#">Method List</a>
48
+
49
+ <a id="file_list_link" href="#">File List</a>
50
+
51
+ </div>
52
+ <div class="clear"></div>
53
+ </div>
54
+
55
+ <iframe id="search_frame"></iframe>
56
+
57
+ <div id="content"><div id='filecontents'><h1>Renee Core</h1>
58
+
59
+ <h2>Routing</h2>
60
+
61
+ <p>Routing in <code>Renee</code> is different from any web framework you are likely to have used in the past. The syntax is most familiar to Sinatra but allows
62
+ for far more flexibility and freedom in the way that routes and actions are defined. In a Renee, routes are defined using the <code>path</code>, <code>var</code>, <code>query_string</code>, <code>extension</code>, <code>remainder</code> and request methods.</p>
63
+
64
+ <p><strong>Request Methods</strong></p>
65
+
66
+ <p>The bread and butter of Renee are the request verbs reminiscent of Sinatra:</p>
67
+
68
+ <p><code>ruby
69
+ run Renee.core {
70
+ get { halt "a get!" }
71
+ post { halt "a post!" }
72
+ put { halt "a put!" }
73
+ delete { halt "a delete!" }
74
+ }
75
+ </code></p>
76
+
77
+ <p>These will declare the response to "/" for each of the common request types. Notice the use of the request method to
78
+ specify the http verb and the use of <code>halt</code> inside the block to send back the body of the response.</p>
79
+
80
+ <p><strong>Path</strong></p>
81
+
82
+ <p>Path is how Renee describes the basic uri path for a route:</p>
83
+
84
+ <p><code>ruby
85
+ run Renee.core {
86
+ path('blog') { ... }
87
+ }
88
+ </code></p>
89
+
90
+ <p>All declarations inside that block will start with <code>/blog</code>. Paths can also be nested within one another:</p>
91
+
92
+ <p>```ruby
93
+ run Renee.core {
94
+ path('blog') {</p>
95
+
96
+ <pre class="code"><span class='id identifier rubyid_path'>path</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>foo</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='lbrace'>{</span> <span class='id identifier rubyid_get'>get</span> <span class='lbrace'>{</span> <span class='id identifier rubyid_halt'>halt</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>path is /blog/foo</span><span class='tstring_end'>&quot;</span></span> <span class='rbrace'>}</span> <span class='rbrace'>}</span>
97
+ </pre>
98
+
99
+ <p> }
100
+ }
101
+ ```</p>
102
+
103
+ <p>You can also use <code>exact_path</code> for more precise path matching and/or <code>part</code> which doesn't look for leading slashes.</p>
104
+
105
+ <p><strong>Query String</strong></p>
106
+
107
+ <p>In addition to defining paths, you may find yourself wanting to describe the state of the query string for a request within the path:</p>
108
+
109
+ <p>```ruby
110
+ path 'foo' do
111
+ query_string 'bar' do</p>
112
+
113
+ <pre class="code"><span class='id identifier rubyid_get'>get</span> <span class='lbrace'>{</span> <span class='id identifier rubyid_halt'>halt</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>BAR!</span><span class='tstring_end'>'</span></span> <span class='rbrace'>}</span>
114
+ </pre>
115
+
116
+ <p> end</p>
117
+
118
+ <p> query_string 'baz' do</p>
119
+
120
+ <pre class="code"><span class='id identifier rubyid_get'>get</span> <span class='lbrace'>{</span> <span class='id identifier rubyid_halt'>halt</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>BAZ!</span><span class='tstring_end'>'</span></span> <span class='rbrace'>}</span>
121
+ </pre>
122
+
123
+ <p> end
124
+ end
125
+ ```</p>
126
+
127
+ <p>This will respond to <code>/foo?bar</code> with "BAR!" and <code>/foo?baz</code> with "BAZ!". You can also specify query_string in a variety of other ways:</p>
128
+
129
+ <p>```ruby</p>
130
+
131
+ <h1>Check key and value of query param</h1>
132
+
133
+ <p>query_string 'foo=bar' do
134
+ post { halt [200,{},'foo'] }
135
+ end</p>
136
+
137
+ <h1>Declare query params as a hash</h1>
138
+
139
+ <p>query :foo => "bar" do
140
+ halt 200
141
+ end</p>
142
+
143
+ <h1>Switch based on a query parameter</h1>
144
+
145
+ <p>query :foo do |var|
146
+ case var
147
+ when 'bar' then halt 200
148
+ when 'bar2' then halt 500
149
+ end
150
+ end
151
+ ```</p>
152
+
153
+ <p><strong>Variables</strong></p>
154
+
155
+ <p>In Renee, you specify parameters for your request as explicit variables. Variables are declared like this:</p>
156
+
157
+ <p><code>ruby
158
+ path('blog') {
159
+ var { |id| get { halt "path is /blog/#{id}" } }
160
+ }
161
+ </code></p>
162
+
163
+ <p>You can access the variables (passed into the request) using the local variables yielded to the block. Variables are a powerful
164
+ way to express expected parameters for a given set of requests. You can specify variables that match a regex:</p>
165
+
166
+ <p><code>ruby
167
+ path('blog') {
168
+ var(/\d+/) { |id| get { halt "path is /blog/#{id}" } }
169
+ }
170
+ </code></p>
171
+
172
+ <p>and even explicitly cast your variable types:</p>
173
+
174
+ <p>```ruby
175
+ path('blog') {
176
+ var :integer do |id|</p>
177
+
178
+ <pre class="code"><span class='id identifier rubyid_get'>get</span> <span class='lbrace'>{</span> <span class='id identifier rubyid_halt'>halt</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>path is /blog/</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_id'>id</span><span class='rbrace'>}</span><span class='tstring_content'> and id is an integer</span><span class='tstring_end'>&quot;</span></span> <span class='rbrace'>}</span>
179
+ </pre>
180
+
181
+ <p> end
182
+ end
183
+ ```</p>
184
+
185
+ <p><strong>Extensions</strong></p>
186
+
187
+ <p>You can also use <code>extension</code> as a way to define formats:</p>
188
+
189
+ <p>```ruby
190
+ path '/test' do
191
+ extension 'html' do</p>
192
+
193
+ <pre class="code"><span class='id identifier rubyid_halt'>halt</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>html</span><span class='tstring_end'>'</span></span>
194
+ </pre>
195
+
196
+ <p> end
197
+ extension 'json' do</p>
198
+
199
+ <pre class="code"><span class='id identifier rubyid_halt'>halt</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>json</span><span class='tstring_end'>'</span></span>
200
+ </pre>
201
+
202
+ <p> end
203
+ end
204
+ ```</p>
205
+
206
+ <p>This will have <code>test.html</code> respond with 'html' and <code>test.json</code> respond with 'json'.</p>
207
+
208
+ <p><strong>Remainder</strong></p>
209
+
210
+ <p>In the event that no route has been matched, the <code>remainder</code> keyword makes defining the else case rather easy:</p>
211
+
212
+ <p>```ruby
213
+ path 'foo' do
214
+ path 'bar' do</p>
215
+
216
+ <pre class="code"><span class='id identifier rubyid_halt'>halt</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>BAR!</span><span class='tstring_end'>&quot;</span></span>
217
+ </pre>
218
+
219
+ <p> end</p>
220
+
221
+ <p> remainder do |rest|</p>
222
+
223
+ <pre class="code"><span class='id identifier rubyid_halt'>halt</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Rest was </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_rest'>rest</span><span class='rbrace'>}</span><span class='tstring_end'>&quot;</span></span>
224
+ </pre>
225
+
226
+ <p> end
227
+ end
228
+ ```</p>
229
+
230
+ <p>Notice this allows you to handle the cases within a particular route scope and manage them based on the "rest" of the uri yielded in the <code>remainder</code> block. You
231
+ can handle different remainders in all the different path blocks.</p>
232
+
233
+ <p><strong>Named Routes</strong></p>
234
+
235
+ <p>Once you have defined your routes, you can then "register" a particular path mapping that to a symbol. This is useful for referencing routes without
236
+ having to specify the entire path:</p>
237
+
238
+ <p><code>ruby
239
+ run Renee.core {
240
+ register(:test, '/test/time')
241
+ register(:test_var, '/test/:id')
242
+ }
243
+ </code></p>
244
+
245
+ <p>You can then access these using the <code>path</code> method in a route or template:</p>
246
+
247
+ <p><code>ruby
248
+ path(:test) # =&gt; '/test/time'
249
+ path(:test_var, :id =&gt; 123) # =&gt; '/test/123'
250
+ </code></p>
251
+
252
+ <p>Using named routes makes referencing and modifying routes within an application much simpler to manage.</p>
253
+
254
+ <h2>Responding</h2>
255
+
256
+ <p>Responding to a request within a route can be managed with the <code>respond</code>, <code>halt</code>, <code>redirect</code> commands:</p>
257
+
258
+ <p><strong>Respond</strong></p>
259
+
260
+ <p>The <code>respond</code> command makes returning a rack response very explicit, you can respond as if you were constructing a Rack::Response</p>
261
+
262
+ <p><code>ruby
263
+ run Renee {
264
+ get { respond!("hello!", 403, "foo" =&gt; "bar") }
265
+ }
266
+ </code></p>
267
+
268
+ <p>or use the block DSL for convenience:</p>
269
+
270
+ <p><code>ruby
271
+ run Renee {
272
+ get { respond! { status 403; headers :foo =&gt; "bar"; body "hello!" } }
273
+ }
274
+ </code></p>
275
+
276
+ <p><strong>Halt</strong></p>
277
+
278
+ <p>Halting is the easiest way to render data within a route:</p>
279
+
280
+ <p><code>ruby
281
+ run Renee.core {
282
+ get { halt 'easy' }
283
+ }
284
+ </code></p>
285
+
286
+ <p>This will return a 200 status code and 'easy' as the body. You can also specify status code and header explicitly in the halt response:</p>
287
+
288
+ <p><code>ruby
289
+ get { halt [200, {}, 'body'] }
290
+ </code></p>
291
+
292
+ <p>This will set the status code to 200, pass no headers and return 'body'. You can also use several variations of halt:</p>
293
+
294
+ <p>```ruby</p>
295
+
296
+ <h1>Return just status code</h1>
297
+
298
+ <p>halt 200</p>
299
+
300
+ <h1>Return status with symbol</h1>
301
+
302
+ <p>halt :not_found</p>
303
+
304
+ <h1>Return 200 with body</h1>
305
+
306
+ <p>halt "hello!"</p>
307
+
308
+ <h1>Return 500 with body</h1>
309
+
310
+ <p>halt 500, "hello!"
311
+ ```</p>
312
+
313
+ <p>Halt is the most straightforward way to control the response for a request.</p>
314
+
315
+ <p><strong>Redirect</strong></p>
316
+
317
+ <p>A redirect is a common action within a web route and can be achieved with the convenience method <code>redirect</code> command:</p>
318
+
319
+ <p><code>ruby
320
+ get {
321
+ halt redirect('/hello')
322
+ }
323
+ </code></p>
324
+
325
+ <p>You can also specify the status code for the redirect:</p>
326
+
327
+ <p><code>ruby
328
+ get {
329
+ halt redirect('/hello', 303)
330
+ }
331
+ </code></p>
332
+ </div></div>
333
+
334
+ <div id="footer">
335
+ Generated on Sun Jan 1 16:00:19 2012 by
336
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
337
+ 0.7.4 (ruby-1.9.2).
338
+ </div>
339
+
340
+ </body>
341
+ </html>
@@ -0,0 +1,69 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
6
+ <title>
7
+ File: README-renee-session
8
+
9
+ &mdash; Documentation by YARD 0.7.4
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="css/style.css" type="text/css" media="screen" charset="utf-8" />
14
+
15
+ <link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
16
+
17
+ <script type="text/javascript" charset="utf-8">
18
+ relpath = '';
19
+ if (relpath != '') relpath += '/';
20
+ </script>
21
+
22
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
23
+
24
+ <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
25
+
26
+
27
+ </head>
28
+ <body>
29
+ <script type="text/javascript" charset="utf-8">
30
+ if (window.top.frames.main) document.body.className = 'frames';
31
+ </script>
32
+
33
+ <div id="header">
34
+ <div id="menu">
35
+
36
+ <a href="_index.html" title="Index">Index</a> &raquo;
37
+ <span class="title">File: README-renee-session</span>
38
+
39
+
40
+ <div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
41
+ </div>
42
+
43
+ <div id="search">
44
+
45
+ <a id="class_list_link" href="#">Class List</a>
46
+
47
+ <a id="method_list_link" href="#">Method List</a>
48
+
49
+ <a id="file_list_link" href="#">File List</a>
50
+
51
+ </div>
52
+ <div class="clear"></div>
53
+ </div>
54
+
55
+ <iframe id="search_frame"></iframe>
56
+
57
+ <div id="content"><div id='filecontents'><h1>Renee Session</h1>
58
+
59
+ <p>Defines methods for accessing the session.</p>
60
+ </div></div>
61
+
62
+ <div id="footer">
63
+ Generated on Mon Jan 23 11:10:32 2012 by
64
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
65
+ 0.7.4 (ruby-1.9.2).
66
+ </div>
67
+
68
+ </body>
69
+ </html>
@@ -0,0 +1,49 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html>
4
+ <head>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
+
7
+ <link rel="stylesheet" href="css/full_list.css" type="text/css" media="screen" charset="utf-8" />
8
+
9
+ <link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
10
+
11
+
12
+
13
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
14
+
15
+ <script type="text/javascript" charset="utf-8" src="js/full_list.js"></script>
16
+
17
+
18
+ <base id="base_target" target="_parent" />
19
+ </head>
20
+ <body>
21
+ <script type="text/javascript" charset="utf-8">
22
+ if (window.top.frames.main) {
23
+ document.getElementById('base_target').target = 'main';
24
+ document.body.className = 'frames';
25
+ }
26
+ </script>
27
+ <div id="content">
28
+ <h1 id="full_list_header">File List</h1>
29
+ <div id="nav">
30
+
31
+ <a target="_self" href="class_list.html">Classes</a>
32
+
33
+ <a target="_self" href="method_list.html">Methods</a>
34
+
35
+ <a target="_self" href="file_list.html">Files</a>
36
+
37
+ </div>
38
+ <div id="search">Search: <input type="text" /></div>
39
+
40
+ <ul id="full_list" class="files">
41
+
42
+
43
+ <li class="r1"><a href="index.html" title="README-renee-session">README-renee-session</a></li>
44
+
45
+
46
+ </ul>
47
+ </div>
48
+ </body>
49
+ </html>