<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4025734203653274558</id><updated>2012-01-24T21:25:00.718+01:00</updated><category term='ruby'/><category term='camping'/><category term='css'/><category term='sql'/><category term='blog'/><category term='microframework'/><category term='form'/><category term='style'/><category term='sqlite'/><category term='tutorial'/><title type='text'>polzr.goes :Camping</title><subtitle type='html'>A little blog on Camping, a microframework. Adding some documentation to a great webframework.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://polzr.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://polzr.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>polzr</name><uri>http://www.blogger.com/profile/08814485561582487607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>19</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4025734203653274558.post-7078015276981089365</id><published>2007-05-21T15:29:00.000+01:00</published><updated>2007-05-22T08:58:49.317+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='microframework'/><category scheme='http://www.blogger.com/atom/ns#' term='camping'/><category scheme='http://www.blogger.com/atom/ns#' term='style'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Styling on the fly</title><content type='html'>If you already worked your way into &lt;a href="http://code.whytheluckystiff.net/markaby/"&gt;Markaby&lt;/a&gt; as the markup of choice in Camping it might be just some obvious stuff but I think it's worth some lines to show you a shorthand to style page-elements on the fly.&lt;br /&gt;&lt;br /&gt;You normally include your CSS in a Style-class in the controller. This allows you to keep the code in the View clean and readable. Unfortunately, I often need to diversify a style of an element, e.g. modify it's width or it's backround-color, and I don't want to create a whole new CSS-class just for only one tiny change. So I use the short &lt;i&gt;:style&lt;/i&gt;-modifier to get the result. To provide an example:&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;table.bright &lt;font color="#00ffff"&gt;&lt;b&gt;:style&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;border: solid red; width: 70%&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  tr &lt;font color="#00ffff"&gt;&lt;b&gt;:style&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;height: 20%&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   td &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Hello&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:style&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;background: lightgreen&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   td &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;World&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:style&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;border: think dotted blue&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;But please don't use these short-hands too often! It clutters your code and makes it more difficult to maintain. They come in handy to add one or two style-mods but shouldn't replace your Style-controller.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4025734203653274558-7078015276981089365?l=polzr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://polzr.blogspot.com/feeds/7078015276981089365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4025734203653274558&amp;postID=7078015276981089365' title='63 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/7078015276981089365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/7078015276981089365'/><link rel='alternate' type='text/html' href='http://polzr.blogspot.com/2007/05/styling-on-fly.html' title='Styling on the fly'/><author><name>polzr</name><uri>http://www.blogger.com/profile/08814485561582487607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>63</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4025734203653274558.post-4028005303097045297</id><published>2007-05-13T14:20:00.000+01:00</published><updated>2007-05-14T07:49:24.125+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='microframework'/><category scheme='http://www.blogger.com/atom/ns#' term='camping'/><title type='text'>Redhanded shut down!</title><content type='html'>Oh no! _why closed his great blog on ruby, "Redhanded". As he sais, there aren't so many ruby-blogs  closing at these times. Well, let's have look on his new one at &lt;a href="http://www.hackety.org/"&gt;hackety.org&lt;/a&gt;. I hope, he doesn't stop maintaining his great collection of apps including Camping.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4025734203653274558-4028005303097045297?l=polzr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://polzr.blogspot.com/feeds/4028005303097045297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4025734203653274558&amp;postID=4028005303097045297' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/4028005303097045297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/4028005303097045297'/><link rel='alternate' type='text/html' href='http://polzr.blogspot.com/2007/05/redhanded-shut-down.html' title='Redhanded shut down!'/><author><name>polzr</name><uri>http://www.blogger.com/profile/08814485561582487607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4025734203653274558.post-2053010559489497483</id><published>2007-05-11T16:55:00.000+01:00</published><updated>2007-05-15T12:35:15.327+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='form'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='microframework'/><category scheme='http://www.blogger.com/atom/ns#' term='camping'/><title type='text'>form {}</title><content type='html'>Forms are the interface between the user and your web-application. They allow you to receive data from your users and process it. So they really deserve a closer look to enhance your apps.&lt;br /&gt;&lt;br /&gt;The simplest version of a form is just a button which returned data you can use in a controller.&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;form &lt;font color="#00ffff"&gt;&lt;b&gt;:action&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;SomeController&lt;/b&gt;&lt;/font&gt;), &lt;font color="#00ffff"&gt;&lt;b&gt;:method&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;post&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; input &lt;font color="#00ffff"&gt;&lt;b&gt;:type&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;submit&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:value&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Submit&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Nothing special here. We just add an input-'device' and specify its properties like type and value (in this case the label of the button). But a button isn't enough to create a mighty user-interface. At least we need a possibility to type in some text. So let's add a textfield:&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;form &lt;font color="#00ffff"&gt;&lt;b&gt;:action&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;SomeController&lt;/b&gt;&lt;/font&gt;), &lt;font color="#00ffff"&gt;&lt;b&gt;:method&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;post&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; label &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Some text&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:for&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;sometext&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;; br&lt;br /&gt; input &lt;font color="#00ffff"&gt;&lt;b&gt;:type&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;text&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:name&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;sometext&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; input &lt;font color="#00ffff"&gt;&lt;b&gt;:type&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;submit&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:value&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Submit&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now we can process the text.input in our controller with a &lt;i&gt;post&lt;/i&gt;-method. You can access the the given data with &lt;i&gt;input.somename&lt;/i&gt;. In our example we would use &lt;i&gt;input.sometext&lt;/i&gt; to get the text-form input. The labels are used to add a description to a form-element. By the way, if you deal with password-input you don't want to see the passwor in plain text. There is a solution by using &lt;i&gt;:type =&gt; 'password'&lt;/i&gt; for the input. You get a one-line textinput but every character is represented by a '*'.&lt;br /&gt;&lt;br /&gt;If you have worked with HTML-forms you are probably familiar with some additional form-elements.&lt;br /&gt;For example the textarea which you use for inputs over more than one line.&lt;br /&gt;Two other important elements are the checkboxes, radio-buttons and selection-lists (often used as drop-down-menus. In the following example we use both of them just to get a feeling:&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;form &lt;font color="#00ffff"&gt;&lt;b&gt;:action&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;SomeController&lt;/b&gt;&lt;/font&gt;), &lt;font color="#00ffff"&gt;&lt;b&gt;:method&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;post&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    label &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Choose one&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:for&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;chooser&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;; br&lt;br /&gt;    select &lt;font color="#00ffff"&gt;&lt;b&gt;:name&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;chooser&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:size&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff40ff"&gt;&lt;b&gt;1&lt;/b&gt;&lt;/font&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        option &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;First&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        option &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Second&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        option &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Third&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;; br&lt;br /&gt;    div {[input(&lt;font color="#00ffff"&gt;&lt;b&gt;:type&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;radio&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:name&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;radios&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;          &lt;font color="#00ffff"&gt;&lt;b&gt;:value&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;one&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;), &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;One&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;].join(&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt; &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;)}&lt;br /&gt;    div {[input(&lt;font color="#00ffff"&gt;&lt;b&gt;:type&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;radio&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:name&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;radios&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;          &lt;font color="#00ffff"&gt;&lt;b&gt;:value&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;two&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;), &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Two&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;].join(&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt; &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;)}&lt;br /&gt;    input &lt;font color="#00ffff"&gt;&lt;b&gt;:type&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;submit&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:value&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;submit&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The &lt;i&gt;div&lt;/i&gt;-statements seem a bit weird. And yes, I agree but didn't find a better way to implement them. If you find a more elegant way, leave a comment.&lt;br /&gt;&lt;br /&gt;The last important thing is just some ruby-magic to modify a partial and it's form. So if you use a partial for a form and you want to use this partial for different views you need to modify e.g. the controller which will be called by the submit-button. So what you do is something like the following:&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;foo&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#00ffff"&gt;&lt;b&gt;_form&lt;/b&gt;&lt;/font&gt;(&lt;font color="#00ffff"&gt;&lt;b&gt;@data&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:action&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;Add&lt;/b&gt;&lt;/font&gt;))&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;_form&lt;/b&gt;&lt;/font&gt;(data, opts)&lt;br /&gt;   form({method =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;post&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;}.merge(opts)) &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;       &lt;font color="#00ffff"&gt;&lt;b&gt;#some form elements&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;We call the partial and provide some data as an argument. In addition we define the controller called by the submit-button in the partial. Depending of your purpose of the partial you just modify the &lt;i&gt;:action&lt;/i&gt;-parameter. The &lt;i&gt;merge&lt;/i&gt;-method in &lt;i&gt;_form&lt;/i&gt; is used to merge two hashes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4025734203653274558-2053010559489497483?l=polzr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://polzr.blogspot.com/feeds/2053010559489497483/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4025734203653274558&amp;postID=2053010559489497483' title='92 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/2053010559489497483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/2053010559489497483'/><link rel='alternate' type='text/html' href='http://polzr.blogspot.com/2007/05/form.html' title='form {}'/><author><name>polzr</name><uri>http://www.blogger.com/profile/08814485561582487607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>92</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4025734203653274558.post-57367962457070371</id><published>2007-04-30T11:24:00.000+01:00</published><updated>2007-04-30T13:51:05.055+01:00</updated><title type='text'>back and in</title><content type='html'>Sorry for such a long pause of posting, but some minor (Final Exams [Yeah, I finished school!]) and major (I visited Zurich and its &lt;a href="http://www.ethz.ch/"&gt;ETH&lt;/a&gt; [Boah, a dream city!]) things hold me off camping.&lt;br /&gt;&lt;br /&gt;&lt;img align="center" src="http://farm1.static.flickr.com/197/478089643_4684776ba9.jpg?v=0"&gt;&lt;br /&gt;&lt;br /&gt;So being back on track, we will move on with a look on the ActiveRecord-statements &lt;i&gt;has_many&lt;/i&gt; and &lt;i&gt;belong_to&lt;/i&gt;. These modifiers are added in the Model-declaration of your app:&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Link&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;Base&lt;/b&gt;&lt;/font&gt;; belongs_to &lt;font color="#00ffff"&gt;&lt;b&gt;:user&lt;/b&gt;&lt;/font&gt;; has_many &lt;font color="#00ffff"&gt;&lt;b&gt;:tags&lt;/b&gt;&lt;/font&gt;; &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I added these modifiers in the Grabr-app too; but I didn't use them (actually I forgot). So what are they good for? In the Grabr-case just in one line (correct me if I'm wrong), but in general &lt;i&gt;has_many&lt;/i&gt; and &lt;i&gt;belongs_to&lt;/i&gt; are a convenient feature to deal with your data. The following example shows how to use them:&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Link&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;Base&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    belongs_to &lt;font color="#00ffff"&gt;&lt;b&gt;:user&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    has_many &lt;font color="#00ffff"&gt;&lt;b&gt;:tags&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Tag&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;Base&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;User&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;Base&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    has_many &lt;font color="#00ffff"&gt;&lt;b&gt;:links&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;user = &lt;font color="#00ffff"&gt;&lt;b&gt;User&lt;/b&gt;&lt;/font&gt;.find &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id&lt;br /&gt;links = user.links&lt;br /&gt;name = links[&lt;font color="#ff40ff"&gt;&lt;b&gt;1&lt;/b&gt;&lt;/font&gt;].user.username&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Btw., I changed the layout a bit to avoid nasty linebreaks and obfuscation of my code.&lt;br /&gt;&lt;br /&gt;The example code above is a bit shortened but should demonstrate the principle effect of &lt;i&gt;belongs_to&lt;/i&gt; and &lt;i&gt;has_many&lt;/i&gt;. In the case of &lt;i&gt;has_many&lt;/i&gt; you get a method to access the "children" of a model. With &lt;i&gt;belongs_to&lt;/i&gt;, obviously, you can move a step above and gain access to the parent-object and its properties. So it's easy to get all links of one user just writing &lt;i&gt;user.links&lt;/i&gt; if you added a &lt;i&gt;has_many&lt;/i&gt; to your model.&lt;br /&gt;If you want to get further information on ActiveRecord and its syntax I recommend a look into the &lt;a href="http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html"&gt;documentation&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4025734203653274558-57367962457070371?l=polzr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://polzr.blogspot.com/feeds/57367962457070371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4025734203653274558&amp;postID=57367962457070371' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/57367962457070371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/57367962457070371'/><link rel='alternate' type='text/html' href='http://polzr.blogspot.com/2007/04/back-and-in.html' title='back and in'/><author><name>polzr</name><uri>http://www.blogger.com/profile/08814485561582487607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4025734203653274558.post-8120764453152172495</id><published>2007-04-07T17:00:00.000+01:00</published><updated>2007-04-14T15:26:07.462+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='sqlite'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='microframework'/><category scheme='http://www.blogger.com/atom/ns#' term='camping'/><title type='text'>establish_connection :adapter =&gt; 'sqlite3'</title><content type='html'>As we have finished our first serious app there is some time now to deal with some environmental issues of camping. At first we should speak about the standard database used in camping, &lt;a href="http://en.wikipedia.org/wiki/SQLite"&gt;sqlite&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;sqlite is kind of a little brother of mysql. While mysql is the big swiss knife with lots and lots of tools and features, sqlite concentrates on the leightweight and fast administration of your data. You can store your whole database in a small single file which can be easily transfered between different systems.&lt;br /&gt;&lt;br /&gt;When you install sqlite on your system you get a commandline-tool to work with your databases. Just open your terminal of choice and type&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&gt; sqlite3 ARG&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Maybe there is a different link in your &lt;i&gt;/usr/bin/&lt;/i&gt; or &lt;i&gt;/opt/local/bin/&lt;/i&gt; but you will probably find the command by just typing the first letters and then hit &lt;i&gt;Tab&lt;/i&gt;.&lt;br /&gt;As argument you give the database you want to work with. For example in the camping-standard-database in your home-directory:&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&gt; sqlite3 ~/.camping.db&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now you can work with your different tables. To get a first overview of them just type&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;sqlite&gt; .tables&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;and hit enter. sqlite understands abbrevations too, so &lt;i&gt;.ta&lt;/i&gt; is sufficient. To get an overview over all sqlite-info-commands, you use&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;sqlite&gt; .help&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;As you can see every sqlite-command starts with a dot. Except... Yes, except all the other ones: the SQL-statements. The SQL-commands are the meat on the sqlite-bone. They are used to modifiy your data. You find introductions all over the net (e.g. &lt;a href="http://databases.about.com/od/sql/a/sqlfundamentals.htm"&gt;here&lt;/a&gt;) as well as command-references.&lt;br /&gt;So just the everyday stuff in short.&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;View the content of a table:&lt;/b&gt; to see all rows and cols of a table you use the &lt;i&gt;select&lt;/i&gt;-command (sqlite isn't case-sensitive, so you can also write &lt;i&gt;SELECT&lt;/i&gt;; NOTE: concerning table- or variable-names the case isn't ignored!)&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;sqlite&gt; select * from table_name;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Replace table_name by the name of one of your tables. Note that in contrast to the sqlite-commands, the SQL-commands require finishing by a simcolon. The * is a wildcard representing all columns in the selected table. If you just want the id- and the username-column you must replace the wildcard with &lt;i&gt;id, username&lt;/i&gt;. You also can search for certain values with the modificator &lt;i&gt;where&lt;/i&gt;.&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;sqlite&gt; select * from table_name where id&lt;4;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;nstead for the id you can search say a user called "Peter" with &lt;i&gt;where username = "Peter"&lt;/i&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Delete datasets/rows:&lt;/b&gt; a dataset in SQL is represented by one row in a certain table. If you want to delete a dataset aka row you use the &lt;i&gt;delete&lt;/i&gt;-command:&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;sqlite&gt; delete from table_name where&lt;br /&gt; username="Peter";&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;You select a certain dataset with &lt;i&gt;where&lt;/i&gt; as already seen with the &lt;i&gt;select&lt;/i&gt;-command. Of course you can modify your deleting with &amp;lt;/&amp;gt;-operators and combinations of keys, e.g.&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;sqlite&gt; delete from table_name where&lt;br /&gt; age&lt;7 and family_name="Bauer";&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Delete a table:&lt;/b&gt; You can even delete a whole table with the &lt;i&gt;drop&lt;/i&gt;-command&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;sqlite&gt; drop table table_name;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Deleting a whole table is a rare job as you are changing the system behind your biz-logic of your app (see below)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;At the end when you finished your work you can quit sqlite with &lt;i&gt;.quit&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Two notes at the end: &lt;br /&gt;At the beginning I spoke about the portability of sqlite-databases. Now you might argue: well, but if the data of all my camping-apps are crammed into &lt;i&gt;~/.camping.db&lt;/i&gt; and I want to transfer the data of one app to another place(computer, server, disk) I will have to carry a lot of senseless data from all the other apps with me. Yes, you'r right. Well, almost, because there is a fix for this problem: just put one line in the create-method at the end of your camping file. There you add the following statement:&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;AppName&lt;/b&gt;&lt;/font&gt;::&lt;font color="#00ffff"&gt;&lt;b&gt;Models&lt;/b&gt;&lt;/font&gt;::&lt;font color="#00ffff"&gt;&lt;b&gt;Base&lt;/b&gt;&lt;/font&gt;.establish_connection(&lt;br /&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;:adapter&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;sqlite3&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;:database&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;talkr.db&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now camping uses a special &lt;i&gt;*.db&lt;/i&gt;-file for your app where it stores the app-data exclusively. If you want to move your app just copy it along with your app and you are done. The file will be created in the directory where your app is located.&lt;br /&gt;The second one: I told you the whole stuff about sqlite for emergency-usage only. If you inserted a wrong dataset or created a user with a stupid username you can easily fix these problems. But you shouldn't use them for doing all the data-stuff for your camping app. To avoid  mixing data- and business-logic up, active-record and the mvc-design has been invented.&lt;br /&gt;So keep camping (with only a few lines of SQL ;-)!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4025734203653274558-8120764453152172495?l=polzr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://polzr.blogspot.com/feeds/8120764453152172495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4025734203653274558&amp;postID=8120764453152172495' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/8120764453152172495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/8120764453152172495'/><link rel='alternate' type='text/html' href='http://polzr.blogspot.com/2007/04/baseestablishconnection-adapter-sqlite3.html' title='establish_connection :adapter =&gt; &apos;sqlite3&apos;'/><author><name>polzr</name><uri>http://www.blogger.com/profile/08814485561582487607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4025734203653274558.post-6295545518856703084</id><published>2007-04-02T13:37:00.000+01:00</published><updated>2007-04-07T18:56:56.093+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='microframework'/><category scheme='http://www.blogger.com/atom/ns#' term='camping'/><title type='text'>Summin' up</title><content type='html'>As we have finished our Grabr-app I'll give you the whole code in one listing. As in earlier posts the design of the code isn't optimal. But due to the layout of the whole blog I have to add line-breaks in the code to avoid ugly code-snippets.&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;require&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;camping&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;require&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;camping/session&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;Camping&lt;/b&gt;&lt;/font&gt;.goes &lt;font color="#00ffff"&gt;&lt;b&gt;:Grabr&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;module &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Grabr&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#8080ff"&gt;&lt;b&gt;include&lt;/b&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;Camping&lt;/b&gt;&lt;/font&gt;::&lt;font color="#00ffff"&gt;&lt;b&gt;Session&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;module &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Grabr::Models&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Link&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;Base&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; belongs_to &lt;font color="#00ffff"&gt;&lt;b&gt;:user&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; has_many &lt;font color="#00ffff"&gt;&lt;b&gt;:tags&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Tag&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;Base&lt;/b&gt;&lt;/font&gt;; &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;User&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;Base&lt;/b&gt;&lt;/font&gt;; &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;CreateTheBasics&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;V&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff40ff"&gt;&lt;b&gt;1.0&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;self.up&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  create_table &lt;font color="#00ffff"&gt;&lt;b&gt;:grabr_links&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;                     &lt;font color="#00ffff"&gt;&lt;b&gt;:force&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff40ff"&gt;&lt;b&gt;true&lt;/b&gt;&lt;/font&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt; |&lt;font color="#00ffff"&gt;&lt;b&gt;t&lt;/b&gt;&lt;/font&gt;|&lt;br /&gt;   t.column &lt;font color="#00ffff"&gt;&lt;b&gt;:id&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:integer&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:null&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff40ff"&gt;&lt;b&gt;false&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   t.column &lt;font color="#00ffff"&gt;&lt;b&gt;:user_id&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:integer&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:null&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff40ff"&gt;&lt;b&gt;false&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   t.column &lt;font color="#00ffff"&gt;&lt;b&gt;:title&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:string&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:limit&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff40ff"&gt;&lt;b&gt;255&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   t.column &lt;font color="#00ffff"&gt;&lt;b&gt;:address&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:string&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:limit&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff40ff"&gt;&lt;b&gt;255&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   t.column &lt;font color="#00ffff"&gt;&lt;b&gt;:date&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:datetime&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   t.column &lt;font color="#00ffff"&gt;&lt;b&gt;:description&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:text&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  create_table &lt;font color="#00ffff"&gt;&lt;b&gt;:grabr_users&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;                    &lt;font color="#00ffff"&gt;&lt;b&gt;:force&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff40ff"&gt;&lt;b&gt;true&lt;/b&gt;&lt;/font&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt; |&lt;font color="#00ffff"&gt;&lt;b&gt;t&lt;/b&gt;&lt;/font&gt;|&lt;br /&gt;   t.column &lt;font color="#00ffff"&gt;&lt;b&gt;:id&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:integer&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:null&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff40ff"&gt;&lt;b&gt;false&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   t.column &lt;font color="#00ffff"&gt;&lt;b&gt;:username&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:string&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   t.column &lt;font color="#00ffff"&gt;&lt;b&gt;:password&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:string&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#00ffff"&gt;&lt;b&gt;User&lt;/b&gt;&lt;/font&gt;.create &lt;font color="#00ffff"&gt;&lt;b&gt;:username&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;admin&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;              &lt;font color="#00ffff"&gt;&lt;b&gt;:password&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;camping&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;self.down&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  drop_table  &lt;font color="#00ffff"&gt;&lt;b&gt;:grabr_links&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  drop_table  &lt;font color="#00ffff"&gt;&lt;b&gt;:grabr_users&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;module &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Grabr::Controllers&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Index&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;R&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;get&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;unless&lt;/b&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id.blank?&lt;br /&gt;   &lt;font color="#00ffff"&gt;&lt;b&gt;@user&lt;/b&gt;&lt;/font&gt; = &lt;font color="#00ffff"&gt;&lt;b&gt;User&lt;/b&gt;&lt;/font&gt;.find &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id&lt;br /&gt;   &lt;font color="#00ffff"&gt;&lt;b&gt;@links&lt;/b&gt;&lt;/font&gt; = &lt;font color="#00ffff"&gt;&lt;b&gt;Link&lt;/b&gt;&lt;/font&gt;.find(&lt;font color="#00ffff"&gt;&lt;b&gt;:all&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;    &lt;font color="#00ffff"&gt;&lt;b&gt;:conditions&lt;/b&gt;&lt;/font&gt; =&amp;gt; {&lt;font color="#00ffff"&gt;&lt;b&gt;:user_id&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id})&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  render &lt;font color="#00ffff"&gt;&lt;b&gt;:index&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Add&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;get&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;unless&lt;/b&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id.blank?&lt;br /&gt;   &lt;font color="#00ffff"&gt;&lt;b&gt;@user&lt;/b&gt;&lt;/font&gt; = &lt;font color="#00ffff"&gt;&lt;b&gt;User&lt;/b&gt;&lt;/font&gt;.find &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id&lt;br /&gt;   &lt;font color="#00ffff"&gt;&lt;b&gt;@link&lt;/b&gt;&lt;/font&gt; = &lt;font color="#00ffff"&gt;&lt;b&gt;Link&lt;/b&gt;&lt;/font&gt;.new &lt;font color="#00ffff"&gt;&lt;b&gt;:title&lt;/b&gt;&lt;/font&gt; =&amp;gt; input.link_title,&lt;br /&gt;    &lt;font color="#00ffff"&gt;&lt;b&gt;:address&lt;/b&gt;&lt;/font&gt; =&amp;gt; input.address,&lt;br /&gt;     &lt;font color="#00ffff"&gt;&lt;b&gt;:description&lt;/b&gt;&lt;/font&gt; =&amp;gt; input.description,&lt;br /&gt;      &lt;font color="#00ffff"&gt;&lt;b&gt;:user_id&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id,&lt;br /&gt;       &lt;font color="#00ffff"&gt;&lt;b&gt;:date&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#00ffff"&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/font&gt;.now&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  render &lt;font color="#00ffff"&gt;&lt;b&gt;:add&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;post&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;unless&lt;/b&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id.blank?&lt;br /&gt;   link = &lt;font color="#00ffff"&gt;&lt;b&gt;Link&lt;/b&gt;&lt;/font&gt;.create &lt;font color="#00ffff"&gt;&lt;b&gt;:title&lt;/b&gt;&lt;/font&gt; =&amp;gt; input.link_title,&lt;br /&gt;    &lt;font color="#00ffff"&gt;&lt;b&gt;:address&lt;/b&gt;&lt;/font&gt; =&amp;gt; input.address,&lt;br /&gt;     &lt;font color="#00ffff"&gt;&lt;b&gt;:description&lt;/b&gt;&lt;/font&gt; =&amp;gt; input.description,&lt;br /&gt;      &lt;font color="#00ffff"&gt;&lt;b&gt;:user_id&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id,&lt;br /&gt;       &lt;font color="#00ffff"&gt;&lt;b&gt;:date&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#00ffff"&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/font&gt;.now&lt;br /&gt;   redirect &lt;font color="#00ffff"&gt;&lt;b&gt;Index&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;View&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;R&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/view/(\d+)&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/view&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;get&lt;/b&gt;&lt;/font&gt; link_id&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;unless&lt;/b&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id.blank?&lt;br /&gt;     &lt;font color="#00ffff"&gt;&lt;b&gt;@user&lt;/b&gt;&lt;/font&gt; = &lt;font color="#00ffff"&gt;&lt;b&gt;User&lt;/b&gt;&lt;/font&gt;.find &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#00ffff"&gt;&lt;b&gt;@link&lt;/b&gt;&lt;/font&gt; = &lt;font color="#00ffff"&gt;&lt;b&gt;Link&lt;/b&gt;&lt;/font&gt;.find link_id&lt;br /&gt;  render &lt;font color="#00ffff"&gt;&lt;b&gt;:view&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;post&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;unless&lt;/b&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id.blank?&lt;br /&gt;   &lt;font color="#00ffff"&gt;&lt;b&gt;@link&lt;/b&gt;&lt;/font&gt; = &lt;font color="#00ffff"&gt;&lt;b&gt;Link&lt;/b&gt;&lt;/font&gt;.find input.link_id&lt;br /&gt;   &lt;font color="#00ffff"&gt;&lt;b&gt;@link&lt;/b&gt;&lt;/font&gt;.update_attributes &lt;font color="#00ffff"&gt;&lt;b&gt;:title&lt;/b&gt;&lt;/font&gt; =&amp;gt;&lt;br /&gt;              input.link_title,&lt;br /&gt;    &lt;font color="#00ffff"&gt;&lt;b&gt;:address&lt;/b&gt;&lt;/font&gt; =&amp;gt; input.address,&lt;br /&gt;     &lt;font color="#00ffff"&gt;&lt;b&gt;:description&lt;/b&gt;&lt;/font&gt; =&amp;gt; input.description&lt;br /&gt;   redirect &lt;font color="#00ffff"&gt;&lt;b&gt;Index&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Delete&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;R&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/delete/(\d+)&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/delete&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;get&lt;/b&gt;&lt;/font&gt; link_id&lt;br /&gt;   &lt;font color="#ffff00"&gt;&lt;b&gt;unless&lt;/b&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id.blank?&lt;br /&gt;    &lt;font color="#00ffff"&gt;&lt;b&gt;@user&lt;/b&gt;&lt;/font&gt; = &lt;font color="#00ffff"&gt;&lt;b&gt;User&lt;/b&gt;&lt;/font&gt;.find &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id&lt;br /&gt;    &lt;font color="#00ffff"&gt;&lt;b&gt;@link&lt;/b&gt;&lt;/font&gt; = &lt;font color="#00ffff"&gt;&lt;b&gt;Link&lt;/b&gt;&lt;/font&gt;.find link_id&lt;br /&gt;    render &lt;font color="#00ffff"&gt;&lt;b&gt;:delete&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;post&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#ffff00"&gt;&lt;b&gt;unless&lt;/b&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id.blank?&lt;br /&gt;            &lt;font color="#00ffff"&gt;&lt;b&gt;Link&lt;/b&gt;&lt;/font&gt;.delete(input.link_id)&lt;br /&gt;            redirect &lt;font color="#00ffff"&gt;&lt;b&gt;Index&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#ffff00"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    redirect &lt;font color="#00ffff"&gt;&lt;b&gt;Index&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Login&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;post&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#00ffff"&gt;&lt;b&gt;@user&lt;/b&gt;&lt;/font&gt; = &lt;font color="#00ffff"&gt;&lt;b&gt;User&lt;/b&gt;&lt;/font&gt;.find &lt;font color="#00ffff"&gt;&lt;b&gt;:first&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;   &lt;font color="#00ffff"&gt;&lt;b&gt;:conditions&lt;/b&gt;&lt;/font&gt; =&amp;gt; [&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;username = ? AND&lt;br /&gt;        password = ?&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;        input.username, input.password]&lt;br /&gt;&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@user&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#00ffff"&gt;&lt;b&gt;@login&lt;/b&gt;&lt;/font&gt; = &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;login success !&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id = &lt;font color="#00ffff"&gt;&lt;b&gt;@user&lt;/b&gt;&lt;/font&gt;.id&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#ffff00"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; input.user_add &lt;font color="#ffff00"&gt;&lt;b&gt;and&lt;/b&gt;&lt;/font&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;not&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        input.password.empty? &lt;font color="#ffff00"&gt;&lt;b&gt;and&lt;/b&gt;&lt;/font&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;not&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;         input.username.empty?&lt;br /&gt;    &lt;font color="#00ffff"&gt;&lt;b&gt;@user&lt;/b&gt;&lt;/font&gt; = &lt;font color="#00ffff"&gt;&lt;b&gt;User&lt;/b&gt;&lt;/font&gt;.create &lt;font color="#00ffff"&gt;&lt;b&gt;:username&lt;/b&gt;&lt;/font&gt; =&amp;gt;&lt;br /&gt;      input.username,&lt;br /&gt;     &lt;font color="#00ffff"&gt;&lt;b&gt;:password&lt;/b&gt;&lt;/font&gt; =&amp;gt; input.password&lt;br /&gt;    &lt;font color="#00ffff"&gt;&lt;b&gt;@login&lt;/b&gt;&lt;/font&gt; = &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Account successfully created!&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#ffff00"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#00ffff"&gt;&lt;b&gt;@login&lt;/b&gt;&lt;/font&gt; = &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Wrong user name or password!&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  render &lt;font color="#00ffff"&gt;&lt;b&gt;:login&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Logout&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;get&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id = &lt;font color="#ff40ff"&gt;&lt;b&gt;nil&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  render &lt;font color="#00ffff"&gt;&lt;b&gt;:logout&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Style&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;R&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/styles.css&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;get&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#00ffff"&gt;&lt;b&gt;@headers&lt;/b&gt;&lt;/font&gt;[&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Content-Type&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;] =&lt;br /&gt;     &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;text/css; charset=utf-8&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#00ffff"&gt;&lt;b&gt;@body&lt;/b&gt;&lt;/font&gt; = &lt;font color="#ff6060"&gt;&lt;b&gt;%{&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    body {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     background-color: #FFFFFF;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    h1 {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     background-color: #FFBDB0;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     border-bottom: thin dotted darkgrey;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     margin-bottom: 10px;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     margin-top: 5px;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     font-size: 20px;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    h1.h {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     background-color: #E9E8FF;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     font-size: 25px;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    h2 {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     background-color: #FFFCBA;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     font-size: 14px;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     border-bottom: thin dotted darkgrey;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     margin-bottom: 0px;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    h2:hover {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     background: #E9E8FF;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    hr {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     border: 1px dotted darkgrey;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    a {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     text-decoration:none;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     background: #FFFCBA;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     margin: 1px;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     padding: 2px;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     color: black;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    a.h {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     background: none;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    a.nav {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     font-size: 12px;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    a.h:hover {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     background: none;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    a:hover {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     background: #E9E8FF;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    a:visited {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     color: black;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    p {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     margin: 2px;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    p.date {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     font-size: 13px;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     color: darkgrey;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    textarea {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     width: 500px;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    input {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     background: #FFFCBA;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     margin: 5px;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    table {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     border-spacing: 10px;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    td {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     border-right: thin dotted darkgrey;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     padding: 20px;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    ul {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     list-style-type: square;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    li {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     margin: 8px;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;   &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;module &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Grabr::Views&lt;/b&gt;&lt;/font&gt; &lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;layout&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; html &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  head &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   title &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Grabr&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   link &lt;font color="#00ffff"&gt;&lt;b&gt;:rel&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;stylesheet&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;     &lt;font color="#00ffff"&gt;&lt;b&gt;:type&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;text/css&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;     &lt;font color="#00ffff"&gt;&lt;b&gt;:href&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/styles.css&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:media&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;screen&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  body &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#ffff00"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@user&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    p &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;     [(&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;You are logged in as \'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;+&lt;br /&gt;       &lt;font color="#00ffff"&gt;&lt;b&gt;@user&lt;/b&gt;&lt;/font&gt;.username+&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;\'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;),&lt;br /&gt;        a(&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Logout&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;             &lt;font color="#00ffff"&gt;&lt;b&gt;:href&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;Logout&lt;/b&gt;&lt;/font&gt;))].join(&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;  |  &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;)&lt;br /&gt;    &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   h1.h { a.h &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Grabr Web-Aggregator&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;             &lt;font color="#00ffff"&gt;&lt;b&gt;:href&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;Index&lt;/b&gt;&lt;/font&gt;)}&lt;br /&gt;   &lt;font color="#ff40ff"&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt; &amp;lt;&amp;lt; &lt;font color="#ffff00"&gt;&lt;b&gt;yield&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;index&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@user&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  h1 &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Your Grabbed Links&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@links&lt;/b&gt;&lt;/font&gt;.empty?&lt;br /&gt;   p &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;You haven\'t grabbed anything yet!&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;; br&lt;br /&gt;   p {a &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Add a link now!&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:href&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;Add&lt;/b&gt;&lt;/font&gt;)}&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   p {a &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Add a link now!&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:href&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;Add&lt;/b&gt;&lt;/font&gt;)}&lt;br /&gt;   &lt;font color="#ffff00"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/font&gt; link &lt;font color="#ffff00"&gt;&lt;b&gt;in&lt;/b&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@links&lt;/b&gt;&lt;/font&gt;.reverse&lt;br /&gt;    _entry(link)&lt;br /&gt;   &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  h1 &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Please login or create an account&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  _login&lt;br /&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;login&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; p {b &lt;font color="#00ffff"&gt;&lt;b&gt;@login&lt;/b&gt;&lt;/font&gt;}&lt;br /&gt; p {a &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Continue&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:href&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;Index&lt;/b&gt;&lt;/font&gt;)}&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;logout&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; p &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;You have been logged out&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; p {a &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Continue&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:href&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;Index&lt;/b&gt;&lt;/font&gt;)}&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;add&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@user&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  _form(&lt;font color="#00ffff"&gt;&lt;b&gt;@link&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:action&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;Add&lt;/b&gt;&lt;/font&gt;))&lt;br /&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  _login&lt;br /&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;delete&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; p &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Are you shure that you want&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt; to delete the bookmark \'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;+&lt;font color="#00ffff"&gt;&lt;b&gt;@link&lt;/b&gt;&lt;/font&gt;.title+&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;\'?&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; br&lt;br /&gt; form &lt;font color="#00ffff"&gt;&lt;b&gt;:action&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;Delete&lt;/b&gt;&lt;/font&gt;), &lt;font color="#00ffff"&gt;&lt;b&gt;:method&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;post&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  input &lt;font color="#00ffff"&gt;&lt;b&gt;:type&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;hidden&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;   &lt;font color="#00ffff"&gt;&lt;b&gt;:name&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;link_id&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:value&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@link&lt;/b&gt;&lt;/font&gt;.id&lt;br /&gt;  input &lt;font color="#00ffff"&gt;&lt;b&gt;:type&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;submit&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;   &lt;font color="#00ffff"&gt;&lt;b&gt;:name&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;delete&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:value&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Delete&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;view&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@user&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  _form(&lt;font color="#00ffff"&gt;&lt;b&gt;@link&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:action&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;View&lt;/b&gt;&lt;/font&gt;))&lt;br /&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  _login&lt;br /&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;_login&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; form &lt;font color="#00ffff"&gt;&lt;b&gt;:action&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;Login&lt;/b&gt;&lt;/font&gt;), &lt;font color="#00ffff"&gt;&lt;b&gt;:method&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;post&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   label &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Username&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:for&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;username&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   br&lt;br /&gt;   input &lt;font color="#00ffff"&gt;&lt;b&gt;:name&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;username&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:type&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;text&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   br&lt;br /&gt;&lt;br /&gt;   label &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Password&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:for&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;password&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   br&lt;br /&gt;   input &lt;font color="#00ffff"&gt;&lt;b&gt;:name&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;password&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:type&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;text&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   br&lt;br /&gt;&lt;br /&gt;   input &lt;font color="#00ffff"&gt;&lt;b&gt;:type&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;submit&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:name&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;login&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;    &lt;font color="#00ffff"&gt;&lt;b&gt;:value&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Login&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   input &lt;font color="#00ffff"&gt;&lt;b&gt;:type&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;submit&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:name&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;user_add&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;    &lt;font color="#00ffff"&gt;&lt;b&gt;:value&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Create Account&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;_entry&lt;/b&gt;&lt;/font&gt;(link)&lt;br /&gt; h2 {a.h link.title, &lt;font color="#00ffff"&gt;&lt;b&gt;:href&lt;/b&gt;&lt;/font&gt; =&amp;gt; link.address}&lt;br /&gt; p.date &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Added at &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;+&lt;br /&gt;   link.date.strftime(&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;%d. %B %Y&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;)&lt;br /&gt; p link.description&lt;br /&gt; p &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  [a.nav(&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;View&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:href&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;View&lt;/b&gt;&lt;/font&gt;, link.id)),&lt;br /&gt;   a.nav(&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Delete&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:href&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;Delete&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;         link.id))].join(&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;  |  &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;)&lt;br /&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; hr&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;_form&lt;/b&gt;&lt;/font&gt;(link, opts)&lt;br /&gt; form({&lt;font color="#00ffff"&gt;&lt;b&gt;:method&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;post&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;}.merge(opts)) &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   label &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Title&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:for&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;link_title&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   br&lt;br /&gt;   input &lt;font color="#00ffff"&gt;&lt;b&gt;:name&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;link_title&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:type&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;text&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;   &lt;font color="#00ffff"&gt;&lt;b&gt;:value&lt;/b&gt;&lt;/font&gt; =&amp;gt; link.title&lt;br /&gt;   br&lt;br /&gt;&lt;br /&gt;   label &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Link-Address&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:for&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;link_address&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   br&lt;br /&gt;   textarea link.address, &lt;font color="#00ffff"&gt;&lt;b&gt;:name&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;address&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   br&lt;br /&gt;&lt;br /&gt;   label &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Description&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:for&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;description&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   br&lt;br /&gt;   textarea link.description,&lt;br /&gt;     &lt;font color="#00ffff"&gt;&lt;b&gt;:name&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;description&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   br&lt;br /&gt;&lt;br /&gt;   input &lt;font color="#00ffff"&gt;&lt;b&gt;:type&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;hidden&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;     &lt;font color="#00ffff"&gt;&lt;b&gt;:name&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;link_id&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:value&lt;/b&gt;&lt;/font&gt; =&amp;gt; link.id&lt;br /&gt;   input &lt;font color="#00ffff"&gt;&lt;b&gt;:type&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;submit&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:value&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Done!&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;Grabr.create&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;Camping&lt;/b&gt;&lt;/font&gt;::&lt;font color="#00ffff"&gt;&lt;b&gt;Models&lt;/b&gt;&lt;/font&gt;::&lt;font color="#00ffff"&gt;&lt;b&gt;Session&lt;/b&gt;&lt;/font&gt;.create_schema&lt;br /&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;Grabr&lt;/b&gt;&lt;/font&gt;::&lt;font color="#00ffff"&gt;&lt;b&gt;Models&lt;/b&gt;&lt;/font&gt;.create_schema &lt;font color="#00ffff"&gt;&lt;b&gt;:assume&lt;/b&gt;&lt;/font&gt; =&amp;gt;&lt;br /&gt;  (&lt;font color="#00ffff"&gt;&lt;b&gt;Grabr&lt;/b&gt;&lt;/font&gt;::&lt;font color="#00ffff"&gt;&lt;b&gt;Models&lt;/b&gt;&lt;/font&gt;::&lt;font color="#00ffff"&gt;&lt;b&gt;Link&lt;/b&gt;&lt;/font&gt;.table_exists? ? &lt;font color="#ff40ff"&gt;&lt;b&gt;1.0&lt;/b&gt;&lt;/font&gt; : &lt;font color="#ff40ff"&gt;&lt;b&gt;0.0&lt;/b&gt;&lt;/font&gt;)&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So have a lot of fun! Leave a comment if you want any special topic I should deal with in some later posts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4025734203653274558-6295545518856703084?l=polzr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://polzr.blogspot.com/feeds/6295545518856703084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4025734203653274558&amp;postID=6295545518856703084' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/6295545518856703084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/6295545518856703084'/><link rel='alternate' type='text/html' href='http://polzr.blogspot.com/2007/04/everythinginject-sum-post-sum-post-ii.html' title='Summin&apos; up'/><author><name>polzr</name><uri>http://www.blogger.com/profile/08814485561582487607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4025734203653274558.post-2297669303036344380</id><published>2007-04-02T13:19:00.000+01:00</published><updated>2007-04-07T18:57:17.269+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='microframework'/><category scheme='http://www.blogger.com/atom/ns#' term='camping'/><title type='text'>'post to grabr'</title><content type='html'>If you followed all the steps to build Grabr and played around a bit with adding, editing and deleting bookmarks you were probably annoyed by opening a new tab, opening localhost and then add a new bookmark manually. There is a remedy you come across by using e.g. delicious: a bookmark in your browserbar&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qAwapePeFCs/RhD3PVlV0wI/AAAAAAAAAAU/gt8AL7Ni16M/s1600-h/Fullscreen_1.jpg"&gt;&lt;img style="margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_qAwapePeFCs/RhD3PVlV0wI/AAAAAAAAAAU/gt8AL7Ni16M/s320/Fullscreen_1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5048807025146188546" /&gt;&lt;/a&gt;&lt;br /&gt;This bookmark uses a bit of JavaScript-magic to transfer the current URL to Grabr.&lt;br /&gt;The only thing you need to do is to drag the following link to your browsers quick-link-bar: &lt;a href="javascript:location.href='http://localhost:3301/add?address='+encodeURIComponent(location.href)+';link_title='+encodeURIComponent(document.title)"&gt;post to grabr&lt;/a&gt;. Then try it out with this page and enjoy the ease of Grabr.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4025734203653274558-2297669303036344380?l=polzr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://polzr.blogspot.com/feeds/2297669303036344380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4025734203653274558&amp;postID=2297669303036344380' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/2297669303036344380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/2297669303036344380'/><link rel='alternate' type='text/html' href='http://polzr.blogspot.com/2007/04/post-to-grabr.html' title='&apos;post to grabr&apos;'/><author><name>polzr</name><uri>http://www.blogger.com/profile/08814485561582487607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qAwapePeFCs/RhD3PVlV0wI/AAAAAAAAAAU/gt8AL7Ni16M/s72-c/Fullscreen_1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4025734203653274558.post-2075577806175497054</id><published>2007-04-02T12:09:00.000+01:00</published><updated>2007-04-07T18:57:35.472+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='microframework'/><category scheme='http://www.blogger.com/atom/ns#' term='camping'/><title type='text'>Let's have a view</title><content type='html'>So let's finish our bookmarking-app! Only the views are still missing.&lt;br /&gt;Beginning with our layout:&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;layout&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  html &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   head &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    title &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Grabr&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    link &lt;font color="#00ffff"&gt;&lt;b&gt;:rel&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;stylesheet&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;      &lt;font color="#00ffff"&gt;&lt;b&gt;:type&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;text/css&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;      &lt;font color="#00ffff"&gt;&lt;b&gt;:href&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/styles.css&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:media&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;screen&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   body &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#ffff00"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@user&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;     p &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;      [(&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;You are logged in as \'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;+&lt;br /&gt;        &lt;font color="#00ffff"&gt;&lt;b&gt;@user&lt;/b&gt;&lt;/font&gt;.username+&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;\'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;),&lt;br /&gt;         a(&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Logout&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;              &lt;font color="#00ffff"&gt;&lt;b&gt;:href&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;Logout&lt;/b&gt;&lt;/font&gt;))].join(&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;  |  &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;)&lt;br /&gt;     &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    h1.h { a.h &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Grabr Web-Aggregator&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;              &lt;font color="#00ffff"&gt;&lt;b&gt;:href&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;Index&lt;/b&gt;&lt;/font&gt;)}&lt;br /&gt;    &lt;font color="#ff40ff"&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt; &amp;lt;&amp;lt; &lt;font color="#ffff00"&gt;&lt;b&gt;yield&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The &lt;i&gt;if @user&lt;/i&gt;-statement adds a status-bar ontop of every page which indicates the user-status. If there is user logged in, its name appears and there is a link to log out quickly.&lt;br /&gt;The next methods are just the standard stuff, nothing new nor spectacular.&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;index&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@user&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  h1 &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Your Grabbed Links&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@links&lt;/b&gt;&lt;/font&gt;.empty?&lt;br /&gt;   p &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;You haven\'t grabbed anything yet!&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;; br&lt;br /&gt;   p {a &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Add a link now!&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:href&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;Add&lt;/b&gt;&lt;/font&gt;)}&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   p {a &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Add a link now!&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:href&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;Add&lt;/b&gt;&lt;/font&gt;)}&lt;br /&gt;   &lt;font color="#ffff00"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/font&gt; link &lt;font color="#ffff00"&gt;&lt;b&gt;in&lt;/b&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@links&lt;/b&gt;&lt;/font&gt;.reverse&lt;br /&gt;    _entry(link)&lt;br /&gt;   &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  h1 &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Please login or create an account&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  _login&lt;br /&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;login&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; p {b &lt;font color="#00ffff"&gt;&lt;b&gt;@login&lt;/b&gt;&lt;/font&gt;}&lt;br /&gt; p {a &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Continue&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:href&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;Index&lt;/b&gt;&lt;/font&gt;)}&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;logout&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; p &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;You have been logged out&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; p {a &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Continue&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:href&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;Index&lt;/b&gt;&lt;/font&gt;)}&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;add&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@user&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  _form(&lt;font color="#00ffff"&gt;&lt;b&gt;@link&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:action&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;Add&lt;/b&gt;&lt;/font&gt;))&lt;br /&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  _login&lt;br /&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;delete&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; p &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Are you shure that you want&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt; to delete the bookmark \'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;+&lt;font color="#00ffff"&gt;&lt;b&gt;@link&lt;/b&gt;&lt;/font&gt;.title+&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;\'?&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; br&lt;br /&gt; form &lt;font color="#00ffff"&gt;&lt;b&gt;:action&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;Delete&lt;/b&gt;&lt;/font&gt;), &lt;font color="#00ffff"&gt;&lt;b&gt;:method&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;post&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  input &lt;font color="#00ffff"&gt;&lt;b&gt;:type&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;hidden&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;   &lt;font color="#00ffff"&gt;&lt;b&gt;:name&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;link_id&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:value&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@link&lt;/b&gt;&lt;/font&gt;.id&lt;br /&gt;  input &lt;font color="#00ffff"&gt;&lt;b&gt;:type&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;submit&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;   &lt;font color="#00ffff"&gt;&lt;b&gt;:name&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;delete&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:value&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Delete&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;view&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@user&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  _form(&lt;font color="#00ffff"&gt;&lt;b&gt;@link&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:action&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;View&lt;/b&gt;&lt;/font&gt;))&lt;br /&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  _login&lt;br /&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Just standard stuff as I promised.&lt;br /&gt;So lets add the partials:&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;_login&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; form &lt;font color="#00ffff"&gt;&lt;b&gt;:action&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;Login&lt;/b&gt;&lt;/font&gt;), &lt;font color="#00ffff"&gt;&lt;b&gt;:method&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;post&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   label &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Username&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:for&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;username&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   br&lt;br /&gt;   input &lt;font color="#00ffff"&gt;&lt;b&gt;:name&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;username&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:type&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;text&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   br&lt;br /&gt;&lt;br /&gt;   label &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Password&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:for&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;password&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   br&lt;br /&gt;   input &lt;font color="#00ffff"&gt;&lt;b&gt;:name&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;password&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:type&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;text&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   br&lt;br /&gt;&lt;br /&gt;   input &lt;font color="#00ffff"&gt;&lt;b&gt;:type&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;submit&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:name&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;login&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;    &lt;font color="#00ffff"&gt;&lt;b&gt;:value&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Login&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   input &lt;font color="#00ffff"&gt;&lt;b&gt;:type&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;submit&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:name&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;user_add&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;    &lt;font color="#00ffff"&gt;&lt;b&gt;:value&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Create Account&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;_entry&lt;/b&gt;&lt;/font&gt;(link)&lt;br /&gt; h2 {a.h link.title, &lt;font color="#00ffff"&gt;&lt;b&gt;:href&lt;/b&gt;&lt;/font&gt; =&amp;gt; link.address}&lt;br /&gt; p.date &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Added at &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;+&lt;br /&gt;   link.date.strftime(&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;%d. %B %Y&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;)&lt;br /&gt; p link.description&lt;br /&gt; p &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  [a.nav(&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;View&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:href&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;View&lt;/b&gt;&lt;/font&gt;, link.id)),&lt;br /&gt;   a.nav(&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Delete&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:href&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;Delete&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;         link.id))].join(&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;  |  &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;)&lt;br /&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; hr&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;_form&lt;/b&gt;&lt;/font&gt;(link, opts)&lt;br /&gt; form({&lt;font color="#00ffff"&gt;&lt;b&gt;:method&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;post&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;}.merge(opts)) &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   label &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Title&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:for&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;link_title&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   br&lt;br /&gt;   input &lt;font color="#00ffff"&gt;&lt;b&gt;:name&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;link_title&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:type&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;text&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;   &lt;font color="#00ffff"&gt;&lt;b&gt;:value&lt;/b&gt;&lt;/font&gt; =&amp;gt; link.title&lt;br /&gt;   br&lt;br /&gt;&lt;br /&gt;   label &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Link-Address&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:for&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;link_address&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   br&lt;br /&gt;   textarea link.address, &lt;font color="#00ffff"&gt;&lt;b&gt;:name&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;address&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   br&lt;br /&gt;&lt;br /&gt;   label &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Description&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:for&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;description&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   br&lt;br /&gt;   textarea link.description,&lt;br /&gt;     &lt;font color="#00ffff"&gt;&lt;b&gt;:name&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;description&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   br&lt;br /&gt;&lt;br /&gt;   input &lt;font color="#00ffff"&gt;&lt;b&gt;:type&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;hidden&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;     &lt;font color="#00ffff"&gt;&lt;b&gt;:name&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;link_id&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:value&lt;/b&gt;&lt;/font&gt; =&amp;gt; link.id&lt;br /&gt;   input &lt;font color="#00ffff"&gt;&lt;b&gt;:type&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;submit&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:value&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Done!&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The &lt;i&gt;_entry&lt;/i&gt;-partial contains the informations of a stored bookmark, the &lt;i&gt;_form&lt;/i&gt; is used for editing a posted link.&lt;br /&gt;Last thing missing is the initialization of the database:&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;Grabr.create&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;Camping&lt;/b&gt;&lt;/font&gt;::&lt;font color="#00ffff"&gt;&lt;b&gt;Models&lt;/b&gt;&lt;/font&gt;::&lt;font color="#00ffff"&gt;&lt;b&gt;Session&lt;/b&gt;&lt;/font&gt;.create_schema&lt;br /&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;Grabr&lt;/b&gt;&lt;/font&gt;::&lt;font color="#00ffff"&gt;&lt;b&gt;Models&lt;/b&gt;&lt;/font&gt;.create_schema &lt;font color="#00ffff"&gt;&lt;b&gt;:assume&lt;/b&gt;&lt;/font&gt; =&amp;gt;&lt;br /&gt;  (&lt;font color="#00ffff"&gt;&lt;b&gt;Grabr&lt;/b&gt;&lt;/font&gt;::&lt;font color="#00ffff"&gt;&lt;b&gt;Models&lt;/b&gt;&lt;/font&gt;::&lt;font color="#00ffff"&gt;&lt;b&gt;Link&lt;/b&gt;&lt;/font&gt;.table_exists? ? &lt;font color="#ff40ff"&gt;&lt;b&gt;1.0&lt;/b&gt;&lt;/font&gt; : &lt;font color="#ff40ff"&gt;&lt;b&gt;0.0&lt;/b&gt;&lt;/font&gt;)&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Yeah! We are finished! Well, almost, there are still some features to add (e.g. tags). But for now we have a working bookmarking-engine. Next post will add post-with-one-click. Then its time to sum up!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4025734203653274558-2075577806175497054?l=polzr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://polzr.blogspot.com/feeds/2075577806175497054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4025734203653274558&amp;postID=2075577806175497054' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/2075577806175497054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/2075577806175497054'/><link rel='alternate' type='text/html' href='http://polzr.blogspot.com/2007/04/lets-have-view.html' title='Let&apos;s have a view'/><author><name>polzr</name><uri>http://www.blogger.com/profile/08814485561582487607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4025734203653274558.post-5003206717014960040</id><published>2007-03-26T18:38:00.000+01:00</published><updated>2007-04-07T18:57:45.638+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='microframework'/><category scheme='http://www.blogger.com/atom/ns#' term='camping'/><title type='text'>Bookmarking with Style</title><content type='html'>So the last section of the controller is still missing: the styles. Lets change it by giving you the whole block. It's quite a lot and there might be a potential for some tuning:&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Style&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;R&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/styles.css&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;get&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#00ffff"&gt;&lt;b&gt;@headers&lt;/b&gt;&lt;/font&gt;[&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Content-Type&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;] =&lt;br /&gt;     &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;text/css; charset=utf-8&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#00ffff"&gt;&lt;b&gt;@body&lt;/b&gt;&lt;/font&gt; = &lt;font color="#ff6060"&gt;&lt;b&gt;%{&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    body {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     background-color: #FFFFFF;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    h1 {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     background-color: #FFBDB0;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     border-bottom: thin dotted darkgrey;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     margin-bottom: 10px;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     margin-top: 5px;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     font-size: 20px;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    h1.h {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     background-color: #E9E8FF;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     font-size: 25px;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    h2 {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     background-color: #FFFCBA;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     font-size: 14px;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     border-bottom: thin dotted darkgrey;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     margin-bottom: 0px;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    h2:hover {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     background: #E9E8FF;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    hr {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     border: 1px dotted darkgrey;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    a {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     text-decoration:none;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     background: #FFFCBA;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     margin: 1px;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     padding: 2px;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     color: black;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    a.h {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     background: none;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    a.nav {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     font-size: 12px;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    a.h:hover {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     background: none;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    a:hover {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     background: #E9E8FF;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    a:visited {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     color: black;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    p {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     margin: 2px;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    p.date {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     font-size: 13px;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     color: darkgrey;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    textarea {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     width: 500px;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    input {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     background: #FFFCBA;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     margin: 5px;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    table {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     border-spacing: 10px;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    td {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     border-right: thin dotted darkgrey;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     padding: 20px;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    ul {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     list-style-type: square;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    li {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;     margin: 8px;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;    }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;   &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The Grabr-app will look that way in the near future:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qAwapePeFCs/RggGyZkL9DI/AAAAAAAAAAM/vreUnOWLUY4/s1600-h/Screenshot_1.png"&gt;&lt;img  style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_qAwapePeFCs/RggGyZkL9DI/AAAAAAAAAAM/vreUnOWLUY4/s320/Screenshot_1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5046290845394531378" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So keep camping!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4025734203653274558-5003206717014960040?l=polzr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://polzr.blogspot.com/feeds/5003206717014960040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4025734203653274558&amp;postID=5003206717014960040' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/5003206717014960040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/5003206717014960040'/><link rel='alternate' type='text/html' href='http://polzr.blogspot.com/2007/03/bookmarking-with-style.html' title='Bookmarking with Style'/><author><name>polzr</name><uri>http://www.blogger.com/profile/08814485561582487607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_qAwapePeFCs/RggGyZkL9DI/AAAAAAAAAAM/vreUnOWLUY4/s72-c/Screenshot_1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4025734203653274558.post-3236497612556223721</id><published>2007-03-25T10:06:00.000+01:00</published><updated>2007-04-07T18:57:58.166+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='microframework'/><category scheme='http://www.blogger.com/atom/ns#' term='camping'/><title type='text'>Everything under Camping::Control</title><content type='html'>For our bookmarking-app we will need in the first place the bookmarks itself stored in our database. They should belong to a certain user and have a title, the address of the bookmark and a short description.&lt;br /&gt;&lt;br /&gt;In Camping-code in the Module-Section that looks as following:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;module &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Grabr::Models&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Link&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;Base&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  belongs_to &lt;font color="#00ffff"&gt;&lt;b&gt;:user&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  has_many &lt;font color="#00ffff"&gt;&lt;b&gt;:tags&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Tag&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;Base&lt;/b&gt;&lt;/font&gt;; &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;User&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;Base&lt;/b&gt;&lt;/font&gt;; &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;CreateTheBasics&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;V&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff40ff"&gt;&lt;b&gt;1.0&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;self.up&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   create_table &lt;font color="#00ffff"&gt;&lt;b&gt;:grabr_links&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;                      &lt;font color="#00ffff"&gt;&lt;b&gt;:force&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff40ff"&gt;&lt;b&gt;true&lt;/b&gt;&lt;/font&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt; |&lt;font color="#00ffff"&gt;&lt;b&gt;t&lt;/b&gt;&lt;/font&gt;|&lt;br /&gt;    t.column &lt;font color="#00ffff"&gt;&lt;b&gt;:id&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:integer&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:null&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff40ff"&gt;&lt;b&gt;false&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    t.column &lt;font color="#00ffff"&gt;&lt;b&gt;:user_id&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:integer&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:null&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff40ff"&gt;&lt;b&gt;false&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    t.column &lt;font color="#00ffff"&gt;&lt;b&gt;:title&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:string&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:limit&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff40ff"&gt;&lt;b&gt;255&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    t.column &lt;font color="#00ffff"&gt;&lt;b&gt;:address&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:string&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:limit&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff40ff"&gt;&lt;b&gt;255&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    t.column &lt;font color="#00ffff"&gt;&lt;b&gt;:date&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:datetime&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    t.column &lt;font color="#00ffff"&gt;&lt;b&gt;:description&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:text&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   create_table &lt;font color="#00ffff"&gt;&lt;b&gt;:grabr_users&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;                     &lt;font color="#00ffff"&gt;&lt;b&gt;:force&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff40ff"&gt;&lt;b&gt;true&lt;/b&gt;&lt;/font&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt; |&lt;font color="#00ffff"&gt;&lt;b&gt;t&lt;/b&gt;&lt;/font&gt;|&lt;br /&gt;    t.column &lt;font color="#00ffff"&gt;&lt;b&gt;:id&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:integer&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:null&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff40ff"&gt;&lt;b&gt;false&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    t.column &lt;font color="#00ffff"&gt;&lt;b&gt;:username&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:string&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    t.column &lt;font color="#00ffff"&gt;&lt;b&gt;:password&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:string&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#00ffff"&gt;&lt;b&gt;User&lt;/b&gt;&lt;/font&gt;.create &lt;font color="#00ffff"&gt;&lt;b&gt;:username&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;admin&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;               &lt;font color="#00ffff"&gt;&lt;b&gt;:password&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;camping&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;self.down&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   drop_table  &lt;font color="#00ffff"&gt;&lt;b&gt;:grabr_links&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   drop_table  &lt;font color="#00ffff"&gt;&lt;b&gt;:grabr_users&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Nothing special, I just left the tags out as we want to get running quickly and will add some additional features later.&lt;br /&gt;The &lt;i&gt;:user_id&lt;/i&gt; connects every posted link to the user who posted it.&lt;br /&gt;&lt;br /&gt;The next step will be the Controller. As it is quite long I'll cut it in several slices. Lets get started with the &lt;i&gt;Index&lt;/i&gt;-controller:&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Index&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;R&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;get&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;unless&lt;/b&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id.blank?&lt;br /&gt;   &lt;font color="#00ffff"&gt;&lt;b&gt;@user&lt;/b&gt;&lt;/font&gt; = &lt;font color="#00ffff"&gt;&lt;b&gt;User&lt;/b&gt;&lt;/font&gt;.find &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id&lt;br /&gt;   &lt;font color="#00ffff"&gt;&lt;b&gt;@links&lt;/b&gt;&lt;/font&gt; = &lt;font color="#00ffff"&gt;&lt;b&gt;Link&lt;/b&gt;&lt;/font&gt;.find(&lt;font color="#00ffff"&gt;&lt;b&gt;:all&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;    &lt;font color="#00ffff"&gt;&lt;b&gt;:conditions&lt;/b&gt;&lt;/font&gt; =&amp;gt; {&lt;font color="#00ffff"&gt;&lt;b&gt;:user_id&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id})&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  render &lt;font color="#00ffff"&gt;&lt;b&gt;:index&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;When the index page is called by the url &lt;i&gt;loalhost:anyport(probably 3301)/&lt;/i&gt; the Index-controller looks for a logged-in user. This is done by checking the cooky set by the Camping-server. If there is a cooky containing a valid user-id then the instance-variable &lt;i&gt;@user&lt;/i&gt; is created. We define another instance-variable called &lt;i&gt;@links&lt;/i&gt; which contain all the users bookmarked links. At the render the index page, which will use both variables which is shown in the next post.&lt;br /&gt;&lt;br /&gt;Next block are the Add- and View-Controller:&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Add&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;get&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;unless&lt;/b&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id.blank?&lt;br /&gt;   &lt;font color="#00ffff"&gt;&lt;b&gt;@user&lt;/b&gt;&lt;/font&gt; = &lt;font color="#00ffff"&gt;&lt;b&gt;User&lt;/b&gt;&lt;/font&gt;.find &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id&lt;br /&gt;   &lt;font color="#00ffff"&gt;&lt;b&gt;@link&lt;/b&gt;&lt;/font&gt; = &lt;font color="#00ffff"&gt;&lt;b&gt;Link&lt;/b&gt;&lt;/font&gt;.new &lt;font color="#00ffff"&gt;&lt;b&gt;:title&lt;/b&gt;&lt;/font&gt; =&amp;gt; input.link_title,&lt;br /&gt;    &lt;font color="#00ffff"&gt;&lt;b&gt;:address&lt;/b&gt;&lt;/font&gt; =&amp;gt; input.address,&lt;br /&gt;     &lt;font color="#00ffff"&gt;&lt;b&gt;:description&lt;/b&gt;&lt;/font&gt; =&amp;gt; input.description,&lt;br /&gt;      &lt;font color="#00ffff"&gt;&lt;b&gt;:user_id&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id,&lt;br /&gt;       &lt;font color="#00ffff"&gt;&lt;b&gt;:date&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#00ffff"&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/font&gt;.now&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  render &lt;font color="#00ffff"&gt;&lt;b&gt;:add&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;post&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;unless&lt;/b&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id.blank?&lt;br /&gt;   link = &lt;font color="#00ffff"&gt;&lt;b&gt;Link&lt;/b&gt;&lt;/font&gt;.create &lt;font color="#00ffff"&gt;&lt;b&gt;:title&lt;/b&gt;&lt;/font&gt; =&amp;gt; input.link_title,&lt;br /&gt;    &lt;font color="#00ffff"&gt;&lt;b&gt;:address&lt;/b&gt;&lt;/font&gt; =&amp;gt; input.address,&lt;br /&gt;     &lt;font color="#00ffff"&gt;&lt;b&gt;:description&lt;/b&gt;&lt;/font&gt; =&amp;gt; input.description,&lt;br /&gt;      &lt;font color="#00ffff"&gt;&lt;b&gt;:user_id&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id,&lt;br /&gt;       &lt;font color="#00ffff"&gt;&lt;b&gt;:date&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#00ffff"&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/font&gt;.now&lt;br /&gt;   redirect &lt;font color="#00ffff"&gt;&lt;b&gt;Index&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;View&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;R&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/view/(\d+)&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/view&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;get&lt;/b&gt;&lt;/font&gt; link_id&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;unless&lt;/b&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id.blank?&lt;br /&gt;     &lt;font color="#00ffff"&gt;&lt;b&gt;@user&lt;/b&gt;&lt;/font&gt; = &lt;font color="#00ffff"&gt;&lt;b&gt;User&lt;/b&gt;&lt;/font&gt;.find &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#00ffff"&gt;&lt;b&gt;@link&lt;/b&gt;&lt;/font&gt; = &lt;font color="#00ffff"&gt;&lt;b&gt;Link&lt;/b&gt;&lt;/font&gt;.find link_id&lt;br /&gt;  render &lt;font color="#00ffff"&gt;&lt;b&gt;:view&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;post&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;unless&lt;/b&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id.blank?&lt;br /&gt;   &lt;font color="#00ffff"&gt;&lt;b&gt;@link&lt;/b&gt;&lt;/font&gt; = &lt;font color="#00ffff"&gt;&lt;b&gt;Link&lt;/b&gt;&lt;/font&gt;.find input.link_id&lt;br /&gt;   &lt;font color="#00ffff"&gt;&lt;b&gt;@link&lt;/b&gt;&lt;/font&gt;.update_attributes &lt;font color="#00ffff"&gt;&lt;b&gt;:title&lt;/b&gt;&lt;/font&gt; =&amp;gt;&lt;br /&gt;              input.link_title,&lt;br /&gt;    &lt;font color="#00ffff"&gt;&lt;b&gt;:address&lt;/b&gt;&lt;/font&gt; =&amp;gt; input.address,&lt;br /&gt;     &lt;font color="#00ffff"&gt;&lt;b&gt;:description&lt;/b&gt;&lt;/font&gt; =&amp;gt; input.description&lt;br /&gt;   redirect &lt;font color="#00ffff"&gt;&lt;b&gt;Index&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The get-methods of both classes does the same user-checking as almost every other Controllers (checking user, defining some variables, rendering a page). The post-methods only differ in the way they handle the input. While the Add#post-method creates a new link in the database the View#post-method just updates the atributes. The View gets the functionality you normally put in an Edit-controller but I thought it doesn't hurt if we merge them. Something special is the fact that the Add#post-method already accepts data-input. This is used for the convenient feature of a one-click-adding feature (I'll deal with in a later post).&lt;br /&gt;&lt;br /&gt;Next one is the Delete-method (sorry, it's kind of a marathon but 300 lines are still 300 lines):&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Delete&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;R&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/delete/(\d+)&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/delete&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;get&lt;/b&gt;&lt;/font&gt; link_id&lt;br /&gt;    &lt;font color="#ffff00"&gt;&lt;b&gt;unless&lt;/b&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id.blank?&lt;br /&gt;     &lt;font color="#00ffff"&gt;&lt;b&gt;@user&lt;/b&gt;&lt;/font&gt; = &lt;font color="#00ffff"&gt;&lt;b&gt;User&lt;/b&gt;&lt;/font&gt;.find &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id&lt;br /&gt;     &lt;font color="#00ffff"&gt;&lt;b&gt;@link&lt;/b&gt;&lt;/font&gt; = &lt;font color="#00ffff"&gt;&lt;b&gt;Link&lt;/b&gt;&lt;/font&gt;.find link_id&lt;br /&gt;     render &lt;font color="#00ffff"&gt;&lt;b&gt;:delete&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;post&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#ffff00"&gt;&lt;b&gt;unless&lt;/b&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id.blank?&lt;br /&gt;             &lt;font color="#00ffff"&gt;&lt;b&gt;Link&lt;/b&gt;&lt;/font&gt;.delete(input.link_id)&lt;br /&gt;             redirect &lt;font color="#00ffff"&gt;&lt;b&gt;Index&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#ffff00"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;     redirect &lt;font color="#00ffff"&gt;&lt;b&gt;Index&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Quite self-descriptive: the get-method does the standard-job as seen in Add/View; the post-method deletes the data-base-entry.&lt;br /&gt;&lt;br /&gt;So just login/logout-Controllers are still missing and then we are finally finished with the controller (almost, the Styles come in the next post):&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Login&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;post&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#00ffff"&gt;&lt;b&gt;@user&lt;/b&gt;&lt;/font&gt; = &lt;font color="#00ffff"&gt;&lt;b&gt;User&lt;/b&gt;&lt;/font&gt;.find &lt;font color="#00ffff"&gt;&lt;b&gt;:first&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;   &lt;font color="#00ffff"&gt;&lt;b&gt;:conditions&lt;/b&gt;&lt;/font&gt; =&amp;gt; [&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;username = ? AND&lt;br /&gt;        password = ?&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;        input.username, input.password]&lt;br /&gt;&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@user&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#00ffff"&gt;&lt;b&gt;@login&lt;/b&gt;&lt;/font&gt; = &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;login success !&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id = &lt;font color="#00ffff"&gt;&lt;b&gt;@user&lt;/b&gt;&lt;/font&gt;.id&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#ffff00"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; input.user_add &lt;font color="#ffff00"&gt;&lt;b&gt;and&lt;/b&gt;&lt;/font&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;not&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        input.password.empty? &lt;font color="#ffff00"&gt;&lt;b&gt;and&lt;/b&gt;&lt;/font&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;not&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;         input.username.empty?&lt;br /&gt;    &lt;font color="#00ffff"&gt;&lt;b&gt;@user&lt;/b&gt;&lt;/font&gt; = &lt;font color="#00ffff"&gt;&lt;b&gt;User&lt;/b&gt;&lt;/font&gt;.create &lt;font color="#00ffff"&gt;&lt;b&gt;:username&lt;/b&gt;&lt;/font&gt; =&amp;gt;&lt;br /&gt;      input.username,&lt;br /&gt;     &lt;font color="#00ffff"&gt;&lt;b&gt;:password&lt;/b&gt;&lt;/font&gt; =&amp;gt; input.password&lt;br /&gt;    &lt;font color="#00ffff"&gt;&lt;b&gt;@login&lt;/b&gt;&lt;/font&gt; = &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Account successfully created!&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#ffff00"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#00ffff"&gt;&lt;b&gt;@login&lt;/b&gt;&lt;/font&gt; = &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Wrong user name or password!&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  render &lt;font color="#00ffff"&gt;&lt;b&gt;:login&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Logout&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;get&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#00ffff"&gt;&lt;b&gt;@state&lt;/b&gt;&lt;/font&gt;.user_id = &lt;font color="#ff40ff"&gt;&lt;b&gt;nil&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  render &lt;font color="#00ffff"&gt;&lt;b&gt;:logout&lt;/b&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The Login#get method does all the magic of logging a user in. Incase there is a new user to be created it adds an entry to the &lt;i&gt;grabr_users&lt;/i&gt;-table. The Login-class just sets the cooky-user-information to nil to tell Grabr the user is not longer logged in.&lt;br /&gt;&lt;br /&gt;Puh, thats was quite a rush through the whole Grabr-controller. But I think we should quickly come to terms now, as we are all excited what Grabr looks like in action. If I'm leaving some things out or miss any point leave a hint.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4025734203653274558-3236497612556223721?l=polzr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://polzr.blogspot.com/feeds/3236497612556223721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4025734203653274558&amp;postID=3236497612556223721' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/3236497612556223721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/3236497612556223721'/><link rel='alternate' type='text/html' href='http://polzr.blogspot.com/2007/03/everything-under-campingcontrol.html' title='Everything under Camping::Control'/><author><name>polzr</name><uri>http://www.blogger.com/profile/08814485561582487607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4025734203653274558.post-7361592978007536924</id><published>2007-03-22T20:05:00.000+01:00</published><updated>2007-04-07T18:58:09.738+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='microframework'/><category scheme='http://www.blogger.com/atom/ns#' term='camping'/><title type='text'>Bookmarking.goes :Camping</title><content type='html'>As my final exams are approaching there isn't so much time for coding left. But finally I found some time to code another little app I want to share with you.&lt;br /&gt;&lt;br /&gt;You probably know &lt;a href="http://del.icio.us"&gt;del.icio.us&lt;/a&gt;. It's a convenient way to store your bookmarks and make them accessible from every computer with internet access. Well, if there is someone on the planet who can build that, we can do the same, at least in a smaller format. Yes, you got me right. We will write our own bookmarking system with Camping! And guess what, we will only need 300 lines of code (including stylesheets)!&lt;br /&gt;&lt;br /&gt;So lets get started by looking at the principle structure of our bookmarking-system. Our camping-app will store our bookmarks lokaly in a sqlite-database (a short walk-through for sqlite is already in the pipeline) and should also allow us to modify and delete specific entries. The second and most important feature is a user-control using the Session-library of camping as we want to allow the usage by multiple users.&lt;br /&gt;And would't it be nice if we had a button in our browser-bookmark-bar for adding a cool page to our bookmark-app with one click?&lt;br /&gt;&lt;br /&gt;Well, one step after another. For now we'll have a look on the rough outline of our app I named Grabr.&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;require&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;camping&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;require&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;camping/session&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;Camping&lt;/b&gt;&lt;/font&gt;.goes &lt;font color="#00ffff"&gt;&lt;b&gt;:Grabr&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;module &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Grabr&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#8080ff"&gt;&lt;b&gt;include&lt;/b&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;Camping&lt;/b&gt;&lt;/font&gt;::&lt;font color="#00ffff"&gt;&lt;b&gt;Session&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;module &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Grabr::Models&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Link&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;Base&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        belongs_to &lt;font color="#00ffff"&gt;&lt;b&gt;:user&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        has_many &lt;font color="#00ffff"&gt;&lt;b&gt;:tags&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Tag&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;Base&lt;/b&gt;&lt;/font&gt;; &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;User&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;Base&lt;/b&gt;&lt;/font&gt;; &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;module &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Grabr::Controllers&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Index&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;R&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Add&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;View&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;R&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/view/(\d+)&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/view&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Delete&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;R&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/delete/(\d+)&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;                                 &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/delete&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Login&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Logout&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Style&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;R&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/styles.css&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;module &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Grabr::Views&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;Grabr.create&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#00ffff"&gt;&lt;b&gt;Camping&lt;/b&gt;&lt;/font&gt;::&lt;font color="#00ffff"&gt;&lt;b&gt;Models&lt;/b&gt;&lt;/font&gt;::&lt;font color="#00ffff"&gt;&lt;b&gt;Session&lt;/b&gt;&lt;/font&gt;.create_schema&lt;br /&gt;    &lt;font color="#00ffff"&gt;&lt;b&gt;Grabr&lt;/b&gt;&lt;/font&gt;::&lt;font color="#00ffff"&gt;&lt;b&gt;Models&lt;/b&gt;&lt;/font&gt;.create_schema &lt;font color="#00ffff"&gt;&lt;b&gt;:assume&lt;/b&gt;&lt;/font&gt; =&amp;gt;&lt;br /&gt;(&lt;font color="#00ffff"&gt;&lt;b&gt;Grabr&lt;/b&gt;&lt;/font&gt;::&lt;font color="#00ffff"&gt;&lt;b&gt;Models&lt;/b&gt;&lt;/font&gt;::&lt;font color="#00ffff"&gt;&lt;b&gt;Link&lt;/b&gt;&lt;/font&gt;.table_exists? ? &lt;font color="#ff40ff"&gt;&lt;b&gt;1.0&lt;/b&gt;&lt;/font&gt; : &lt;font color="#ff40ff"&gt;&lt;b&gt;0.0&lt;/b&gt;&lt;/font&gt;)&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As you can see we include the camping-session-lib to get a grip on different users. Then we declare the data-structure we'll use. The &lt;i&gt;has_many&lt;/i&gt; and &lt;i&gt;belongs_to&lt;/i&gt; are ActiveRecord-Statements (I hope I find some time to give you a small introduction in the near future) we use to state that a link aka bookmark belongs to a certain user (the one who posts the link) and that a link can be described by several tags. The tag- and user-statement should be clear.&lt;br /&gt;&lt;br /&gt;In our controller we add the functionality to add, view/edit and delete bookmarks. With the login/logout-controller we implement the key-functions for the user-control system.&lt;br /&gt;&lt;br /&gt;I dropped the View-methods as they are analogue to the controller.&lt;br /&gt;&lt;br /&gt;The &lt;i&gt;Grabr.create&lt;/i&gt;-Method creates a new Session for each instance of our app and creates our database-schema.&lt;br /&gt;&lt;br /&gt;So far, so good. Next time we will deal with the Data-structure and the Controllers. I hope you'll enjoy building Grabr with me!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4025734203653274558-7361592978007536924?l=polzr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://polzr.blogspot.com/feeds/7361592978007536924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4025734203653274558&amp;postID=7361592978007536924' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/7361592978007536924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/7361592978007536924'/><link rel='alternate' type='text/html' href='http://polzr.blogspot.com/2007/03/bookmarkinggoes-camping.html' title='Bookmarking.goes :Camping'/><author><name>polzr</name><uri>http://www.blogger.com/profile/08814485561582487607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4025734203653274558.post-8963949200568294108</id><published>2007-02-17T19:45:00.000+01:00</published><updated>2007-04-07T18:58:21.050+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='microframework'/><category scheme='http://www.blogger.com/atom/ns#' term='camping'/><title type='text'>require 'editors comment'</title><content type='html'>As my blog (aka tutorial) gets more and more hits, I think there are some things to be made clear at this point:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;I'm not a native english speaker or writer, so I beg your pardon for any stylistic or grammatical mistake. Although I got 106 points in the TOEFL ibt, it doesn't mean I'm writing without any faults (as my test-papers in school show too ;-)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I wrote this little tutorial after I got into camping by reading why's example-apps. There are some easier ways (beneath this tutorial). For this short list I googled a bit and found two other tutorials on camping I want to share with you&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Ola-Bini wrote a short and nice &lt;a href="http://ola-bini.blogspot.com/2006/08/jruby-tutorial-2-going-camping.html"&gt;introductio&lt;/a&gt;n based on jruby. Btw., you should add his blog to your book-mark-list if you don't want to miss some very cool Ruby-tweaks. He also wrote a nice &lt;a href="http://ola-bini.blogspot.com/search/label/metaprogramming"&gt;intoduction into meta-programming&lt;/a&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The second one is a &lt;a href="http://blog.rubyenrails.nl/articles/2006/10/12/proto-prototype"&gt;tutorial&lt;/a&gt; written in Dutch. If you understand Dutch give it a try, the code-samples look promisingly.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;If you have any questions, critique or something else to share, please feel free and leave a comment. It would be nice if you could help to improve this little tutorial-blog.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Although I've been coding a while now, I neither have the experience of a professional programmer nor the coding style of such a guy. So all code-samples are hopefully working, but they don't have the quality of 'real' code. Especially if Ruby (and Camping) is your first step into the world of code, please ceep to other sources if you want to develop or improve your coding-style. If you see any problems, leave a comment.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4025734203653274558-8963949200568294108?l=polzr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://polzr.blogspot.com/feeds/8963949200568294108/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4025734203653274558&amp;postID=8963949200568294108' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/8963949200568294108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/8963949200568294108'/><link rel='alternate' type='text/html' href='http://polzr.blogspot.com/2007/02/require-editors-comment.html' title='require &apos;editors comment&apos;'/><author><name>polzr</name><uri>http://www.blogger.com/profile/08814485561582487607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4025734203653274558.post-6489809204684248062</id><published>2007-02-10T16:01:00.000+01:00</published><updated>2007-04-07T18:58:31.329+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='microframework'/><category scheme='http://www.blogger.com/atom/ns#' term='camping'/><title type='text'>M + (V + C) = MVC</title><content type='html'>I promised to upgrade on some more exciting stuff. Yes, but.. at first we still have to deal with the missing basic: the model.&lt;br /&gt;&lt;br /&gt;As I've already mentioned, Camping organizes your different parts of your page in three categories: the model, the the view and the controller. We dealt with the last two ones in earlier posts. Now let's go for the third one. And as you'll see now it gives us the real power we need to build smashing and dynamic webapps.&lt;br /&gt;&lt;br /&gt;With the view we can manage the look of our pages, the controller does the magic behind. But what's missing? Obviously, the data! A user generates data, the data has to be stored anywhere and the model handles this flow of data between the view and the controller (the user) and the database. In camping (as in Rails) the model uses Active Record to have the dirty work done.&lt;br /&gt;For the user, Active Record delivers a easy and short way to define the organization of our data.&lt;br /&gt;Let's have a look at the basic structure of a model-definition in camping:&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;module  &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Simple::Models&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Name&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;Base&lt;/b&gt;&lt;/font&gt;;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;CreateTheBasics&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;V&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff40ff"&gt;&lt;b&gt;1.0&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;self.up&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        create_table &lt;font color="#00ffff"&gt;&lt;b&gt;:simple_names&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;                  &lt;font color="#00ffff"&gt;&lt;b&gt;:force&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff40ff"&gt;&lt;b&gt;true&lt;/b&gt;&lt;/font&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt; |&lt;font color="#00ffff"&gt;&lt;b&gt;t&lt;/b&gt;&lt;/font&gt;|&lt;br /&gt;           t.column &lt;font color="#00ffff"&gt;&lt;b&gt;:id&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:integer&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;                  &lt;font color="#00ffff"&gt;&lt;b&gt;:null&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff40ff"&gt;&lt;b&gt;false&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;           t.column &lt;font color="#00ffff"&gt;&lt;b&gt;:name&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;                  &lt;font color="#00ffff"&gt;&lt;b&gt;:string&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:limit&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff40ff"&gt;&lt;b&gt;255&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#00ffff"&gt;&lt;b&gt;Name&lt;/b&gt;&lt;/font&gt;.create &lt;font color="#00ffff"&gt;&lt;b&gt;:name&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;whytheluckystiff&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;self.down&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        drop_table &lt;font color="#00ffff"&gt;&lt;b&gt;:names&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;module &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Simple::Controllers&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;module &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Simple::Views&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;Simple.create&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#00ffff"&gt;&lt;b&gt;Simple&lt;/b&gt;&lt;/font&gt;::&lt;font color="#00ffff"&gt;&lt;b&gt;Models&lt;/b&gt;&lt;/font&gt;.create_schema &lt;font color="#00ffff"&gt;&lt;b&gt;:assume&lt;/b&gt;&lt;/font&gt; =&amp;gt; (&lt;br /&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;Simple&lt;/b&gt;&lt;/font&gt;::&lt;font color="#00ffff"&gt;&lt;b&gt;Models&lt;/b&gt;&lt;/font&gt;::&lt;font color="#00ffff"&gt;&lt;b&gt;Name&lt;/b&gt;&lt;/font&gt;.table_exists? ? &lt;font color="#ff40ff"&gt;&lt;b&gt;1.0&lt;/b&gt;&lt;/font&gt; : &lt;font color="#ff40ff"&gt;&lt;b&gt;0.0&lt;/b&gt;&lt;/font&gt;)&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As you can see the Models are added in a new module. At first we create a class for our name-directory called &lt;i&gt;Name&lt;/i&gt;. We'll use this class in a later post to define the relationship between other data. Then we add the class &lt;i&gt;CreateTheBasics&lt;/i&gt;. This class called &lt;i&gt;CreateTheBasics&lt;/i&gt; is necessary to create the database. The &lt;i&gt;&amp;lt; V 1.0&lt;/i&gt; is used for a version-control. That means, if the table exists, the method &lt;i&gt;Simple.create&lt;/i&gt; just loads the current data from the sqlite-database (sqlite is the database-engine used in camping) instead of creating a new one.&lt;br /&gt;Then we create a very, very simple database with two columns, &lt;i&gt;id&lt;/i&gt; and &lt;i&gt;name&lt;/i&gt;. Now we are done.&lt;br /&gt;&lt;br /&gt;We can use the data now in our greeting-app. Just call &lt;i&gt;Models::Name.someMethod&lt;/i&gt; to interact with you data. The simplest one is &lt;i&gt;Models::Name.find :all&lt;/i&gt; which we'll use now. But we modify it a bit by adding an alphabetical order-option:&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Index&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;R&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;get&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#00ffff"&gt;&lt;b&gt;@names&lt;/b&gt;&lt;/font&gt; = &lt;font color="#00ffff"&gt;&lt;b&gt;Name&lt;/b&gt;&lt;/font&gt;.find(&lt;font color="#00ffff"&gt;&lt;b&gt;:all&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:order&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#00ffff"&gt;&lt;b&gt;:name&lt;/b&gt;&lt;/font&gt;)&lt;br /&gt;        render &lt;font color="#00ffff"&gt;&lt;b&gt;:index&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Greeter&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;R&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/greeter/(\w+)&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/greeter&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;get&lt;/b&gt;&lt;/font&gt; message&lt;br /&gt;        render message&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;post&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#00ffff"&gt;&lt;b&gt;@names&lt;/b&gt;&lt;/font&gt; = input.names.split(&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;, &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;)&lt;br /&gt;        &lt;font color="#00ffff"&gt;&lt;b&gt;@names&lt;/b&gt;&lt;/font&gt;.each &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt; |&lt;font color="#00ffff"&gt;&lt;b&gt;n&lt;/b&gt;&lt;/font&gt;|&lt;br /&gt;        &lt;font color="#00ffff"&gt;&lt;b&gt;Name&lt;/b&gt;&lt;/font&gt;.create &lt;font color="#00ffff"&gt;&lt;b&gt;:name&lt;/b&gt;&lt;/font&gt; =&amp;gt; n &lt;font color="#ffff00"&gt;&lt;b&gt;unless&lt;/b&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;Name&lt;/b&gt;&lt;/font&gt;.find(&lt;br /&gt;          &lt;font color="#00ffff"&gt;&lt;b&gt;:first&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:conditions&lt;/b&gt;&lt;/font&gt; =&amp;gt; {&lt;font color="#00ffff"&gt;&lt;b&gt;:name&lt;/b&gt;&lt;/font&gt; =&amp;gt; n})&lt;br /&gt;        &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        render &lt;font color="#00ffff"&gt;&lt;b&gt;:greetings&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So we defined a class-variable &lt;i&gt;@names&lt;/i&gt; in the &lt;i&gt;Index&lt;/i&gt;-class. In the &lt;i&gt;Greeting&lt;/i&gt;-class we modify the &lt;i&gt;post&lt;/i&gt;-method. We split the input already in the Controller to use the array of given names for adding them in the "already greeted"-list. But we don't add every name we get. We only add a name if it doesn't exists already.&lt;br /&gt;&lt;br /&gt;The last thing we have to change is the &lt;i&gt;index&lt;/i&gt;-view (and remove the &lt;i&gt;split(', ')&lt;/i&gt; from the greeting-view):&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;index&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    p.hello &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Welcome on my greeting-engine!&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    p &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Names you already greeted:&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#ffff00"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/font&gt; n &lt;font color="#ffff00"&gt;&lt;b&gt;in&lt;/b&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;&lt;b&gt;@names&lt;/b&gt;&lt;/font&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        a n.name, &lt;font color="#00ffff"&gt;&lt;b&gt;:href&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;Greeter&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;            &lt;font color="#00ffff"&gt;&lt;b&gt;:post&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:names&lt;/b&gt;&lt;/font&gt; =&amp;gt; n.name); br&lt;br /&gt;    &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    br&lt;br /&gt;    _greet&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;greetings&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#00ffff"&gt;&lt;b&gt;@names&lt;/b&gt;&lt;/font&gt;.each &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt; |&lt;font color="#00ffff"&gt;&lt;b&gt;n&lt;/b&gt;&lt;/font&gt;|&lt;br /&gt;        p.hello(&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Hello &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt; + n + &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;!&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;)&lt;br /&gt;    &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    a(&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Back to input&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:href&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;Index&lt;/b&gt;&lt;/font&gt;))&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now we get a list of the already greeted names. You can click on them to get a greeting for the specific name.&lt;br /&gt;&lt;br /&gt;I introduced you to the concept of models in this post. So you know everything you really need to know to write real web-apps now. At this point I strongly recommend to start coding for yourself. Code a blog-engine, a wiki or everything else what comes to your mind. Be creative and enjoy the power of camping! You'll learn a lot more than by just reading blogs or tutorials.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4025734203653274558-6489809204684248062?l=polzr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://polzr.blogspot.com/feeds/6489809204684248062/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4025734203653274558&amp;postID=6489809204684248062' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/6489809204684248062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/6489809204684248062'/><link rel='alternate' type='text/html' href='http://polzr.blogspot.com/2007/02/m-v-c-mvc.html' title='M + (V + C) = MVC'/><author><name>polzr</name><uri>http://www.blogger.com/profile/08814485561582487607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4025734203653274558.post-7100238974231166941</id><published>2007-02-06T14:18:00.000+01:00</published><updated>2007-04-07T18:58:40.385+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='microframework'/><category scheme='http://www.blogger.com/atom/ns#' term='camping'/><title type='text'>everything.inject {|sum, post| sum += post}</title><content type='html'>Now let's sum up all code-snippets, so you don't have to copy and past all the stuff if you wanna start from here.&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;require&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;camping&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;Camping&lt;/b&gt;&lt;/font&gt;.goes &lt;font color="#00ffff"&gt;&lt;b&gt;:Simple&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;module &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Simple::Controllers&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Index&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;R&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;get&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        render &lt;font color="#00ffff"&gt;&lt;b&gt;:index&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Greeter&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;R&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/greeter/(\w+)&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/greeter&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;get&lt;/b&gt;&lt;/font&gt; message&lt;br /&gt;        render message&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;post&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#00ffff"&gt;&lt;b&gt;@names&lt;/b&gt;&lt;/font&gt; = input.names&lt;br /&gt;        render &lt;font color="#00ffff"&gt;&lt;b&gt;:greetings&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Style&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;R&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/styles.css&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;get&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#00ffff"&gt;&lt;b&gt;@headers&lt;/b&gt;&lt;/font&gt;[&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Content-Type&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;] =&lt;br /&gt;                   &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;text/css; charset=utf-8&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#00ffff"&gt;&lt;b&gt;@body&lt;/b&gt;&lt;/font&gt; = &lt;font color="#ff6060"&gt;&lt;b&gt;%{&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;            body {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;                background-color: #BDFFB0;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;            }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;            p.hello {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;                color: red;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;            }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;        &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;module &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Simple::Views&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;layout&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    html &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        head &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;            title &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;my camping site&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;            link &lt;font color="#00ffff"&gt;&lt;b&gt;:rel&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;stylesheet&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;                 &lt;font color="#00ffff"&gt;&lt;b&gt;:type&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;text/css&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;                 &lt;font color="#00ffff"&gt;&lt;b&gt;:href&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/styles.css&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;                 &lt;font color="#00ffff"&gt;&lt;b&gt;:media&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;screen&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        body &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#ff40ff"&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt; &amp;lt;&amp;lt; &lt;font color="#ffff00"&gt;&lt;b&gt;yield&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;index&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    p.hello &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Welcome on my greeting-engine!&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    _greet&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;greetings&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#00ffff"&gt;&lt;b&gt;@names&lt;/b&gt;&lt;/font&gt;.split(&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;, &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;).each &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt; |&lt;font color="#00ffff"&gt;&lt;b&gt;n&lt;/b&gt;&lt;/font&gt;|&lt;br /&gt;        p.hello (&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Hello &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt; + n + &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;!&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;)&lt;br /&gt;    &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    a(&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Back to input&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:href&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;Index&lt;/b&gt;&lt;/font&gt;))&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;#Partials start here!&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;_greet&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    form &lt;font color="#00ffff"&gt;&lt;b&gt;:action&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;Greeter&lt;/b&gt;&lt;/font&gt;),&lt;br /&gt;                 &lt;font color="#00ffff"&gt;&lt;b&gt;:method&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;post&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        label &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Persons you wanna greet:&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;                 &lt;font color="#00ffff"&gt;&lt;b&gt;:for&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;names&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        br&lt;br /&gt;        input &lt;font color="#00ffff"&gt;&lt;b&gt;:name&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;names&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:type&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;text&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        br&lt;br /&gt;        input &lt;font color="#00ffff"&gt;&lt;b&gt;:type&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;submit&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;                 &lt;font color="#00ffff"&gt;&lt;b&gt;:value&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Greet!&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4025734203653274558-7100238974231166941?l=polzr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://polzr.blogspot.com/feeds/7100238974231166941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4025734203653274558&amp;postID=7100238974231166941' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/7100238974231166941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/7100238974231166941'/><link rel='alternate' type='text/html' href='http://polzr.blogspot.com/2007/02/everythinginject-sum-post-sum-post.html' title='everything.inject {|sum, post| sum += post}'/><author><name>polzr</name><uri>http://www.blogger.com/profile/08814485561582487607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4025734203653274558.post-5137263826693170642</id><published>2007-02-06T13:11:00.000+01:00</published><updated>2007-04-07T18:58:50.228+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='microframework'/><category scheme='http://www.blogger.com/atom/ns#' term='camping'/><title type='text'>#Partials start here</title><content type='html'>Let's tune our simple Camping-site with some interactivity! Imagine you want to greet not just yourself, but maybe your friends or your grandma!&lt;br /&gt;&lt;br /&gt;To greet your friend Jimmy, we have to tell our "app" about him and his name. And we do that with a little input-field. In both Rails and camping this is done with so-called "Partials". As you might guess, these partials aren't complete webpages. They are only fragments of a page, in our case an input-area. So lets define a partial with an input field.&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;_greet&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    form &lt;font color="#00ffff"&gt;&lt;b&gt;:action&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;Greeter&lt;/b&gt;&lt;/font&gt;),&lt;br /&gt;                 &lt;font color="#00ffff"&gt;&lt;b&gt;:method&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;post&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt; &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        label &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Persons you wanna greet:&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;                 &lt;font color="#00ffff"&gt;&lt;b&gt;:for&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;names&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        br&lt;br /&gt;        input &lt;font color="#00ffff"&gt;&lt;b&gt;:name&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;names&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:type&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;text&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        br&lt;br /&gt;        input &lt;font color="#00ffff"&gt;&lt;b&gt;:type&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;submit&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;                 &lt;font color="#00ffff"&gt;&lt;b&gt;:value&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Greet!&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now we've got a partial with a button. If the button is pressed the method 'post' in the &lt;i&gt;Greeting&lt;/i&gt;-controller will be called. So the next step is to define this &lt;i&gt;post&lt;/i&gt;-method:&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Greeter&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;R&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/greeter/(\w+)&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;, &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/greeter&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;get&lt;/b&gt;&lt;/font&gt; message&lt;br /&gt;        render message&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;post&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#00ffff"&gt;&lt;b&gt;@names&lt;/b&gt;&lt;/font&gt; = input.names&lt;br /&gt;        render &lt;font color="#00ffff"&gt;&lt;b&gt;:greetings&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As you might have noticed, we had to change the Regular Expression too, since we don't pass the input over the URL and will use the URL '/greeter'. We define a class-variable &lt;i&gt;@names&lt;/i&gt; which contains the names you typed in the &lt;i&gt;_greeter&lt;/i&gt;-partial. This variable is also accessible from the &lt;i&gt;'greetings'&lt;/i&gt;-view. So lets define it. You will see some pretty cool Ruby-maigc now...&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;greetings&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#00ffff"&gt;&lt;b&gt;@names&lt;/b&gt;&lt;/font&gt;.split(&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;, &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;).each &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt; |&lt;font color="#00ffff"&gt;&lt;b&gt;n&lt;/b&gt;&lt;/font&gt;|&lt;br /&gt;        p.hello (&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Hello &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt; + n + &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;!&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;)&lt;br /&gt;    &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    a(&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Back to input&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;:href&lt;/b&gt;&lt;/font&gt; =&amp;gt; R(&lt;font color="#00ffff"&gt;&lt;b&gt;Index&lt;/b&gt;&lt;/font&gt;))&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Well, if you have already some experience with Ruby thats just erveryday-stuff. But if you came from say Java this is a reason alone to dive into Ruby.&lt;br /&gt;We split the given String containing the names of the people you wanna greet. So you see already the way you'll enter a list of names ("Jimmy, Paul, Mary").&lt;br /&gt;The last task is to update the &lt;i&gt;index&lt;/i&gt;-view by adding the &lt;i&gt;_greet&lt;/i&gt;-partial.&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;index&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    p.hello &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Welcome on my greeting-engine!&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    _greet&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now we are done! Thats the ruby-/camping-way of webcoding. Much cooler than HTML, isn't it?&lt;br /&gt;&lt;br /&gt;As we've reached a certain level of complexity, I strongly recommend to take a break and do some projects for your own. By writing your apps you'll learn a lot. With the toolbox you got with our Simple-project you can do more than you might imagine at the moment. So feel free and start building your own camp in the wild!&lt;br /&gt;Just as an inspiration for some praciticing:&lt;ul&gt;&lt;li&gt;a little Calculator with a webfrontend&lt;/li&gt;&lt;br /&gt;&lt;li&gt;a Tic-Tac-Toe for your local network (if you avtivate websharing, your app will be available over your whole local net)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Everything you could dream of (please share your ideas with a comment!)&lt;/li&gt;&lt;/ul&gt;One thing at the end: Please don't forget that you have the power of Ruby right at your fingertips. Ruby is one of the coolest, easiest and most powerful script-languages. And what if you add a genious web-microframework...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4025734203653274558-5137263826693170642?l=polzr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://polzr.blogspot.com/feeds/5137263826693170642/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4025734203653274558&amp;postID=5137263826693170642' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/5137263826693170642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/5137263826693170642'/><link rel='alternate' type='text/html' href='http://polzr.blogspot.com/2007/02/partials-start-here.html' title='#Partials start here'/><author><name>polzr</name><uri>http://www.blogger.com/profile/08814485561582487607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4025734203653274558.post-2577684532144935304</id><published>2007-02-03T12:55:00.000+01:00</published><updated>2007-04-07T18:58:59.148+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='microframework'/><category scheme='http://www.blogger.com/atom/ns#' term='camping'/><title type='text'>pimpin' my Camp</title><content type='html'>Hope you enjoyed your first steps camping in the wild!&lt;br /&gt;&lt;br /&gt;Now, as we've got a simple site, we add some colour and other goodies to our Camp. I think theses ugly Hello and Goodd Bye Messages deserve a few lines of code.&lt;br /&gt;&lt;br /&gt;As you know, in HTML we use CSS to tweak the page. And you might have guessed: we use CSS in Camping too. In Camping the Ruby-way of HTML, Markaby, is used. Markaby has been developed by whytheluckystiff too. If you have any questions, head for his &lt;a href="http://code.whytheluckystiff.net/markaby/"&gt;trac-repo&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;But now lets get into it. We add a &lt;i&gt;Style&lt;/i&gt;-Class into our Controller and are almost done. Just define a header and body inside the get-Method and we can start pimpin' our Camp.&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Style&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;R&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/styles.css&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;get&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#00ffff"&gt;&lt;b&gt;@headers&lt;/b&gt;&lt;/font&gt;[&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Content-Type&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;] = &lt;br /&gt;                   &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;text/css; charset=utf-8&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#00ffff"&gt;&lt;b&gt;@body&lt;/b&gt;&lt;/font&gt; = &lt;font color="#ff6060"&gt;&lt;b&gt;%{&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;            body {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;                background-color: #BDFFB0;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;            }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;            p.hello {&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;                color: red;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;            }&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;        &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The last thing we have to do, is to add a line into our &lt;i&gt;layout&lt;/i&gt;-method in &lt;i&gt;Simple::Views&lt;/i&gt;.&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;layout&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    html &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        head &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;            title &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;my camping site&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;            link &lt;font color="#00ffff"&gt;&lt;b&gt;:rel&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;stylesheet&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;                 &lt;font color="#00ffff"&gt;&lt;b&gt;:type&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;text/css&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;                 &lt;font color="#00ffff"&gt;&lt;b&gt;:href&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/styles.css&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;                 &lt;font color="#00ffff"&gt;&lt;b&gt;:media&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;screen&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        body &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#ff40ff"&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt; &amp;lt;&amp;lt; &lt;font color="#ffff00"&gt;&lt;b&gt;yield&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now let's use the defined &lt;i&gt;p.hello&lt;/i&gt;.&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;p.hello &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Hello Guyz!&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I recommend to play a bit with the styles, just to get used to the whole code. Maybe you add some other pages. Next time we'll add a new way of interactivity. So keep camping!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4025734203653274558-2577684532144935304?l=polzr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://polzr.blogspot.com/feeds/2577684532144935304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4025734203653274558&amp;postID=2577684532144935304' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/2577684532144935304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/2577684532144935304'/><link rel='alternate' type='text/html' href='http://polzr.blogspot.com/2007/02/pimpin-my-camp.html' title='pimpin&apos; my Camp'/><author><name>polzr</name><uri>http://www.blogger.com/profile/08814485561582487607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4025734203653274558.post-6377077879943005869</id><published>2007-01-31T19:10:00.000+01:00</published><updated>2007-04-07T18:59:08.670+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='microframework'/><category scheme='http://www.blogger.com/atom/ns#' term='camping'/><title type='text'>class More &lt; R '/more'</title><content type='html'>So, how was it?&lt;br /&gt;Well, I hope not too bad. At least the link shouldn't have been the problem.&lt;br /&gt;We will pimp our simple example a bit and in the next post I hope we could begin with some serious stuff.&lt;br /&gt;&lt;br /&gt;But in any way, I have to say something on the structure of a typical camping-file. As you might already have seen in Rails, camping has got at least a Controller and some Views, which contains a layout-method. The regular expression in &lt;i&gt;class Index &lt; R &lt;b&gt;'/'&lt;/b&gt;&lt;/i&gt; is a very basic one and used to invoke the Index-controller by the URL '/' using the 'get'-method.&lt;br /&gt;&lt;br /&gt;Since coding is a lot funnier than theory, lets start with some lines.&lt;br /&gt;Look again at our first verison of our :Simple. Have you already added a new page? If not, we do that now. At first we add a new controller for our greeter.&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Greeter&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;R&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/greeter&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;get&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;         render &lt;font color="#00ffff"&gt;&lt;b&gt;:greeter&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;We use the regexp '/greeter' to link the URL "/greeter".&lt;br /&gt;Then we add a view for our hello-greeter:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;greeter&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    p &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;camping rocks. Spread it!&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So thats it. We have now another nice greeter! Just add 'greeter' to your URL (typically &lt;i&gt;localhost:3301/greeter&lt;/i&gt;).&lt;br /&gt;&lt;br /&gt;But imagine, you want to add a bunch of different greeters, maybe to say "Hello", "Goodbye" and "Yo Man!". It would be annoying to add a Controller for ervery message. And there is a remedy for this problem: Tune the Regexp!&lt;br /&gt;If we sum up all the three ways of greeting in one Controller we will have to add the following lines in &lt;i&gt;Simple::Controllers&lt;/i&gt;:&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Greeter&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;R&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/greeter/(\w+)&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;get&lt;/b&gt;&lt;/font&gt; message&lt;br /&gt;        render message&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The \w+ returns ervery letter-character after the slash.&lt;br /&gt;Now we want to get the three greeter-views:&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;hello&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    p &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Hello Guyz!&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;goodbye&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    p &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Goodbye and good luck!&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;yoman&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    p &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Yo man, check it out, man!&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Wow! Now lets try it with &lt;i&gt;/greeter/hello&lt;/i&gt;. Cool, isn't it? Well..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4025734203653274558-6377077879943005869?l=polzr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://polzr.blogspot.com/feeds/6377077879943005869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4025734203653274558&amp;postID=6377077879943005869' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/6377077879943005869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/6377077879943005869'/><link rel='alternate' type='text/html' href='http://polzr.blogspot.com/2007/01/class-more-r-more.html' title='class More &lt; R &apos;/more&apos;'/><author><name>polzr</name><uri>http://www.blogger.com/profile/08814485561582487607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4025734203653274558.post-3119576644850692620</id><published>2007-01-26T15:19:00.000+01:00</published><updated>2007-04-07T18:59:19.477+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='microframework'/><category scheme='http://www.blogger.com/atom/ns#' term='camping'/><title type='text'>(1..9).to_a.reverse.join(" ") + " Go !"</title><content type='html'>If you want to go camping right now, you'll need the following: (to be installed in this order)&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ruby&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Rubygems&lt;/li&gt;&lt;br /&gt;&lt;li&gt;sqlite&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The Camping-gem&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Camping extras&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;If you need a detailed installation-guide, look at the &lt;a href="http://code.whytheluckystiff.net/camping/"&gt;camping-wiki&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Lets start our camping-trip with a jump in the cold water:&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;require&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;camping&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;Camping&lt;/b&gt;&lt;/font&gt;.goes &lt;font color="#00ffff"&gt;&lt;b&gt;:Simple&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;module &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Simple::Controllers&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Index&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#00ffff"&gt;&lt;b&gt;R&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;get&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;            render &lt;font color="#00ffff"&gt;&lt;b&gt;:index&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;module &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ff00"&gt;&lt;b&gt;Simple::Views&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;layout&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        html &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;            head &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;                title &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;my camping site&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;            body &lt;font color="#ffff00"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#ff40ff"&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt; &amp;lt;&amp;lt; &lt;font color="#ffff00"&gt;&lt;b&gt;yield&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#ffff00"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;def &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;index&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;        p &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;hello world&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Well, before I add some explanations, I recommend to play around with this very simple peace of code. What about adding a link, for example?&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;a &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Google&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;,  &lt;font color="#00ffff"&gt;&lt;b&gt;:href&lt;/b&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;http://www.google.com/&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Or adding a new page?&lt;br /&gt;Explanations will follow, but you'll learn a lot by fiddling your way through some simple additions to the still very simple code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4025734203653274558-3119576644850692620?l=polzr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://polzr.blogspot.com/feeds/3119576644850692620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4025734203653274558&amp;postID=3119576644850692620' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/3119576644850692620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/3119576644850692620'/><link rel='alternate' type='text/html' href='http://polzr.blogspot.com/2007/01/19toareversejoin-go.html' title='(1..9).to_a.reverse.join(&quot; &quot;) + &quot; Go !&quot;'/><author><name>polzr</name><uri>http://www.blogger.com/profile/08814485561582487607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4025734203653274558.post-3185449598171369869</id><published>2007-01-21T12:41:00.000+01:00</published><updated>2007-04-07T18:59:28.631+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='microframework'/><category scheme='http://www.blogger.com/atom/ns#' term='camping'/><title type='text'>*.goes :Camping</title><content type='html'>Since whytheluckystiff released Camping, a microframework, it got a lot of buzz in the ruby-sphere. When I stumbled over it, I was immediately amazed by its simple and straitforward design. Course, if you want to do serious projects, Camping is definitely the wrong way. So its no replacement for Rails, but if you need to get something done quick and dirty, Camping is the perfect framework.&lt;br /&gt;&lt;br /&gt;In this blog I'll deal with the simple basics up to the deep things. As I noticed that there is a lack for any serious documentation for beginners, I thought "Let's start a blog and change this" since everything cool and genious deserves both publicity and documentation.&lt;br /&gt;&lt;br /&gt;Have a lot of fun camping and stay tuned.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4025734203653274558-3185449598171369869?l=polzr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://polzr.blogspot.com/feeds/3185449598171369869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4025734203653274558&amp;postID=3185449598171369869' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/3185449598171369869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4025734203653274558/posts/default/3185449598171369869'/><link rel='alternate' type='text/html' href='http://polzr.blogspot.com/2007/01/goes-camping.html' title='*.goes :Camping'/><author><name>polzr</name><uri>http://www.blogger.com/profile/08814485561582487607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
