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.
- data/Gemfile +17 -0
- data/Gemfile-renee +8 -0
- data/Gemfile-renee-core +8 -0
- data/Gemfile-renee-render +9 -0
- data/Gemfile-renee-session +9 -0
- data/Gemfile-renee-url-generation +8 -0
- data/MIT-LICENSE.txt +7 -0
- data/README-renee-core.md +242 -0
- data/README-renee-render.md +38 -0
- data/README-renee-session.md +3 -0
- data/README-renee-url-generation.md +3 -0
- data/README.md +131 -6
- data/Rakefile +109 -9
- data/TODO.txt +45 -0
- data/config.ru +26 -0
- data/examples/blog/blog.rb +3 -1
- data/examples/blog/config.ru +24 -19
- data/examples/blog/views/edit.erb +10 -1
- data/examples/blog/views/show.erb +5 -0
- data/lib/renee.rb +11 -4
- data/lib/renee/core.rb +98 -0
- data/lib/renee/core/chaining.rb +66 -0
- data/lib/renee/core/env_accessors.rb +72 -0
- data/lib/renee/core/exceptions.rb +15 -0
- data/lib/renee/core/matcher.rb +61 -0
- data/lib/renee/core/plugins.rb +31 -0
- data/lib/renee/core/rack_interaction.rb +50 -0
- data/lib/renee/core/request_context.rb +56 -0
- data/lib/renee/core/responding.rb +112 -0
- data/lib/renee/core/response.rb +78 -0
- data/lib/renee/core/routing.rb +319 -0
- data/lib/renee/core/transform.rb +18 -0
- data/lib/renee/render.rb +221 -0
- data/lib/renee/session.rb +50 -0
- data/lib/renee/url_generation.rb +117 -0
- data/lib/renee/util.rb +7 -0
- data/lib/renee/version.rb +2 -4
- data/plan.txt +19 -0
- data/renee-core.gemspec +26 -0
- data/renee-render.gemspec +30 -0
- data/renee-session.gemspec +28 -0
- data/renee-url-generation.gemspec +24 -0
- data/renee.gemspec +5 -6
- data/site/MIT-LICENSE.txt +7 -0
- data/site/public/css/app.css +75 -0
- data/site/public/docs/renee-core/Renee.html +208 -0
- data/site/public/docs/renee-core/Renee/Core.html +366 -0
- data/site/public/docs/renee-core/Renee/Core/Chaining.html +192 -0
- data/site/public/docs/renee-core/Renee/Core/ClassMethods.html +725 -0
- data/site/public/docs/renee-core/Renee/Core/ClientError.html +317 -0
- data/site/public/docs/renee-core/Renee/Core/EnvAccessors.html +152 -0
- data/site/public/docs/renee-core/Renee/Core/EnvAccessors/ClassMethods.html +354 -0
- data/site/public/docs/renee-core/Renee/Core/Matcher.html +675 -0
- data/site/public/docs/renee-core/Renee/Core/Plugins.html +475 -0
- data/site/public/docs/renee-core/Renee/Core/RackInteraction.html +488 -0
- data/site/public/docs/renee-core/Renee/Core/RequestContext.html +511 -0
- data/site/public/docs/renee-core/Renee/Core/Responding.html +877 -0
- data/site/public/docs/renee-core/Renee/Core/Response.html +691 -0
- data/site/public/docs/renee-core/Renee/Core/Routing.html +1589 -0
- data/site/public/docs/renee-core/Renee/Core/Transform.html +249 -0
- data/site/public/docs/renee-core/Renee/Core/URLGeneration.html +597 -0
- data/site/public/docs/renee-core/_index.html +244 -0
- data/site/public/docs/renee-core/class_list.html +47 -0
- data/site/public/docs/renee-core/css/common.css +1 -0
- data/site/public/docs/renee-core/css/full_list.css +55 -0
- data/site/public/docs/renee-core/css/style.css +322 -0
- data/site/public/docs/renee-core/file.README-renee-core.html +341 -0
- data/site/public/docs/renee-core/file.README.html +212 -0
- data/site/public/docs/renee-core/file_list.html +49 -0
- data/site/public/docs/renee-core/frames.html +13 -0
- data/site/public/docs/renee-core/index.html +341 -0
- data/site/public/docs/renee-core/js/app.js +205 -0
- data/site/public/docs/renee-core/js/full_list.js +167 -0
- data/site/public/docs/renee-core/js/jquery.js +16 -0
- data/site/public/docs/renee-core/method_list.html +590 -0
- data/site/public/docs/renee-core/top-level-namespace.html +103 -0
- data/site/public/docs/renee-render/Renee.html +116 -0
- data/site/public/docs/renee-render/Renee/Core.html +346 -0
- data/site/public/docs/renee-render/Renee/Core/Chaining.html +125 -0
- data/site/public/docs/renee-render/Renee/Core/ClassMethods.html +620 -0
- data/site/public/docs/renee-render/Renee/Core/ClientError.html +317 -0
- data/site/public/docs/renee-render/Renee/Core/EnvAccessors.html +152 -0
- data/site/public/docs/renee-render/Renee/Core/EnvAccessors/ClassMethods.html +354 -0
- data/site/public/docs/renee-render/Renee/Core/Matcher.html +675 -0
- data/site/public/docs/renee-render/Renee/Core/RackInteraction.html +488 -0
- data/site/public/docs/renee-render/Renee/Core/RequestContext.html +421 -0
- data/site/public/docs/renee-render/Renee/Core/Responding.html +873 -0
- data/site/public/docs/renee-render/Renee/Core/Response.html +691 -0
- data/site/public/docs/renee-render/Renee/Core/Routing.html +1682 -0
- data/site/public/docs/renee-render/Renee/Core/Transform.html +249 -0
- data/site/public/docs/renee-render/Renee/Core/URLGeneration.html +597 -0
- data/site/public/docs/renee-render/Renee/Render.html +873 -0
- data/site/public/docs/renee-render/Renee/Render/ClassMethods.html +382 -0
- data/site/public/docs/renee-render/Renee/Render/TemplateNotFound.html +126 -0
- data/site/public/docs/renee-render/_index.html +143 -0
- data/site/public/docs/renee-render/class_list.html +47 -0
- data/site/public/docs/renee-render/css/common.css +1 -0
- data/site/public/docs/renee-render/css/full_list.css +55 -0
- data/site/public/docs/renee-render/css/style.css +322 -0
- data/site/public/docs/renee-render/file.README-renee-render.html +104 -0
- data/site/public/docs/renee-render/file.README.html +212 -0
- data/site/public/docs/renee-render/file_list.html +49 -0
- data/site/public/docs/renee-render/frames.html +13 -0
- data/site/public/docs/renee-render/index.html +104 -0
- data/site/public/docs/renee-render/js/app.js +205 -0
- data/site/public/docs/renee-render/js/full_list.js +167 -0
- data/site/public/docs/renee-render/js/jquery.js +16 -0
- data/site/public/docs/renee-render/method_list.html +110 -0
- data/site/public/docs/renee-render/top-level-namespace.html +103 -0
- data/site/public/docs/renee-session/Renee.html +106 -0
- data/site/public/docs/renee-session/Renee/Session.html +173 -0
- data/site/public/docs/renee-session/Renee/Session/ClassMethods.html +470 -0
- data/site/public/docs/renee-session/_index.html +136 -0
- data/site/public/docs/renee-session/class_list.html +47 -0
- data/site/public/docs/renee-session/css/common.css +1 -0
- data/site/public/docs/renee-session/css/full_list.css +55 -0
- data/site/public/docs/renee-session/css/style.css +322 -0
- data/site/public/docs/renee-session/file.README-renee-core.html +341 -0
- data/site/public/docs/renee-session/file.README-renee-session.html +69 -0
- data/site/public/docs/renee-session/file_list.html +49 -0
- data/site/public/docs/renee-session/frames.html +13 -0
- data/site/public/docs/renee-session/index.html +69 -0
- data/site/public/docs/renee-session/js/app.js +205 -0
- data/site/public/docs/renee-session/js/full_list.js +167 -0
- data/site/public/docs/renee-session/js/jquery.js +16 -0
- data/site/public/docs/renee-session/method_list.html +102 -0
- data/site/public/docs/renee-session/top-level-namespace.html +103 -0
- data/site/public/docs/renee-url-generation/Renee.html +208 -0
- data/site/public/docs/renee-url-generation/Renee/Core.html +366 -0
- data/site/public/docs/renee-url-generation/Renee/Core/Chaining.html +192 -0
- data/site/public/docs/renee-url-generation/Renee/Core/ClassMethods.html +725 -0
- data/site/public/docs/renee-url-generation/Renee/Core/ClientError.html +317 -0
- data/site/public/docs/renee-url-generation/Renee/Core/EnvAccessors.html +152 -0
- data/site/public/docs/renee-url-generation/Renee/Core/EnvAccessors/ClassMethods.html +354 -0
- data/site/public/docs/renee-url-generation/Renee/Core/Matcher.html +675 -0
- data/site/public/docs/renee-url-generation/Renee/Core/Plugins.html +475 -0
- data/site/public/docs/renee-url-generation/Renee/Core/RackInteraction.html +488 -0
- data/site/public/docs/renee-url-generation/Renee/Core/RequestContext.html +511 -0
- data/site/public/docs/renee-url-generation/Renee/Core/Responding.html +877 -0
- data/site/public/docs/renee-url-generation/Renee/Core/Response.html +691 -0
- data/site/public/docs/renee-url-generation/Renee/Core/Routing.html +1589 -0
- data/site/public/docs/renee-url-generation/Renee/Core/Transform.html +249 -0
- data/site/public/docs/renee-url-generation/_index.html +244 -0
- data/site/public/docs/renee-url-generation/class_list.html +47 -0
- data/site/public/docs/renee-url-generation/css/common.css +1 -0
- data/site/public/docs/renee-url-generation/css/full_list.css +55 -0
- data/site/public/docs/renee-url-generation/css/style.css +322 -0
- data/site/public/docs/renee-url-generation/file.README-renee-url-generation.html +69 -0
- data/site/public/docs/renee-url-generation/file_list.html +49 -0
- data/site/public/docs/renee-url-generation/frames.html +13 -0
- data/site/public/docs/renee-url-generation/index.html +69 -0
- data/site/public/docs/renee-url-generation/js/app.js +205 -0
- data/site/public/docs/renee-url-generation/js/full_list.js +167 -0
- data/site/public/docs/renee-url-generation/js/jquery.js +16 -0
- data/site/public/docs/renee-url-generation/method_list.html +590 -0
- data/site/public/docs/renee-url-generation/top-level-namespace.html +103 -0
- data/site/public/docs/renee/Renee.html +232 -0
- data/site/public/docs/renee/Renee/Application.html +367 -0
- data/site/public/docs/renee/Renee/Core.html +370 -0
- data/site/public/docs/renee/Renee/Core/Chaining.html +192 -0
- data/site/public/docs/renee/Renee/Core/ClassMethods.html +725 -0
- data/site/public/docs/renee/Renee/Core/ClientError.html +317 -0
- data/site/public/docs/renee/Renee/Core/EnvAccessors.html +152 -0
- data/site/public/docs/renee/Renee/Core/EnvAccessors/ClassMethods.html +354 -0
- data/site/public/docs/renee/Renee/Core/Matcher.html +675 -0
- data/site/public/docs/renee/Renee/Core/Plugins.html +475 -0
- data/site/public/docs/renee/Renee/Core/RackInteraction.html +488 -0
- data/site/public/docs/renee/Renee/Core/RequestContext.html +511 -0
- data/site/public/docs/renee/Renee/Core/Responding.html +877 -0
- data/site/public/docs/renee/Renee/Core/Response.html +691 -0
- data/site/public/docs/renee/Renee/Core/Routing.html +1589 -0
- data/site/public/docs/renee/Renee/Core/Transform.html +249 -0
- data/site/public/docs/renee/Renee/Core/URLGeneration.html +597 -0
- data/site/public/docs/renee/Renee/Render.html +877 -0
- data/site/public/docs/renee/Renee/Render/ClassMethods.html +382 -0
- data/site/public/docs/renee/Renee/Render/TemplateNotFound.html +126 -0
- data/site/public/docs/renee/Renee/Session.html +177 -0
- data/site/public/docs/renee/Renee/Session/ClassMethods.html +470 -0
- data/site/public/docs/renee/Renee/URLGeneration.html +142 -0
- data/site/public/docs/renee/Renee/URLGeneration/ClassMethods.html +593 -0
- data/site/public/docs/renee/Renee/Util.html +163 -0
- data/site/public/docs/renee/_index.html +336 -0
- data/site/public/docs/renee/class_list.html +47 -0
- data/site/public/docs/renee/css/common.css +1 -0
- data/site/public/docs/renee/css/full_list.css +55 -0
- data/site/public/docs/renee/css/style.css +322 -0
- data/site/public/docs/renee/file.README.html +212 -0
- data/site/public/docs/renee/file_list.html +49 -0
- data/site/public/docs/renee/frames.html +13 -0
- data/site/public/docs/renee/index.html +212 -0
- data/site/public/docs/renee/js/app.js +205 -0
- data/site/public/docs/renee/js/full_list.js +167 -0
- data/site/public/docs/renee/js/jquery.js +16 -0
- data/site/public/docs/renee/method_list.html +758 -0
- data/site/public/docs/renee/top-level-namespace.html +202 -0
- data/site/public/img/favicon.ico +0 -0
- data/site/public/img/reneeclean.png +0 -0
- data/site/public/img/russiangithub.png +0 -0
- data/site/public/img/stoneposter.png +0 -0
- data/site/public/img/vospit.jpeg +0 -0
- data/site/views/chaining.md +32 -0
- data/site/views/index.md +219 -0
- data/site/views/layouts/app.haml +16 -0
- data/site/views/rack-integration.md +51 -0
- data/site/views/responding.md +103 -0
- data/site/views/route-generation.md +82 -0
- data/site/views/routing.md +261 -0
- data/site/views/settings.md +19 -0
- data/site/views/team-renee.md +13 -0
- data/site/views/tutorial.md +57 -0
- data/site/views/variable-types.md +57 -0
- data/test.watchr +61 -0
- data/test/renee-core/chaining_test.rb +33 -0
- data/test/renee-core/env_accessors_test.rb +43 -0
- data/test/renee-core/include_test.rb +14 -0
- data/test/renee-core/request_context_test.rb +70 -0
- data/test/renee-core/responding_test.rb +128 -0
- data/test/renee-core/routing_test.rb +443 -0
- data/test/renee-core/test_helper.rb +4 -0
- data/test/renee-core/variable_type_test.rb +57 -0
- data/test/renee-render/render_test.rb +162 -0
- data/test/renee-render/test_helper.rb +9 -0
- data/test/renee-session/session_test.rb +31 -0
- data/test/renee-session/test_helper.rb +9 -0
- data/test/renee-url-generation/test_helper.rb +10 -0
- data/test/renee-url-generation/url_generation_test.rb +63 -0
- data/test/{blog_test.rb → renee/blog_test.rb} +10 -5
- data/test/renee/test_helper.rb +56 -0
- data/test/test_helper.rb +23 -10
- metadata +333 -156
- data/.yardopts +0 -6
@@ -0,0 +1,104 @@
|
|
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-render
|
8
|
+
|
9
|
+
— 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> »
|
37
|
+
<span class="title">File: README-renee-render</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 Render</h1>
|
58
|
+
|
59
|
+
<p>Rendering templates in Renee should be familiar and intuitive using the <code>render</code> command:</p>
|
60
|
+
|
61
|
+
<p><code>ruby
|
62
|
+
run Renee.core {
|
63
|
+
path('blog') do
|
64
|
+
get { render! "blogs/index", :haml }
|
65
|
+
end
|
66
|
+
}
|
67
|
+
</code></p>
|
68
|
+
|
69
|
+
<p>This above is the standard render syntax, specifying the engine followed by the template. You can also render without specifying an engine:</p>
|
70
|
+
|
71
|
+
<p><code>ruby
|
72
|
+
path('blog') do
|
73
|
+
get { render! "blogs/index" }
|
74
|
+
end
|
75
|
+
</code></p>
|
76
|
+
|
77
|
+
<p>This will do a lookup in the views path to find the appropriately named template. You can also pass locals and layout options as you would expect:</p>
|
78
|
+
|
79
|
+
<p><code>ruby
|
80
|
+
path('blog') do
|
81
|
+
get { render! "blogs/index", :locals => { :foo => "bar" }, :layout => :bar }
|
82
|
+
end
|
83
|
+
</code></p>
|
84
|
+
|
85
|
+
<p>This will render the "blogs/index.erb" file if it exists, passing the 'foo' local variable
|
86
|
+
and wrapping the result in the 'bar.erb' layout file. You can also render without returning the response by using:</p>
|
87
|
+
|
88
|
+
<p><code>ruby
|
89
|
+
path('blog') do
|
90
|
+
get { render "blogs/index" }
|
91
|
+
end
|
92
|
+
</code></p>
|
93
|
+
|
94
|
+
<p>This allows you to render the content as a string without immediately responding.</p>
|
95
|
+
</div></div>
|
96
|
+
|
97
|
+
<div id="footer">
|
98
|
+
Generated on Mon Jan 23 11:10:31 2012 by
|
99
|
+
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
100
|
+
0.7.4 (ruby-1.9.2).
|
101
|
+
</div>
|
102
|
+
|
103
|
+
</body>
|
104
|
+
</html>
|
@@ -0,0 +1,212 @@
|
|
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
|
8
|
+
|
9
|
+
— Documentation by YARD 0.7.3
|
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> »
|
37
|
+
<span class="title">File: README</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</h1>
|
58
|
+
|
59
|
+
<p>The super friendly rack-based web framework.</p>
|
60
|
+
|
61
|
+
<h2>Introduction</h2>
|
62
|
+
|
63
|
+
<p>Renee is a new Rack-based library for describing web applications. Sinatra delivered a new simple way to think about building web applications. The popularity of Sinatra both as a library and as a concept shows now enduring the concept really was. Sinatra was different from Rails because the entire DSL was lightweight, easy to read and combined routing and actions into a single file. However, let's consider an example from Sinatra to see where we can improve upon this.</p>
|
64
|
+
|
65
|
+
<p>Consider:</p>
|
66
|
+
|
67
|
+
<p><code>ruby
|
68
|
+
get '/blog/:id' do
|
69
|
+
Blog.get(params[:id])
|
70
|
+
end
|
71
|
+
</code></p>
|
72
|
+
|
73
|
+
<p>This is not too bad so far. The repetition of <code>:id</code> is a bit un-DRY, but not bad. Let's keep expanding upon this.</p>
|
74
|
+
|
75
|
+
<p>```ruby
|
76
|
+
get '/blog/:id' do
|
77
|
+
Blog.get(params[:id])
|
78
|
+
end</p>
|
79
|
+
|
80
|
+
<p>put '/blog/:id' do
|
81
|
+
Blog.get(params[:id]).update_attributes(params)
|
82
|
+
end
|
83
|
+
```</p>
|
84
|
+
|
85
|
+
<p>Now, we've retrieved blog in two places. Time to refactor. We'd normally create a before filter, with the same path.</p>
|
86
|
+
|
87
|
+
<p>```ruby
|
88
|
+
before '/blog/:id' do
|
89
|
+
@blog = Blog.get(params[:id])
|
90
|
+
end</p>
|
91
|
+
|
92
|
+
<p>get '/blog/:id' do
|
93
|
+
@blog
|
94
|
+
end</p>
|
95
|
+
|
96
|
+
<p>put '/blog/:id' do
|
97
|
+
@blog.update_attributes(params)
|
98
|
+
end
|
99
|
+
```</p>
|
100
|
+
|
101
|
+
<p>Now we've repeated the same path three times. With Renee, we can describe these kind of ideas in a simple, easy-to-read way. Here is the equivalent in Renee.</p>
|
102
|
+
|
103
|
+
<p>```ruby
|
104
|
+
path 'blog' do
|
105
|
+
var do |id|</p>
|
106
|
+
|
107
|
+
<pre class="code"><span class='ivar'>@blog</span> <span class='op'>=</span> <span class='const'>Blog</span><span class='period'>.</span><span class='id get'>get</span><span class='lparen'>(</span><span class='id id'>id</span><span class='rparen'>)</span>
|
108
|
+
<span class='id get'>get</span> <span class='lbrace'>{</span> <span class='id halt'>halt</span> <span class='ivar'>@blog</span> <span class='rbrace'>}</span>
|
109
|
+
<span class='id put'>put</span> <span class='lbrace'>{</span> <span class='ivar'>@blog</span><span class='period'>.</span><span class='id update'>update</span><span class='lparen'>(</span><span class='id request'>request</span><span class='period'>.</span><span class='id params'>params</span><span class='rparen'>)</span><span class='semicolon'>;</span> <span class='id halt'>halt</span> <span class='symbol'>:ok</span><span class='rbrace'>}</span>
|
110
|
+
</pre>
|
111
|
+
|
112
|
+
<p> end
|
113
|
+
end
|
114
|
+
```</p>
|
115
|
+
|
116
|
+
<p>This web library is inspired by Sinatra, but offers an approach more inline with Rack itself, and lets you maximize code-reuse within your application.</p>
|
117
|
+
|
118
|
+
<h2>Installation</h2>
|
119
|
+
|
120
|
+
<p>Setup Renee by running:</p>
|
121
|
+
|
122
|
+
<p><code>
|
123
|
+
gem install renee
|
124
|
+
</code></p>
|
125
|
+
|
126
|
+
<p>or by adding <code>Renee</code> to your <code>Gemfile</code>:</p>
|
127
|
+
|
128
|
+
<p>```ruby</p>
|
129
|
+
|
130
|
+
<h1>Gemfile</h1>
|
131
|
+
|
132
|
+
<p>gem "renee", "~> 0.0.1"
|
133
|
+
```</p>
|
134
|
+
|
135
|
+
<p>Now you can start using Renee for your application!</p>
|
136
|
+
|
137
|
+
<h2>Usage</h2>
|
138
|
+
|
139
|
+
<p>In your rackup file, give this a go!</p>
|
140
|
+
|
141
|
+
<p>```ruby
|
142
|
+
require 'renee'</p>
|
143
|
+
|
144
|
+
<p>run Renee.core {
|
145
|
+
path('test') do</p>
|
146
|
+
|
147
|
+
<pre class="code"><span class='id get'>get</span> <span class='lbrace'>{</span> <span class='id halt'>halt</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Hey, this is a get!</span><span class='tstring_end'>"</span></span> <span class='rbrace'>}</span>
|
148
|
+
<span class='id post'>post</span> <span class='lbrace'>{</span> <span class='id halt'>halt</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>and .. a post</span><span class='tstring_end'>"</span></span> <span class='rbrace'>}</span>
|
149
|
+
|
150
|
+
<span class='id var'>var</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id id'>id</span><span class='op'>|</span>
|
151
|
+
<span class='id halt'>halt</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Getting the blog with id </span><span class='embexpr_beg'>#{</span><span class='id id'>id</span><span class='rbrace'>}</span><span class='tstring_end'>"</span></span>
|
152
|
+
<span class='kw'>end</span>
|
153
|
+
</pre>
|
154
|
+
|
155
|
+
<p> end
|
156
|
+
}
|
157
|
+
```</p>
|
158
|
+
|
159
|
+
<p>This rack-app will respond to GET /test with "Hey, this is a get!", POST /test with "and .. a post" and /test/:id with <code>"Getting the blog with id #{id}"</code>.</p>
|
160
|
+
|
161
|
+
<p>A more complete example might be sample RESTful routing definitions for a blog post resource:</p>
|
162
|
+
|
163
|
+
<p>```ruby
|
164
|
+
require 'renee'</p>
|
165
|
+
|
166
|
+
<p>run Renee.core {
|
167
|
+
path('posts') do</p>
|
168
|
+
|
169
|
+
<pre class="code"><span class='ivar'>@posts</span> <span class='op'>=</span> <span class='const'>Post</span><span class='period'>.</span><span class='id all'>all</span>
|
170
|
+
<span class='comment'># GET /posts
|
171
|
+
</span><span class='id get'>get</span> <span class='lbrace'>{</span> <span class='id render!'>render!</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>index</span><span class='tstring_end'>"</span></span> <span class='rbrace'>}</span>
|
172
|
+
<span class='comment'># POST /posts
|
173
|
+
</span><span class='id post'>post</span> <span class='lbrace'>{</span> <span class='id redirect!'>redirect!</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>/posts/index</span><span class='tstring_end'>"</span></span> <span class='rbrace'>}</span>
|
174
|
+
|
175
|
+
<span class='id path'>path</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>new</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='kw'>do</span>
|
176
|
+
<span class='comment'># GET /posts/new
|
177
|
+
</span> <span class='id get'>get</span> <span class='lbrace'>{</span> <span class='id render!'>render!</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>new</span><span class='tstring_end'>"</span></span> <span class='rbrace'>}</span>
|
178
|
+
<span class='kw'>end</span>
|
179
|
+
|
180
|
+
<span class='id var'>var</span> <span class='symbol'>:integer</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id id'>id</span><span class='op'>|</span>
|
181
|
+
<span class='ivar'>@post</span> <span class='op'>=</span> <span class='const'>Post</span><span class='period'>.</span><span class='id find'>find</span><span class='lparen'>(</span><span class='id id'>id</span><span class='rparen'>)</span>
|
182
|
+
|
183
|
+
<span class='comment'># GET /posts/5
|
184
|
+
</span> <span class='id get'>get</span> <span class='lbrace'>{</span> <span class='id render!'>render!</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>show</span><span class='tstring_end'>'</span></span> <span class='rbrace'>}</span>
|
185
|
+
<span class='comment'># PUT /posts/5
|
186
|
+
</span> <span class='id put'>put</span> <span class='lbrace'>{</span> <span class='id halt'>halt</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>update</span><span class='tstring_end'>"</span></span> <span class='rbrace'>}</span>
|
187
|
+
<span class='comment'># DELETE /posts/5
|
188
|
+
</span> <span class='id delete'>delete</span> <span class='lbrace'>{</span> <span class='id halt'>halt</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>delete</span><span class='tstring_end'>"</span></span> <span class='rbrace'>}</span>
|
189
|
+
|
190
|
+
<span class='id path'>path</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>edit</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='kw'>do</span>
|
191
|
+
<span class='comment'># GET /posts/5/edit
|
192
|
+
</span> <span class='id get'>get</span> <span class='lbrace'>{</span> <span class='id render!'>render!</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>edit</span><span class='tstring_end'>"</span></span> <span class='rbrace'>}</span>
|
193
|
+
<span class='kw'>end</span>
|
194
|
+
<span class='kw'>end</span>
|
195
|
+
</pre>
|
196
|
+
|
197
|
+
<p> end
|
198
|
+
}
|
199
|
+
```</p>
|
200
|
+
|
201
|
+
<p>This implements the standard 7 REST actions in a very concise and simple way. The routes and the actions blended together utilizing the various
|
202
|
+
Renee routing methods and block syntax. The routing methods are defined below, followed by an explanation of how to respond to a route.</p>
|
203
|
+
</div></div>
|
204
|
+
|
205
|
+
<div id="footer">
|
206
|
+
Generated on Thu Dec 22 09:36:28 2011 by
|
207
|
+
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
208
|
+
0.7.3 (ruby-1.9.2).
|
209
|
+
</div>
|
210
|
+
|
211
|
+
</body>
|
212
|
+
</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-render">README-renee-render</a></li>
|
44
|
+
|
45
|
+
|
46
|
+
</ul>
|
47
|
+
</div>
|
48
|
+
</body>
|
49
|
+
</html>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
|
3
|
+
|
4
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
5
|
+
<head>
|
6
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
7
|
+
<title>Documentation by YARD 0.7.4</title>
|
8
|
+
</head>
|
9
|
+
<frameset cols="20%,*">
|
10
|
+
<frame name="list" src="class_list.html" />
|
11
|
+
<frame name="main" src="index.html" />
|
12
|
+
</frameset>
|
13
|
+
</html>
|
@@ -0,0 +1,104 @@
|
|
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-render
|
8
|
+
|
9
|
+
— 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> »
|
37
|
+
<span class="title">File: README-renee-render</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 Render</h1>
|
58
|
+
|
59
|
+
<p>Rendering templates in Renee should be familiar and intuitive using the <code>render</code> command:</p>
|
60
|
+
|
61
|
+
<p><code>ruby
|
62
|
+
run Renee.core {
|
63
|
+
path('blog') do
|
64
|
+
get { render! "blogs/index", :haml }
|
65
|
+
end
|
66
|
+
}
|
67
|
+
</code></p>
|
68
|
+
|
69
|
+
<p>This above is the standard render syntax, specifying the engine followed by the template. You can also render without specifying an engine:</p>
|
70
|
+
|
71
|
+
<p><code>ruby
|
72
|
+
path('blog') do
|
73
|
+
get { render! "blogs/index" }
|
74
|
+
end
|
75
|
+
</code></p>
|
76
|
+
|
77
|
+
<p>This will do a lookup in the views path to find the appropriately named template. You can also pass locals and layout options as you would expect:</p>
|
78
|
+
|
79
|
+
<p><code>ruby
|
80
|
+
path('blog') do
|
81
|
+
get { render! "blogs/index", :locals => { :foo => "bar" }, :layout => :bar }
|
82
|
+
end
|
83
|
+
</code></p>
|
84
|
+
|
85
|
+
<p>This will render the "blogs/index.erb" file if it exists, passing the 'foo' local variable
|
86
|
+
and wrapping the result in the 'bar.erb' layout file. You can also render without returning the response by using:</p>
|
87
|
+
|
88
|
+
<p><code>ruby
|
89
|
+
path('blog') do
|
90
|
+
get { render "blogs/index" }
|
91
|
+
end
|
92
|
+
</code></p>
|
93
|
+
|
94
|
+
<p>This allows you to render the content as a string without immediately responding.</p>
|
95
|
+
</div></div>
|
96
|
+
|
97
|
+
<div id="footer">
|
98
|
+
Generated on Mon Jan 23 11:10:31 2012 by
|
99
|
+
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
100
|
+
0.7.4 (ruby-1.9.2).
|
101
|
+
</div>
|
102
|
+
|
103
|
+
</body>
|
104
|
+
</html>
|