<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Marioosh&#039;s developer diary &#187; Rails</title>
	<atom:link href="http://marioosh.5dots.pl/tag/rails/feed/" rel="self" type="application/rss+xml" />
	<link>http://marioosh.5dots.pl</link>
	<description>or something like this</description>
	<lastBuildDate>Mon, 06 Sep 2010 16:23:49 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Recenzja książki &#8220;Enterprise Rails&#8221;</title>
		<link>http://marioosh.5dots.pl/2010/09/recenzja-ksiazki-enterprise-rails/</link>
		<comments>http://marioosh.5dots.pl/2010/09/recenzja-ksiazki-enterprise-rails/#comments</comments>
		<pubDate>Fri, 03 Sep 2010 07:00:08 +0000</pubDate>
		<dc:creator>Marioosh</dc:creator>
				<category><![CDATA[Książeczki]]></category>
		<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[enterprise]]></category>
		<category><![CDATA[Helion]]></category>
		<category><![CDATA[książka]]></category>
		<category><![CDATA[Rails]]></category>

		<guid isPermaLink="false">http://marioosh.5dots.pl/?p=563</guid>
		<description><![CDATA[Od dłuższego czasu patrząc najpierw na plany wydawnicze, potem na nowości &#8211; natykałem się na dość ciekawy tytył: &#8220;Rails. Projektowanie systemów klasy eneterprise&#8221;


Ciekawy, bo jestem natywnym programistą Java, który kojarzony jest właśnie z enterprise.
Mimo ciekawości powstrzymywałem się od zakupu tej książki, z kilku powodów. Po pierwsze oryginalna wersja została opublikowana w 2008 roku więc jest [...]]]></description>
			<content:encoded><![CDATA[<p>Od dłuższego czasu patrząc najpierw na plany wydawnicze, potem na nowości &#8211; natykałem się na dość ciekawy tytył: <a href="http://helion.pl/view/4879E/raprsy.htm">&#8220;Rails. Projektowanie systemów klasy eneterprise&#8221;</a><br />
<a href="http://helion.pl/view/4879E/raprsy.htm"><br />
<img src="http://helion.pl/okladki/326x466/raprsy.jpg" alt="" /></a></p>
<p>Ciekawy, bo jestem natywnym programistą Java, który kojarzony jest właśnie z enterprise.<br />
Mimo ciekawości powstrzymywałem się od zakupu tej książki, z kilku powodów. Po pierwsze oryginalna wersja została opublikowana w 2008 roku więc jest już dość leciwa biorąc pod uwagę szybkość rozwijania się frameworka Rails. Po drugie lada dzień wspomniany framework zostanie opublikowany w wersji 3.0, który wprowadza wiele rewolucyjnych zmian. Bałem się po prostu, że książka ta stanie się nieaktualna już w momencie zakupu.<br />
Szczęśliwym trafem stałem się posiadaczem kupony, który musiałem zrealizować w jednej z trójmiejskich księgarni danego dnia. Będąc jednak w środku zupełnie nie byłem zachwycony zawartością półki (a raczej półeczki) opatrzonej tabliczką &#8220;Informatyka&#8221;. Większość tytułów to były podręczniki szkolne, które jak na razie jeszcze mnie nie interesują (zainteresują jak dzieciaki pójdą do szkoły <img src='http://marioosh.5dots.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ). Jedyną pozycją nadającą się do kupna był wymieniony wyżej tytuł. Nie mając większego wyboru kupiłem tą książkę.<br />
Obawy co do nieważności książki były tak duże, że o mało co, nie wylądowała na półce bez czytania. No ale skoro książka już jest to chociaż pierwszy rozdział&#8230; i tak już do końca.</p>
<p>Moje obawy stały się w pełni niesłuszne. Książka porusza problemy &#8220;okołoprogramistyczne&#8221; i jeżeli już w niej natkniemy się na fragmenty kodu, to łatwo go zaadaptować do nowej wersji Rails. Co więcej &#8211; po przeczytaniu książka awansowała w moim osobistym rankingu z &#8220;książki do starych wersji, częściowo nieaktualne&#8221; do &#8220;książki, które powinny być pod ręką albo w pamięci&#8221;.<br />
Lektura tej książki dostarczyła mi bardzo dużo przydatnych informacji. Co w środku:</p>
<p>Pierwszą rzeczą, której nauczyłem się z książki było pisanie nowych funkcjonalności i wprowadzenie ich do projektu w postaci gemów. Nie ukrywam, że jestem początkującym programistą Ruby&#8217;ego i ten rozdział przyniósł mi dużo wiedzy na ten temat. Niezamierzenie przez autora przyniósł mi także sporo wiedzy o Ruby reflection.</p>
<p>Kolejnym tematem w książce są bazy danych i ich optymalizacja. Poruszane jest tu na prawdę dużo ciekawych tematów, walidacja na poziomie baz danych, normalizacja, triggery, korzystanie z &#8220;widoków bazodanowych&#8221; w aplikacji. Opisane jest także dziedziczenie wielotabelarczyne, które dostarczyło całkiem nowe spojrzenie na railsy. Wiele razy spotkałem się z problemem, które zdają się błahe po przeczytaniu tego rozdziału. Myślę, że dla samego opisu dziedziczenia wielotabelarycznego warto zaopatrzyć się w tą pozycję.</p>
<p>Kolejne rozdziały opisują webservices i jak z nich korzystać efektywnie, oraz problemy cache&#8217;owania aplikacji.</p>
<p>Myślę, że książka ta powinna znaleźć się na półce każdego programisty Rails. Mimo, że na wiek książki nie wszystkie (jednak..) informacje są aktualne, jest ich na prawdę niewiele. Reszta w całości lub w części może być śmiało zastosowana w naszym projekcie, aby zwiększyć jego bezpieczeństwo lub optymalne działanie.</p>
<p><a href="http://www.addtoany.com/add_to/wykop?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F09%2Frecenzja-ksiazki-enterprise-rails%2F&amp;linkname=Recenzja%20ksi%C4%85%C5%BCki%20%26%238220%3BEnterprise%20Rails%26%238221%3B" title="Wykop" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/wykop.png" width="16" height="16" alt="Wykop"/></a> <a href="http://www.addtoany.com/add_to/blip?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F09%2Frecenzja-ksiazki-enterprise-rails%2F&amp;linkname=Recenzja%20ksi%C4%85%C5%BCki%20%26%238220%3BEnterprise%20Rails%26%238221%3B" title="Blip" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/blip.png" width="16" height="16" alt="Blip"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F09%2Frecenzja-ksiazki-enterprise-rails%2F&amp;linkname=Recenzja%20ksi%C4%85%C5%BCki%20%26%238220%3BEnterprise%20Rails%26%238221%3B" title="Twitter" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F09%2Frecenzja-ksiazki-enterprise-rails%2F&amp;linkname=Recenzja%20ksi%C4%85%C5%BCki%20%26%238220%3BEnterprise%20Rails%26%238221%3B" title="Facebook" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/dzone?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F09%2Frecenzja-ksiazki-enterprise-rails%2F&amp;linkname=Recenzja%20ksi%C4%85%C5%BCki%20%26%238220%3BEnterprise%20Rails%26%238221%3B" title="DZone" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/dzone.png" width="16" height="16" alt="DZone"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F09%2Frecenzja-ksiazki-enterprise-rails%2F&amp;linkname=Recenzja%20ksi%C4%85%C5%BCki%20%26%238220%3BEnterprise%20Rails%26%238221%3B" title="Digg" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/blinklist?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F09%2Frecenzja-ksiazki-enterprise-rails%2F&amp;linkname=Recenzja%20ksi%C4%85%C5%BCki%20%26%238220%3BEnterprise%20Rails%26%238221%3B" title="Blinklist" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/blinklist.png" width="16" height="16" alt="Blinklist"/></a> <a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F09%2Frecenzja-ksiazki-enterprise-rails%2F&amp;linkname=Recenzja%20ksi%C4%85%C5%BCki%20%26%238220%3BEnterprise%20Rails%26%238221%3B" title="Delicious" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/evernote?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F09%2Frecenzja-ksiazki-enterprise-rails%2F&amp;linkname=Recenzja%20ksi%C4%85%C5%BCki%20%26%238220%3BEnterprise%20Rails%26%238221%3B" title="Evernote" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/evernote.png" width="16" height="16" alt="Evernote"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F09%2Frecenzja-ksiazki-enterprise-rails%2F&amp;linkname=Recenzja%20ksi%C4%85%C5%BCki%20%26%238220%3BEnterprise%20Rails%26%238221%3B" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F09%2Frecenzja-ksiazki-enterprise-rails%2F&amp;linkname=Recenzja%20ksi%C4%85%C5%BCki%20%26%238220%3BEnterprise%20Rails%26%238221%3B" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/google_buzz?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F09%2Frecenzja-ksiazki-enterprise-rails%2F&amp;linkname=Recenzja%20ksi%C4%85%C5%BCki%20%26%238220%3BEnterprise%20Rails%26%238221%3B" title="Google Buzz" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/google_buzz.png" width="16" height="16" alt="Google Buzz"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F09%2Frecenzja-ksiazki-enterprise-rails%2F&amp;linkname=Recenzja%20ksi%C4%85%C5%BCki%20%26%238220%3BEnterprise%20Rails%26%238221%3B" title="Google Reader" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p><h3  class="related_post_title">Podobne wpisy:</h3><ul class="related_post"><li>25.08.2010 -- <a href="http://marioosh.5dots.pl/2010/08/vim-on-rails/" title="Vim on Rails">Vim on Rails</a></li><li>25.08.2010 -- <a href="http://marioosh.5dots.pl/2010/08/najlepszy-edytor-do-rails-czyli-dlaczego-vim-a-nie-textmate/" title="Najlepszy edytor do Rails (czyli dlaczego Vim a nie Textmate)">Najlepszy edytor do Rails (czyli dlaczego Vim a nie Textmate)</a></li><li>07.08.2010 -- <a href="http://marioosh.5dots.pl/2010/08/capture-model-w-pickle/" title="Capture model w Pickle">Capture model w Pickle</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://marioosh.5dots.pl/2010/09/recenzja-ksiazki-enterprise-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vim on Rails</title>
		<link>http://marioosh.5dots.pl/2010/08/vim-on-rails/</link>
		<comments>http://marioosh.5dots.pl/2010/08/vim-on-rails/#comments</comments>
		<pubDate>Wed, 25 Aug 2010 21:22:49 +0000</pubDate>
		<dc:creator>Marioosh</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Vim]]></category>

		<guid isPermaLink="false">http://marioosh.5dots.pl/?p=539</guid>
		<description><![CDATA[Ostatnio natrafiłem na screencast Ben Orenstein&#8217;a jak używać Vima do programowania w rails. Screencast ma 36 minut i został podzielnony, na kilka części:

Podstawy efektywnego programowania
 opis pluginu rails.vim
 Opis pluginu Snipmate
 Tags, i ich efektywne wykorzystanie
 kilka słów o wyszukiwaniu
jak edytować jeszcze szybciej

Wg mnie screencast powinien być obejrzany zaraz po podstawowej nauce Vima. Filmik jest [...]]]></description>
			<content:encoded><![CDATA[<p>Ostatnio natrafiłem na <a href="http://www.codeulatescreencasts.com/products/vim-for-rails-developers">screencast</a> Ben Orenstein&#8217;a jak używać Vima do programowania w rails. Screencast ma 36 minut i został podzielnony, na kilka części:</p>
<ol>
<li>Podstawy efektywnego programowania</li>
<li> opis pluginu rails.vim</li>
<li> Opis pluginu Snipmate</li>
<li> Tags, i ich efektywne wykorzystanie</li>
<li> kilka słów o wyszukiwaniu</li>
<li>jak edytować jeszcze szybciej</li>
</ol>
<p>Wg mnie screencast powinien być obejrzany zaraz po podstawowej nauce Vima. Filmik jest dobrze nakręcony i dobrze pokazuje jak programować w railsach za pomocą tego edytora.</p>
<p>W związku, że vim jest coraz częściej wykorzystywany do pracy z rails, (sam<a href="http://yehudakatz.com/2010/07/29/everyone-who-tried-to-convince-me-to-use-vim-was-wrong/"> Yehuda Katz przesiadł się na ten edytor</a>) warto poświęcić te kilka dolarów aby zapoznać się z tym narzędziem.</p>
<p>Good work Ben!<br />
It&#8217;s worth to spend few bucks to watch that great screencast. We can learn how to use this efficient editor for more efficient productivity with rails development.</p>
<p>Thanks A lot.</p>
<p>Dziękuję autorowi za udostępnienie screencasta.</p>
<p><a href="http://www.addtoany.com/add_to/wykop?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fvim-on-rails%2F&amp;linkname=Vim%20on%20Rails" title="Wykop" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/wykop.png" width="16" height="16" alt="Wykop"/></a> <a href="http://www.addtoany.com/add_to/blip?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fvim-on-rails%2F&amp;linkname=Vim%20on%20Rails" title="Blip" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/blip.png" width="16" height="16" alt="Blip"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fvim-on-rails%2F&amp;linkname=Vim%20on%20Rails" title="Twitter" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fvim-on-rails%2F&amp;linkname=Vim%20on%20Rails" title="Facebook" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/dzone?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fvim-on-rails%2F&amp;linkname=Vim%20on%20Rails" title="DZone" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/dzone.png" width="16" height="16" alt="DZone"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fvim-on-rails%2F&amp;linkname=Vim%20on%20Rails" title="Digg" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/blinklist?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fvim-on-rails%2F&amp;linkname=Vim%20on%20Rails" title="Blinklist" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/blinklist.png" width="16" height="16" alt="Blinklist"/></a> <a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fvim-on-rails%2F&amp;linkname=Vim%20on%20Rails" title="Delicious" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/evernote?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fvim-on-rails%2F&amp;linkname=Vim%20on%20Rails" title="Evernote" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/evernote.png" width="16" height="16" alt="Evernote"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fvim-on-rails%2F&amp;linkname=Vim%20on%20Rails" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fvim-on-rails%2F&amp;linkname=Vim%20on%20Rails" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/google_buzz?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fvim-on-rails%2F&amp;linkname=Vim%20on%20Rails" title="Google Buzz" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/google_buzz.png" width="16" height="16" alt="Google Buzz"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fvim-on-rails%2F&amp;linkname=Vim%20on%20Rails" title="Google Reader" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p><h3  class="related_post_title">Podobne wpisy:</h3><ul class="related_post"><li>25.08.2010 -- <a href="http://marioosh.5dots.pl/2010/08/najlepszy-edytor-do-rails-czyli-dlaczego-vim-a-nie-textmate/" title="Najlepszy edytor do Rails (czyli dlaczego Vim a nie Textmate)">Najlepszy edytor do Rails (czyli dlaczego Vim a nie Textmate)</a></li><li>03.09.2010 -- <a href="http://marioosh.5dots.pl/2010/09/recenzja-ksiazki-enterprise-rails/" title="Recenzja książki &#8220;Enterprise Rails&#8221;">Recenzja książki &#8220;Enterprise Rails&#8221;</a></li><li>02.09.2010 -- <a href="http://marioosh.5dots.pl/2010/09/vim-troche-wiecej-o-rejestrach/" title="Vim &#8211; trochę więcej o rejestrach">Vim &#8211; trochę więcej o rejestrach</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://marioosh.5dots.pl/2010/08/vim-on-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Najlepszy edytor do Rails (czyli dlaczego Vim a nie Textmate)</title>
		<link>http://marioosh.5dots.pl/2010/08/najlepszy-edytor-do-rails-czyli-dlaczego-vim-a-nie-textmate/</link>
		<comments>http://marioosh.5dots.pl/2010/08/najlepszy-edytor-do-rails-czyli-dlaczego-vim-a-nie-textmate/#comments</comments>
		<pubDate>Wed, 25 Aug 2010 20:56:25 +0000</pubDate>
		<dc:creator>Marioosh</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Rubymine]]></category>
		<category><![CDATA[Textmate]]></category>
		<category><![CDATA[Vim]]></category>

		<guid isPermaLink="false">http://marioosh.5dots.pl/?p=537</guid>
		<description><![CDATA[Patrząc na te wszystkie screencasty pokakzujące programowanie w ruby on rails zauważyć można że, wsród edytorów prym wiedzie Textmate. Czy jest on jednak aż tak produktywny do wytwarzania aplikacji? Sprawdźmy.
Najpierw przeanalizujmy jakie narzędzia mamy do wyboru:
- Netbeans,
- Rubymine,
- Aptana,
- Textmate,
- Emacs,
- Vim,
- Redcar.
Nie znam innych narzędzi, które są wykorzystywane do tworzenia aplikacji w rails wśród [...]]]></description>
			<content:encoded><![CDATA[<p>Patrząc na te wszystkie screencasty pokakzujące programowanie w ruby on rails zauważyć można że, wsród edytorów prym wiedzie <a href="http://macromates.com/">Textmate</a>. Czy jest on jednak aż tak produktywny do wytwarzania aplikacji? Sprawdźmy.</p>
<p>Najpierw przeanalizujmy jakie narzędzia mamy do wyboru:<br />
- <a href="http://netbeans.org/features/ruby/index.html">Netbeans</a>,<br />
- <a href="http://www.jetbrains.com/ruby/">Rubymine</a>,<br />
- <a href="http://www.aptana.com/products/radrails">Aptana</a>,<br />
- <a href="http://macromates.com/">Textmate</a>,<br />
- <a href="http://www.gnu.org/software/emacs/emacs.html">Emacs</a>,<br />
- <a href="http://vim.org">Vim</a>,<br />
- <a href="http://redcareditor.com/">Redcar</a>.</p>
<p>Nie znam innych narzędzi, które są wykorzystywane do tworzenia aplikacji w rails wśród moich znajomych.</p>
<p>Pierwsze trzy to typowe IDE z podpowiadaniem składni, debuggerami i innymi dodatkami. Można powiedzieć, że jest to wyższa klasa niż pozostałe. Nie będę porównywał który z nich jest lepszy. Napiszę tylko, że z pośród tych wszystkich zalet, które ze sobą niosą, mają jedną ale bardzo znaczną wadę. Nie wspierają wersji języka, czy też frameworku, dopóki autor edytora go nie zaimplementuje. Więc czasami musimy walczyć walkę z narzędziem a nie z samym frameworkiem.</p>
<p>Spójrzmy na pozostałem 4 edytory. Zacznijmy od ostatniego: redcar &#8211; dość ciekawa propozycja napisana w jruby, czyli międzyplatformowa. Niestety nadal jest w fazie alfa więc na razie nie ma co sobie głowy zawracać tym produktem. Poza tym jako jeden z głównych Feature&#8217;s wymieniana jest zgodność z bundlami Textmate&#8217;a. Czy to aż taka zaleta? </p>
<p>Pozostają 3. Znam Zarówno Emacsa jak i Vima, jednak ten drugi jest popularniejszy. Mają zbliżone funkcjonalności jednak Vima łatwiej rozszerzać o własne funkcje. Poza tym emacs ma 2,9mln wyników w google a Vim ponad 11mln &#8211; więc emacsem nie będziemy się zajmować.</p>
<p>Doszedłem do etapu, który sowicie zaplanowałem, porównanie Vim z Textmate. Sprawdźmy ze strony Textmate Główne cechy tego edytora i porównajmy go do VIma.:</p>
<blockquote><p>Ability to Search and Replace in a Project</p></blockquote>
<p>Sic! bzdura aby wypisywać coś takiego jako feature, nawet windowsowy notatnik coś takiego potrafi. Aby nie było &#8211; Vim także potrafi. Potrafi szukać w górę, w dół, wyszukuje zgodnie z regexpem.</p>
<blockquote><p>Auto-Indent for Common Actions Like Pasting Text</p></blockquote>
<p>Hm, ciekawe, w Vim proszę ustawić <code>:set autoindent</code> i po sprawie mamy to samo.</p>
<blockquote><p>Auto-Pairing of Brackets and Other Characters</p></blockquote>
<p>Dla przypomnienia z nauki Vima: <code> % - przenosi na parujący znak</code>. Czyli vim też to ma.</p>
<blockquote><p>Clipboard History</p></blockquote>
<p>Ha! Vim nawet ma tzw. nazwane rejestry gdzie możemy decydować do którego rejestru kopiujemy i z którego wklejamy. Historię też ma.</p>
<blockquote><p>Column Selections and Column Typing</p></blockquote>
<p>Mamy, mamy. Podstawowy vi tego nie ma, ale Vim wprowadza tryb wizualny, gdzie możemy zaznaczać tekst blokowo i pisać w kilku linijkach to samo.</p>
<blockquote><p>Completion of Words from Current Document</p></blockquote>
<p> Vim ma nie tylko autouzupełnianie z obecnego dokumentu, ale i z zewnętrznych, z historii, wklejanie całych linijek z obecnego dokumentu i trochę więcej.</p>
<blockquote><p>Declarative Language Grammars for Graceful Mixing and Hacking</p></blockquote>
<p>Vim potrafi sam rozpoznać, który syntax wykorzystywać po rozszerzeniu pliku. Dodatkowo, można  w pliku konfiguracyjnym włączać lub wyłączać odpowiednie pluginy przy edycji poszczególnych plików.</p>
<blockquote><p>Dynamic Outline for Working With Multiple Files</p></blockquote>
<p>No dobra, Textmate w wbudowany drawer, w którym widać całe drzewko plików projektu. Vim tego nie ma, ale ma plugin NerdTree, który dodaje tą funkcjonalność.</p>
<blockquote><p>Expand Trigger Words to Code Blocks With Tab-able Placeholders</p></blockquote>
<p>Vim też tak ma, co prawda wbudowana werjsa :ab jest dośc uboga, ale pluginami takimi jak &#8220;sniepty&#8221; można już dużo zrobić.</p>
<blockquote><p>File Tabs when Working With Projects</p></blockquote>
<p>Vim has tabs. Dodatkowo może obszar zakładki podzielić na kilka części (bufery) i w każdej z nich edytować inny plik. Jeżeli zakładek i buferów zabraknie można otworzyć nowe okno.</p>
<blockquote><p>Foldable Code Blocks</p></blockquote>
<p>Vim posiada foldowanie zależne od rodzaju tekstu(np. kod), od wcięć, od markerów, różnic w pliku lub ustawiane ręcznie.</p>
<blockquote><p>Function Pop-up for Quick Overview and Navigation</p></blockquote>
<p>No dobra nie znalazłem popapu dla wyjaśnienia funkcji, ale korzystając z systemowej funkcji unixowej funkcji ctags możemy otworzyć wyjaśnienie funkcji w nowym buferze.</p>
<blockquote><p>Plug-able Through Your Favorite Scripting Language</p></blockquote>
<p>Vim has looooooots of plugins. Nie potrafię nawet obejżeć i przetestować ich wszystkich. Vim udostępnił wspaniałą architekturę do budowania pluginów i powstaje ich cała masa.</p>
<blockquote><p>Recordable Macros With No Programming Required</p></blockquote>
<p>Nie korzystałem z makr w Vimie, ale są.</p>
<blockquote><p>Regular Expression Search and Replace (grep)</p></blockquote>
<p>Wspomniano wyżej, jest coś takego w Vimi&#8217;e</p>
<blockquote><p>Run Shell Commands from Within a Document</p></blockquote>
<p>Może to zabrzmi dziwnie, ale Vim także to potrafi. Potrafi wykonać komendę, przełączyć się na chwilę do shella , może wkleić wynik shellowej komendy do dokumentu, a nawet potrafi zaznaczony fragment tekstu wrzucić jako argument komendy shellowej i wkleić zwrócony wynik. </p>
<blockquote><p>Support for Darcs, Perforce, SVK, and Subversion</p></blockquote>
<p>Vim nie ma wbudowanej obsługi SCM, ale można to rozbudować pluginami albo bezpośrednio uruchamianymi komendami shella.</p>
<blockquote><p>Support for More Than 50 Languages</p></blockquote>
<p>Vim posiada prawie 3200 pluginów wierzę, że wspiera więcej niż 50 języków.</p>
<blockquote><p>Switch Between Files in Projects With a Minimum of Key Strokes</p></blockquote>
<p>Z pluginem rails.vim łatwo się przełączać pomiędzy Modelem, Helperem, Controllerem, Widokiem i plikami testów. bardzo łatwo.</p>
<blockquote><p>Themable Syntax Highlight Colors</p></blockquote>
<p>Wow! bomba, w sumie jak by poszukać, to Vim <a href="http://vimcolorschemetest.googlecode.com/svn/html/index-html.html">też ma kilka schematów kolorów</a>.</p>
<blockquote><p>Visual Bookmarks to Jump Between Places in a File</p></blockquote>
<p>W vimie nazywają się to Tagi.</p>
<blockquote><p>Works As External Editor for (s)ftp Programs</p></blockquote>
<p>Też tak potrafię, edycja przez sftp, scp. W którymś z kolejnym artykułów napiszę jak to zrobić.</p>
<blockquote><p>Works Together With Xcode and Can Build Xcode Projects</p></blockquote>
<p>Who cares about it!  Nie ma to jak dobra reklama XCode. IMO XCode jest wyśmienitym edytorem Objective-C, do innych języków też się nadaje ale słabiej. Wg mnie to żadna zaleta, że potrafi budować projekty XCode przy odrobinie zaparcie idzie coś takiego zrobić applescriptem, pytanie tylko : Po co? </p>
<p>Co więcej?<br />
Textmate pracuje tylko w systemie MacOS, Vim praktycznie na każdej platformie.<br />
Textmate jest płatny i nie jest wspierany od dwóch lat.<br />
Textmate ma bundle, które ułatwiają edytować kod. Vim ma snipety, które robią to samo.<br />
Textmate jest ładny. Vim dla niektórych też. <img src='http://marioosh.5dots.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
&#8220;Jeżeli mam Textmate&#8217;a to znaczy że mam Mac&#8217;a i jestem cool&#8221;. Też mam Maca, a Textmate&#8217;a wywaliłem po dwóch dniach użytkowania.</p>
<p>Reasumując.</p>
<p>Wg mnie Textmate nie ma nic, co może mieć Vim. Za tym drugim stoi także dość spore community. I długie doświadczenie w realizacji projektu. Vim ma jeszcze jedną zaletę, jest wszędzie. Jeżeli jesteśmy nie tylko programistami ale trochę administratorami, to gdziekolwiek sie nie zalogujemy to vim prawdopodobnie tam będzie. Użytkownicy Textmate&#8217;a muszą się w takich sytuacjach uczyć drugiego edytora, aby poprawić zdalnie plik. Vim&#8217;owcy nie muszą.</p>
<p>Zatem kiedy możemy chcieć programować w Textmate:<br />
- &#8230;myślę&#8230;<br />
- &#8230;myślę&#8230;<br />
- gdy&#8230; chcemy nakręcić screencasta i chcemy aby wyglądał jak tysiąc innych(musimy wtedy także zmienić tapetę na domyślną)<br />
- gdy wchodzimy do zespołu gdzie inni z tego edytora korzystają.<br />
- gdy mamy ochotę wydać 50Euro za coś co mamy za darmo od 1976 roku.<br />
W innych przypadkach zalecam korzystanie z Vima. A jak skutecznie z niego korzystać przedstawię w jednym z kolejnych artykułów.</p>
<p>PS. Bez urazy ale jakbym miał wydawać tyle kasy to wolałbym dołożyć 42Euro i kupić rubymine&#8217;a. Niby prawie dwa razy więcej kasy, ale 5 razy więcej możliwości.</p>
<p><a href="http://www.addtoany.com/add_to/wykop?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fnajlepszy-edytor-do-rails-czyli-dlaczego-vim-a-nie-textmate%2F&amp;linkname=Najlepszy%20edytor%20do%20Rails%20%28czyli%20dlaczego%20Vim%20a%20nie%20Textmate%29" title="Wykop" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/wykop.png" width="16" height="16" alt="Wykop"/></a> <a href="http://www.addtoany.com/add_to/blip?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fnajlepszy-edytor-do-rails-czyli-dlaczego-vim-a-nie-textmate%2F&amp;linkname=Najlepszy%20edytor%20do%20Rails%20%28czyli%20dlaczego%20Vim%20a%20nie%20Textmate%29" title="Blip" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/blip.png" width="16" height="16" alt="Blip"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fnajlepszy-edytor-do-rails-czyli-dlaczego-vim-a-nie-textmate%2F&amp;linkname=Najlepszy%20edytor%20do%20Rails%20%28czyli%20dlaczego%20Vim%20a%20nie%20Textmate%29" title="Twitter" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fnajlepszy-edytor-do-rails-czyli-dlaczego-vim-a-nie-textmate%2F&amp;linkname=Najlepszy%20edytor%20do%20Rails%20%28czyli%20dlaczego%20Vim%20a%20nie%20Textmate%29" title="Facebook" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/dzone?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fnajlepszy-edytor-do-rails-czyli-dlaczego-vim-a-nie-textmate%2F&amp;linkname=Najlepszy%20edytor%20do%20Rails%20%28czyli%20dlaczego%20Vim%20a%20nie%20Textmate%29" title="DZone" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/dzone.png" width="16" height="16" alt="DZone"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fnajlepszy-edytor-do-rails-czyli-dlaczego-vim-a-nie-textmate%2F&amp;linkname=Najlepszy%20edytor%20do%20Rails%20%28czyli%20dlaczego%20Vim%20a%20nie%20Textmate%29" title="Digg" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/blinklist?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fnajlepszy-edytor-do-rails-czyli-dlaczego-vim-a-nie-textmate%2F&amp;linkname=Najlepszy%20edytor%20do%20Rails%20%28czyli%20dlaczego%20Vim%20a%20nie%20Textmate%29" title="Blinklist" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/blinklist.png" width="16" height="16" alt="Blinklist"/></a> <a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fnajlepszy-edytor-do-rails-czyli-dlaczego-vim-a-nie-textmate%2F&amp;linkname=Najlepszy%20edytor%20do%20Rails%20%28czyli%20dlaczego%20Vim%20a%20nie%20Textmate%29" title="Delicious" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/evernote?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fnajlepszy-edytor-do-rails-czyli-dlaczego-vim-a-nie-textmate%2F&amp;linkname=Najlepszy%20edytor%20do%20Rails%20%28czyli%20dlaczego%20Vim%20a%20nie%20Textmate%29" title="Evernote" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/evernote.png" width="16" height="16" alt="Evernote"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fnajlepszy-edytor-do-rails-czyli-dlaczego-vim-a-nie-textmate%2F&amp;linkname=Najlepszy%20edytor%20do%20Rails%20%28czyli%20dlaczego%20Vim%20a%20nie%20Textmate%29" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fnajlepszy-edytor-do-rails-czyli-dlaczego-vim-a-nie-textmate%2F&amp;linkname=Najlepszy%20edytor%20do%20Rails%20%28czyli%20dlaczego%20Vim%20a%20nie%20Textmate%29" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/google_buzz?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fnajlepszy-edytor-do-rails-czyli-dlaczego-vim-a-nie-textmate%2F&amp;linkname=Najlepszy%20edytor%20do%20Rails%20%28czyli%20dlaczego%20Vim%20a%20nie%20Textmate%29" title="Google Buzz" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/google_buzz.png" width="16" height="16" alt="Google Buzz"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fnajlepszy-edytor-do-rails-czyli-dlaczego-vim-a-nie-textmate%2F&amp;linkname=Najlepszy%20edytor%20do%20Rails%20%28czyli%20dlaczego%20Vim%20a%20nie%20Textmate%29" title="Google Reader" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p><h3  class="related_post_title">Podobne wpisy:</h3><ul class="related_post"><li>25.08.2010 -- <a href="http://marioosh.5dots.pl/2010/08/vim-on-rails/" title="Vim on Rails">Vim on Rails</a></li><li>03.09.2010 -- <a href="http://marioosh.5dots.pl/2010/09/recenzja-ksiazki-enterprise-rails/" title="Recenzja książki &#8220;Enterprise Rails&#8221;">Recenzja książki &#8220;Enterprise Rails&#8221;</a></li><li>02.09.2010 -- <a href="http://marioosh.5dots.pl/2010/09/vim-troche-wiecej-o-rejestrach/" title="Vim &#8211; trochę więcej o rejestrach">Vim &#8211; trochę więcej o rejestrach</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://marioosh.5dots.pl/2010/08/najlepszy-edytor-do-rails-czyli-dlaczego-vim-a-nie-textmate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Capture model w Pickle</title>
		<link>http://marioosh.5dots.pl/2010/08/capture-model-w-pickle/</link>
		<comments>http://marioosh.5dots.pl/2010/08/capture-model-w-pickle/#comments</comments>
		<pubDate>Sat, 07 Aug 2010 07:56:12 +0000</pubDate>
		<dc:creator>Marioosh</dc:creator>
				<category><![CDATA[Tips&Tricks]]></category>
		<category><![CDATA[Cucumber]]></category>
		<category><![CDATA[Machinist]]></category>
		<category><![CDATA[Pickle]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://marioosh.5dots.pl/?p=482</guid>
		<description><![CDATA[Używam Machinist i Pickle jako wspaniałe dodatki do Cucumbera uzupełniające jego możliwości. Wczoraj jednak natrafiłem na dziwny problem: jeden ze stepów wykonywał się w jednym teście a w drugim nie. Nie rozpoznawało modelu, który wygenerowałem &#8211; tylko jednego, wszystkie inne rozpoznawało. 
Problemem był Pickle. Okazuje się, że capture_model rozpoznaje modele po zdefiniowanych fabrykach lub blueprintach [...]]]></description>
			<content:encoded><![CDATA[<p>Używam Machinist i Pickle jako wspaniałe dodatki do Cucumbera uzupełniające jego możliwości. Wczoraj jednak natrafiłem na dziwny problem: jeden ze stepów wykonywał się w jednym teście a w drugim nie. Nie rozpoznawało modelu, który wygenerowałem &#8211; tylko jednego, wszystkie inne rozpoznawało. </p>
<p>Problemem był Pickle. Okazuje się, że <code>capture_model</code> rozpoznaje modele po zdefiniowanych fabrykach lub blueprintach a nie po bazie danych, czy schemie. Po stworzeniu blueprinta dla mojego modelu wszystko zaczęło działać ponownie.</p>
<p><a href="http://www.addtoany.com/add_to/wykop?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fcapture-model-w-pickle%2F&amp;linkname=Capture%20model%20w%20Pickle" title="Wykop" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/wykop.png" width="16" height="16" alt="Wykop"/></a> <a href="http://www.addtoany.com/add_to/blip?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fcapture-model-w-pickle%2F&amp;linkname=Capture%20model%20w%20Pickle" title="Blip" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/blip.png" width="16" height="16" alt="Blip"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fcapture-model-w-pickle%2F&amp;linkname=Capture%20model%20w%20Pickle" title="Twitter" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fcapture-model-w-pickle%2F&amp;linkname=Capture%20model%20w%20Pickle" title="Facebook" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/dzone?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fcapture-model-w-pickle%2F&amp;linkname=Capture%20model%20w%20Pickle" title="DZone" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/dzone.png" width="16" height="16" alt="DZone"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fcapture-model-w-pickle%2F&amp;linkname=Capture%20model%20w%20Pickle" title="Digg" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/blinklist?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fcapture-model-w-pickle%2F&amp;linkname=Capture%20model%20w%20Pickle" title="Blinklist" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/blinklist.png" width="16" height="16" alt="Blinklist"/></a> <a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fcapture-model-w-pickle%2F&amp;linkname=Capture%20model%20w%20Pickle" title="Delicious" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/evernote?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fcapture-model-w-pickle%2F&amp;linkname=Capture%20model%20w%20Pickle" title="Evernote" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/evernote.png" width="16" height="16" alt="Evernote"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fcapture-model-w-pickle%2F&amp;linkname=Capture%20model%20w%20Pickle" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fcapture-model-w-pickle%2F&amp;linkname=Capture%20model%20w%20Pickle" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/google_buzz?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fcapture-model-w-pickle%2F&amp;linkname=Capture%20model%20w%20Pickle" title="Google Buzz" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/google_buzz.png" width="16" height="16" alt="Google Buzz"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F08%2Fcapture-model-w-pickle%2F&amp;linkname=Capture%20model%20w%20Pickle" title="Google Reader" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p><h3  class="related_post_title">Podobne wpisy:</h3><ul class="related_post"><li>16.07.2010 -- <a href="http://marioosh.5dots.pl/2010/07/pickle-na-rails3/" title="Pickle na Rails3">Pickle na Rails3</a></li><li>03.09.2010 -- <a href="http://marioosh.5dots.pl/2010/09/recenzja-ksiazki-enterprise-rails/" title="Recenzja książki &#8220;Enterprise Rails&#8221;">Recenzja książki &#8220;Enterprise Rails&#8221;</a></li><li>25.08.2010 -- <a href="http://marioosh.5dots.pl/2010/08/vim-on-rails/" title="Vim on Rails">Vim on Rails</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://marioosh.5dots.pl/2010/08/capture-model-w-pickle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Routing w Rails 3, nowości</title>
		<link>http://marioosh.5dots.pl/2010/07/routing-w-rails-3-nowosci/</link>
		<comments>http://marioosh.5dots.pl/2010/07/routing-w-rails-3-nowosci/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 22:38:12 +0000</pubDate>
		<dc:creator>Marioosh</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Rails3]]></category>
		<category><![CDATA[routing]]></category>

		<guid isPermaLink="false">http://marioosh.5dots.pl/?p=455</guid>
		<description><![CDATA[
Jednym z ważniejszych plików konfiguracyjnych aplikacji napisanej w Ruby on Rails jest plik routes.rb. Plik zawiera mapowania do wszystkich zasobów aplikacji, aby były (lub nie były) dostępne przez URL.  W rails 3 wprowadzono sporo zmian w tej kwestii, chciałbym po krótce opisać chociaż najważniejsze z nich.


Po pierwsze zniknęło słowo map, dobrze znane z poprzedniej [...]]]></description>
			<content:encoded><![CDATA[<p>
Jednym z ważniejszych plików konfiguracyjnych aplikacji napisanej w <a href="http://rubyonrails.org" rel="external">Ruby on Rails</a> jest plik <code>routes.rb</code>. Plik zawiera mapowania do wszystkich zasobów aplikacji, aby były (lub nie były) dostępne przez URL.  W rails 3 wprowadzono sporo zmian w tej kwestii, chciałbym po krótce opisać chociaż najważniejsze z nich.
</p>
<p>
Po pierwsze zniknęło słowo <code>map</code>, dobrze znane z poprzedniej wersji frameworka. Uprościło to trochę zapis. Np. w poprzedniej wersji taki zapis:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">map.<span style="color:#9900CC;">resources</span> <span style="color:#ff3333; font-weight:bold;">:posts</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    map.<span style="color:#9900CC;">resource</span> <span style="color:#ff3333; font-weight:bold;">:comments</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>można teraz zapisać jako:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">resources <span style="color:#ff3333; font-weight:bold;">:posts</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    resources <span style="color:#ff3333; font-weight:bold;">:comments</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

</p>
<h3>Routing podstawowy i nazwany</h3>
<p>
<code>map.connect</code> został zastąpiony w rails 3 metodą <code>match</code>. Dodatkowo w routingach nie podaje się już oddzielnie nazwy kontrolera i akcji. Zamiast tego oddziela się je znakiemm <code>#</code>. Dla przykładu routing z poprzedniej wersji frameworka wyglądający w ten sposób:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">map.<span style="color:#9900CC;">connect</span> <span style="color:#996600;">'posts/:id'</span>, <span style="color:#ff3333; font-weight:bold;">:controller</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;posts&quot;</span>, <span style="color:#ff3333; font-weight:bold;">:action</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;view&quot;</span></pre></div></div>

<p>przyjmie taką postać:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">match <span style="color:#996600;">'posts/:id'</span>, <span style="color:#ff3333; font-weight:bold;">:to</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'posts#view'</span></pre></div></div>

<p>Jak widać zapis jest o wiele czytelniejszy. Pojawił się także nowy paramert <code>:to</code>, który został wprowadzony po połączeniu <code>:action i :controller</code>.</p>
<p>Metoda <code>match</code> została także użyta przy nazwanych routingach.<br />
Routingi nazwane są to takie, które tworzą automagicznie helpery do wyświetlania odpowiednich adresów URL. Dla przykładu zapis:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">map.<span style="color:#9900CC;">logout</span> <span style="color:#996600;">'/logout'</span>, <span style="color:#ff3333; font-weight:bold;">:controller</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'sessions'</span>, <span style="color:#ff3333; font-weight:bold;">:action</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'destroy'</span></pre></div></div>

<p>będzie wyglądał teraz tak:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">match <span style="color:#996600;">'logout'</span>, <span style="color:#ff3333; font-weight:bold;">:to</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'sessions#destroy'</span>, <span style="color:#ff3333; font-weight:bold;">:as</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'logout'</span></pre></div></div>

<p>Parametr <code>:as</code> oznacza nazwę, która zostanie użyta podczas tworzenia helperów. W powyższym przypadku: <code>logout_path i logout_url</code>.</p>
<p>Inny przykład użycia <code>:as</code>:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">match <span style="color:#996600;">'users/show/:id'</span>, <span style="color:#ff3333; font-weight:bold;">:as</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'profile'</span>
<span style="color:#008000; font-style:italic;"># zapis w kontrolerze:</span>
profile_path<span style="color:#006600; font-weight:bold;">&#40;</span>current_user.<span style="color:#9900CC;">id</span><span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>Drugim parametrem, którego można użyć wraz z <code>match</code> jest <code>:via</code>. Parametrem tym, określamy, które metody żądania HTTP są dostępne dla danego routingu.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">match <span style="color:#996600;">'account/setup'</span>, <span style="color:#ff3333; font-weight:bold;">:via</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:post</span>, <span style="color:#ff3333; font-weight:bold;">:get</span><span style="color:#006600; font-weight:bold;">&#93;</span></pre></div></div>

<p>.<br />
W przypadku, gdy ograniczamy wejście tylko do jednej metody, możemy użyć jej nazwy zamiast <code>match</code></p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">match <span style="color:#996600;">'account/setup'</span>, <span style="color:#ff3333; font-weight:bold;">:via</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:get</span>
<span style="color:#008000; font-style:italic;">#jest jednoznaczne z:</span>
get <span style="color:#996600;">'account/setup'</span></pre></div></div>

<p>Rails 3 wprowadził także kilka skrótów, które możemy wykorzystać w jednoznacznych sytuacjach. Dla przykładu, możemy pominąć wspomniany wyżej parametr <code>:to</code> zamieniając oba parametry w mapę.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">match <span style="color:#996600;">'logout'</span>, <span style="color:#ff3333; font-weight:bold;">:to</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'sessions#destroy'</span>
match <span style="color:#996600;">'logout'</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'sessions#destroy'</span></pre></div></div>

<p>Oba powyższe przypadki są jednoznaczne.<br />
Jeszcze większy skrót jest gdy mapowany url jest analogiczny do nazwy kontrolera i akcji, wtedy wogóle nie musimy określać punktu docelowego.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">match <span style="color:#996600;">'sessions/destroy'</span>, <span style="color:#ff3333; font-weight:bold;">:to</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'sessions#destroy'</span>
match <span style="color:#996600;">'sessions/destroy'</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'sessions#destroy'</span>
match <span style="color:#996600;">'sessions/destroy'</span></pre></div></div>

<p>Wszystkie powyższe zapisy są analogiczne. Kierują wejście na  &#8217;sessions/destroy&#8217; do kontrolera <code>SessionsController</code> i akcji <code>destroy</code>.
</p>
<h3>Route domyślny i segmenty opcjonalne</h3>
<p>
Ciekawostką wprowadzoną w Rails 3 są opcjonalne segmenty w routingu. Są to takie fragmenty adresu URL, które mogą wystąpić lecz nie muszą. Opcjonalne fragmenty są w zapisie umieszczone w nawiasach.<br />
Najlepszym przykładem ich użycia jest route domyślny, który zmienił postać z:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">map.<span style="color:#9900CC;">connect</span> <span style="color:#996600;">':controller/:action/:id'</span>
map.<span style="color:#9900CC;">connect</span> <span style="color:#996600;">':controller/:action/:id.:format'</span></pre></div></div>

<p>na:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">match <span style="color:#996600;">':controller(/:action(/:id(.:format)))'</span></pre></div></div>

<p>Jak widać powyżej parametry :action, :id i :format są opcjonalne.</p>
<p>Dodatkową przydatną informacją na temat domyślnego routingu jest fakt, że został on domyślnie wyłączony w Rails 3. Jeżeli chcemy użyć tego domyślnego mapowania musimy je odkomentować jednak nie jest to zalecane.</p>
<h3>Routing główny</h3>
<p>
Routing główny jest często określany także pustym. Jest to mapowanie, które jest wyświetlane po wpisaniu w przeglądarce samej nazwy domeny, bez żadnych parametrów.<br />
W rails 2 takie mapowanie jest określane za pomocą metody <code>map.root</code>. W obecnej wersji, pominięto <code>map</code>, więc wystarczy użycie metody <code>root</code>.<br />
Stary zapis:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">map.<span style="color:#9900CC;">root</span> <span style="color:#ff3333; font-weight:bold;">:controller</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;posts&quot;</span>, <span style="color:#ff3333; font-weight:bold;">:action</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;index&quot;</span></pre></div></div>

<p>można w nowej wersji przedstawić w ten sposób:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">root <span style="color:#ff3333; font-weight:bold;">:to</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'posts#index'</span></pre></div></div>

<p>Ponownie widać uproszczenie zapisu.
</p>
<h3>Zagnieżdżone zasoby</h3>
<p>
Niektóre modele w tworzonej aplikacji posiadają referencje do innych, referencje te są zdefiniowane poprzez użycie <code>has_many</code> lub <code>has_one</code> w definicji modelu. Na przykład:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> Post <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>
  has_many <span style="color:#ff3333; font-weight:bold;">:comments</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">class</span> Comment <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>
  belongs_to <span style="color:#ff3333; font-weight:bold;">:post</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Zagnieżdżony routing pozwala na dostęp do &#8220;niższych&#8221; zasbów bezpośrednio z URL&#8217;a, na przykład: <code>/posts/2/comments/3 </code> dostarczy komentarz o ID=3, który należy do postu o id = 2.<br />
Aby taki routing był możliwy musimy go zdefiniować. Robimy t w ten sposób:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">resources <span style="color:#ff3333; font-weight:bold;">:posts</span> <span style="color:#9966CC; font-weight:bold;">do</span>
  resources <span style="color:#ff3333; font-weight:bold;">:comments</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Po takiej deklaracji zostaną także utworzone odpowiednie helpery, np.:<code>post_comments_path, edit_post_comment_path</code>.</p>
<p>W przypadku jednak gdy helpery te są za długie, lub nie chcemy korzystać z modelu nadrzędnego możemy użyć opcji <code>shallow</code>, która pozwoli nam na bezpośredni dostęp do zagnieżdżonych zasobów.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">resources <span style="color:#ff3333; font-weight:bold;">:posts</span> <span style="color:#9966CC; font-weight:bold;">do</span>
  shallow <span style="color:#9966CC; font-weight:bold;">do</span>
    resources <span style="color:#ff3333; font-weight:bold;">:comments</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Od tej pory możemy używać <code>/comments/2</code> zamiast <code>/posts/2/comments/2</code>.<br />
Dla przypomnienia w rails 2 z tej opcji korzystało się w ten sposób:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">map.<span style="color:#9900CC;">resources</span> <span style="color:#ff3333; font-weight:bold;">:posts</span>, <span style="color:#ff3333; font-weight:bold;">:shallow</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>post<span style="color:#006600; font-weight:bold;">|</span>
  post.<span style="color:#9900CC;">resources</span> <span style="color:#ff3333; font-weight:bold;">:comments</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

</p>
<h3> Zasoby</h3>
<p>
Od czasów wprowadzenia definicji <code>resources</code> do routes, zaleca się z korzystania z tej metody. Tworzy ona helpery oraz zarządza odpowiednimi RESTowymi połączeniami z zasobami.<br />
Aplikacja mapuje odpowiednio wszystkie CRUD&#8217;owe metody dla takiego zasobu(index, new, create, delete, update, show, edit).<br />
W rails 3 możemy zrezygnować z niektórych (except), lub wskazać tylko te z których chcemy skorzystać (only):</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">resources <span style="color:#ff3333; font-weight:bold;">:comments</span>, <span style="color:#ff3333; font-weight:bold;">:except</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:index</span><span style="color:#006600; font-weight:bold;">&#93;</span>
resources <span style="color:#ff3333; font-weight:bold;">:sessions</span>, <span style="color:#ff3333; font-weight:bold;">:only</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:new</span>, <span style="color:#ff3333; font-weight:bold;">:create</span>, <span style="color:#ff3333; font-weight:bold;">:destroy</span><span style="color:#006600; font-weight:bold;">&#93;</span></pre></div></div>

</p>
<h3> Więcej niż REST</h3>
<p>
Czasem wprowadzamy do naszych kontrolerów inne akcje, do których chcielibyśmy mieć dostęp z zewnątrz. Dodatkowe akcje definiujemy za pomocą metod <code> collections i member</code> zależnie czy chcemy manipulować zbiorem obiektów czy jedną sztuką.<br />
W rails 2 pisaliśmy coś takiego:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">map.<span style="color:#9900CC;">resources</span> <span style="color:#ff3333; font-weight:bold;">:orders</span>, 
  <span style="color:#ff3333; font-weight:bold;">:collection</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span>
    <span style="color:#ff3333; font-weight:bold;">:only_new</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:get</span>,
    <span style="color:#ff3333; font-weight:bold;">:accepted</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:get</span> 
  <span style="color:#006600; font-weight:bold;">&#125;</span>,
  <span style="color:#ff3333; font-weight:bold;">:member</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span>
    <span style="color:#ff3333; font-weight:bold;">:change_status</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:put</span>
  <span style="color:#006600; font-weight:bold;">&#125;</span></pre></div></div>

<p>teraz możemy pisać tak:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">resources <span style="color:#ff3333; font-weight:bold;">:posts</span> <span style="color:#9966CC; font-weight:bold;">do</span>
  collection <span style="color:#9966CC; font-weight:bold;">do</span>
    get <span style="color:#ff3333; font-weight:bold;">:only_new</span>, <span style="color:#ff3333; font-weight:bold;">:accepted</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  member <span style="color:#9966CC; font-weight:bold;">do</span>
    put <span style="color:#ff3333; font-weight:bold;">:change_status</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>lub tak:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">resources <span style="color:#ff3333; font-weight:bold;">:posts</span> <span style="color:#9966CC; font-weight:bold;">do</span>
  get <span style="color:#ff3333; font-weight:bold;">:only_new</span>, <span style="color:#ff3333; font-weight:bold;">:on</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:collection</span>
  get <span style="color:#ff3333; font-weight:bold;">:accepted</span>, <span style="color:#ff3333; font-weight:bold;">:on</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:collection</span>
  put <span style="color:#ff3333; font-weight:bold;">:change_status</span>, <span style="color:#ff3333; font-weight:bold;">:on</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:member</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

</p>
<h3>Zmiana nazwy parametru żądania</h3>
<p>
W niektórych przypadkach, zwłaszcza w aplikacjach nieanglojęzycznych przydatna jest opcja zmiany nazwy akcji. Np. Chcielibyśmy ze względu na SEO aby w URL było używane &#8220;aktualizuj&#8221; zamiast &#8220;edit&#8221;. Możemy tego dokonać za pośrednictwem opcji <code>path_names</code></p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">resources <span style="color:#ff3333; font-weight:bold;">:users</span>, <span style="color:#ff3333; font-weight:bold;">:path_names</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span>:edit <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'aktualizuj'</span><span style="color:#006600; font-weight:bold;">&#125;</span></pre></div></div>

</p>
<h3>Przekierowanie żądania</h3>
<p>W rails 3 jest możliwe przekierowanie wejścia z jednego żądania na inne</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">match <span style="color:#996600;">'/profile'</span>, <span style="color:#ff3333; font-weight:bold;">:to</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> redirect<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'/users/show'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#008000; font-style:italic;">#albo</span>
match <span style="color:#996600;">'/profile/:username'</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> redirect<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'/users/show/%{username})</span></pre></div></div>

<h3>Ograniczenia</h3>
<p>
W routes.rb jest możliwość wprowadzenia ograniczeń co do żądania, np. ID może składać się tylko z pięciu cyfr lub podobne.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">resources <span style="color:#ff3333; font-weight:bold;">:users</span>, <span style="color:#ff3333; font-weight:bold;">:constraints</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#ff3333; font-weight:bold;">:id</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">/</span>\d<span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006666;">5</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">/</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
<span style="color:#008000; font-style:italic;">#lub w przypadku gdy takie ograniczenia są wspólne dla kilku zasobów:</span>
constraints<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:id</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">/</span>\d<span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006666;">5</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">/</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
  resources <span style="color:#ff3333; font-weight:bold;">:users</span>
  resources <span style="color:#ff3333; font-weight:bold;">:posts</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

</p>
<p>
To nie wszystkie nowości, które zostały wprowadzone w Rails 3, pozostały do opisania np. uruchamianie aplikacji bezpośrednio na racku lub inne perełki. Mam nadzieję jednak, że da to ogólny wgląd w nadchodzące zmiany.</p>
<p><a href="http://www.addtoany.com/add_to/wykop?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Frouting-w-rails-3-nowosci%2F&amp;linkname=Routing%20w%20Rails%203%2C%20nowo%C5%9Bci" title="Wykop" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/wykop.png" width="16" height="16" alt="Wykop"/></a> <a href="http://www.addtoany.com/add_to/blip?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Frouting-w-rails-3-nowosci%2F&amp;linkname=Routing%20w%20Rails%203%2C%20nowo%C5%9Bci" title="Blip" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/blip.png" width="16" height="16" alt="Blip"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Frouting-w-rails-3-nowosci%2F&amp;linkname=Routing%20w%20Rails%203%2C%20nowo%C5%9Bci" title="Twitter" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Frouting-w-rails-3-nowosci%2F&amp;linkname=Routing%20w%20Rails%203%2C%20nowo%C5%9Bci" title="Facebook" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/dzone?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Frouting-w-rails-3-nowosci%2F&amp;linkname=Routing%20w%20Rails%203%2C%20nowo%C5%9Bci" title="DZone" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/dzone.png" width="16" height="16" alt="DZone"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Frouting-w-rails-3-nowosci%2F&amp;linkname=Routing%20w%20Rails%203%2C%20nowo%C5%9Bci" title="Digg" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/blinklist?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Frouting-w-rails-3-nowosci%2F&amp;linkname=Routing%20w%20Rails%203%2C%20nowo%C5%9Bci" title="Blinklist" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/blinklist.png" width="16" height="16" alt="Blinklist"/></a> <a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Frouting-w-rails-3-nowosci%2F&amp;linkname=Routing%20w%20Rails%203%2C%20nowo%C5%9Bci" title="Delicious" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/evernote?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Frouting-w-rails-3-nowosci%2F&amp;linkname=Routing%20w%20Rails%203%2C%20nowo%C5%9Bci" title="Evernote" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/evernote.png" width="16" height="16" alt="Evernote"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Frouting-w-rails-3-nowosci%2F&amp;linkname=Routing%20w%20Rails%203%2C%20nowo%C5%9Bci" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Frouting-w-rails-3-nowosci%2F&amp;linkname=Routing%20w%20Rails%203%2C%20nowo%C5%9Bci" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/google_buzz?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Frouting-w-rails-3-nowosci%2F&amp;linkname=Routing%20w%20Rails%203%2C%20nowo%C5%9Bci" title="Google Buzz" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/google_buzz.png" width="16" height="16" alt="Google Buzz"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Frouting-w-rails-3-nowosci%2F&amp;linkname=Routing%20w%20Rails%203%2C%20nowo%C5%9Bci" title="Google Reader" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p><h3  class="related_post_title">Podobne wpisy:</h3><ul class="related_post"><li>16.07.2010 -- <a href="http://marioosh.5dots.pl/2010/07/pickle-na-rails3/" title="Pickle na Rails3">Pickle na Rails3</a></li><li>03.09.2010 -- <a href="http://marioosh.5dots.pl/2010/09/recenzja-ksiazki-enterprise-rails/" title="Recenzja książki &#8220;Enterprise Rails&#8221;">Recenzja książki &#8220;Enterprise Rails&#8221;</a></li><li>25.08.2010 -- <a href="http://marioosh.5dots.pl/2010/08/vim-on-rails/" title="Vim on Rails">Vim on Rails</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://marioosh.5dots.pl/2010/07/routing-w-rails-3-nowosci/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pickle na Rails3</title>
		<link>http://marioosh.5dots.pl/2010/07/pickle-na-rails3/</link>
		<comments>http://marioosh.5dots.pl/2010/07/pickle-na-rails3/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 09:08:00 +0000</pubDate>
		<dc:creator>Marioosh</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[Cucumber]]></category>
		<category><![CDATA[Pickle]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Rails3]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://marioosh.5dots.pl/?p=453</guid>
		<description><![CDATA[Apliacja, którą piszę w RubyOnRails idzie tak wolno i wymaga tyle refaktoringu, że postanowiłem ją przepisać w Rails3. Na szczeście projekt jest w początkowej fazie a większość pracy dotyczyła samego wyglądu aplikacji więc przenosić się można.
Podczas przygotowywania środowiska jednak napotkałem na jeden problem. Gem, którego chętnie używam do testowania &#8211; Pickle &#8211; nie za bardzo [...]]]></description>
			<content:encoded><![CDATA[<p>Apliacja, którą piszę w RubyOnRails idzie tak wolno i wymaga tyle refaktoringu, że postanowiłem ją przepisać w Rails3. Na szczeście projekt jest w początkowej fazie a większość pracy dotyczyła samego wyglądu aplikacji więc przenosić się można.</p>
<p>Podczas przygotowywania środowiska jednak napotkałem na jeden problem. Gem, którego chętnie używam do testowania &#8211; <a href="http://github.com/codegram/pickle">Pickle</a> &#8211; nie za bardzo chciał współpracować z rails 3. Problemem były generatory, których składnia w nowych railsach trochę się zmieniła. Znalazłem jednak rozwiązanie, polecane nawet przez samego autora. Otóż należy użyć forka projektu zrobionego prze codegrama, który rozwiązał ten problem. Jak to zrobić?</p>
<p>1. W pliku Gemfile, wskazać repozytorium git, z którego korzystamy podczas instalacji.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">gem <span style="color:#996600;">'pickle'</span>, <span style="color:#ff3333; font-weight:bold;">:git</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;git://github.com/codegram/pickle.git&quot;</span></pre></div></div>

<p>2. Zainstalowanie gemów z bundlera.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">bundle <span style="color: #c20cb9; font-weight: bold;">install</span></pre></div></div>

<p>3. Uruchomienie generatów Pickle:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rails g pickle:skeleton <span style="color: #660033;">--path</span> <span style="color: #660033;">--email</span></pre></div></div>

<p>Atrybuty
<pre>--path i --email</pre>
<p> są opcjonalne, ale polecam ich użycia.</p>
<p><a href="http://www.addtoany.com/add_to/wykop?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Fpickle-na-rails3%2F&amp;linkname=Pickle%20na%20Rails3" title="Wykop" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/wykop.png" width="16" height="16" alt="Wykop"/></a> <a href="http://www.addtoany.com/add_to/blip?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Fpickle-na-rails3%2F&amp;linkname=Pickle%20na%20Rails3" title="Blip" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/blip.png" width="16" height="16" alt="Blip"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Fpickle-na-rails3%2F&amp;linkname=Pickle%20na%20Rails3" title="Twitter" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Fpickle-na-rails3%2F&amp;linkname=Pickle%20na%20Rails3" title="Facebook" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/dzone?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Fpickle-na-rails3%2F&amp;linkname=Pickle%20na%20Rails3" title="DZone" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/dzone.png" width="16" height="16" alt="DZone"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Fpickle-na-rails3%2F&amp;linkname=Pickle%20na%20Rails3" title="Digg" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/blinklist?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Fpickle-na-rails3%2F&amp;linkname=Pickle%20na%20Rails3" title="Blinklist" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/blinklist.png" width="16" height="16" alt="Blinklist"/></a> <a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Fpickle-na-rails3%2F&amp;linkname=Pickle%20na%20Rails3" title="Delicious" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/evernote?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Fpickle-na-rails3%2F&amp;linkname=Pickle%20na%20Rails3" title="Evernote" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/evernote.png" width="16" height="16" alt="Evernote"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Fpickle-na-rails3%2F&amp;linkname=Pickle%20na%20Rails3" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Fpickle-na-rails3%2F&amp;linkname=Pickle%20na%20Rails3" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/google_buzz?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Fpickle-na-rails3%2F&amp;linkname=Pickle%20na%20Rails3" title="Google Buzz" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/google_buzz.png" width="16" height="16" alt="Google Buzz"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Fpickle-na-rails3%2F&amp;linkname=Pickle%20na%20Rails3" title="Google Reader" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p><h3  class="related_post_title">Podobne wpisy:</h3><ul class="related_post"><li>07.08.2010 -- <a href="http://marioosh.5dots.pl/2010/08/capture-model-w-pickle/" title="Capture model w Pickle">Capture model w Pickle</a></li><li>29.07.2010 -- <a href="http://marioosh.5dots.pl/2010/07/routing-w-rails-3-nowosci/" title="Routing w Rails 3, nowości">Routing w Rails 3, nowości</a></li><li>05.03.2010 -- <a href="http://marioosh.5dots.pl/2010/03/rails-template/" title="Rails Template">Rails Template</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://marioosh.5dots.pl/2010/07/pickle-na-rails3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rails Template</title>
		<link>http://marioosh.5dots.pl/2010/03/rails-template/</link>
		<comments>http://marioosh.5dots.pl/2010/03/rails-template/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 09:17:43 +0000</pubDate>
		<dc:creator>Marioosh</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[WebDeveloping]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[rails templates]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://marioosh.5dots.pl/?p=395</guid>
		<description><![CDATA[Idąc za ciosem postanowiłem wydłubać własny szablonik do startu z aplikacjami. Jest on dostępny na githubie i można śmiało z niego korzystać.
Co robi szablonik?
- inicjuje repozytorium Git, dodaje niektóre miejsca i pliki do ignore&#8217;a po czym zatwierdza resztę.
- instaluje platformę testową RSpec, RSpec-Rails, Cucumber, Factory_Girl i Webrat.
- instaluje authologic i declarative_authorization,
- tworzy model do dodawania [...]]]></description>
			<content:encoded><![CDATA[<p>Idąc za ciosem postanowiłem wydłubać własny szablonik do startu z aplikacjami. Jest on dostępny na <a href="http://github.com/marioosh/rails_template">githubie</a> i można śmiało z niego korzystać.<br />
Co robi szablonik?</p>
<p>- inicjuje repozytorium Git, dodaje niektóre miejsca i pliki do ignore&#8217;a po czym zatwierdza resztę.</p>
<p>- instaluje platformę testową RSpec, RSpec-Rails, Cucumber, Factory_Girl i Webrat.</p>
<p>- instaluje authologic i declarative_authorization,</p>
<p>- tworzy model do dodawania artykułów oraz cruda do niego.</p>
<p>- tworzy model użytkownika, ról  i sesji</p>
<p>- tworzy widoki dla artykułów, panel logowania i edycja profilu.</p>
<p>- tworzy dwie początkowe role: user i admin.</p>
<p>- nadaje uprawnienia:</p>
<p style="padding-left: 30px;">- gość może czytać artykuły, założyć konto i się zalogować,</p>
<p style="padding-left: 30px;">- użytkownik może się wylogować, dodać artykuł, edytować lub usunąć własny artykuł, edytować swój profil,</p>
<p style="padding-left: 30px;">- admin może wszystko.</p>
<p style="padding-left: 30px;">
<p>Planuję jeszcze nad kilkoma dodatkami, ale nie wiem jeszcze dokładnie co i jak. Muszę to przemyśleć. Jak na razie szablon tworzy to, co w prawie każdej aplikacji istnieje. Modele można rozbudować wg własnych potrzeb ale mamy już dobry punkt początkowy.</p>
<p>Zapraszam do testowania i wyrażania swoich uwag.</p>
<p><a href="http://www.addtoany.com/add_to/wykop?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F03%2Frails-template%2F&amp;linkname=Rails%20Template" title="Wykop" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/wykop.png" width="16" height="16" alt="Wykop"/></a> <a href="http://www.addtoany.com/add_to/blip?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F03%2Frails-template%2F&amp;linkname=Rails%20Template" title="Blip" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/blip.png" width="16" height="16" alt="Blip"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F03%2Frails-template%2F&amp;linkname=Rails%20Template" title="Twitter" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F03%2Frails-template%2F&amp;linkname=Rails%20Template" title="Facebook" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/dzone?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F03%2Frails-template%2F&amp;linkname=Rails%20Template" title="DZone" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/dzone.png" width="16" height="16" alt="DZone"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F03%2Frails-template%2F&amp;linkname=Rails%20Template" title="Digg" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/blinklist?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F03%2Frails-template%2F&amp;linkname=Rails%20Template" title="Blinklist" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/blinklist.png" width="16" height="16" alt="Blinklist"/></a> <a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F03%2Frails-template%2F&amp;linkname=Rails%20Template" title="Delicious" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/evernote?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F03%2Frails-template%2F&amp;linkname=Rails%20Template" title="Evernote" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/evernote.png" width="16" height="16" alt="Evernote"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F03%2Frails-template%2F&amp;linkname=Rails%20Template" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F03%2Frails-template%2F&amp;linkname=Rails%20Template" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/google_buzz?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F03%2Frails-template%2F&amp;linkname=Rails%20Template" title="Google Buzz" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/google_buzz.png" width="16" height="16" alt="Google Buzz"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F03%2Frails-template%2F&amp;linkname=Rails%20Template" title="Google Reader" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p><h3  class="related_post_title">Podobne wpisy:</h3><ul class="related_post"><li>12.12.2009 -- <a href="http://marioosh.5dots.pl/2009/12/automatyczny-start-czyli-rails-templates/" title="Automatyczny start czyli Rails Templates">Automatyczny start czyli Rails Templates</a></li><li>16.07.2010 -- <a href="http://marioosh.5dots.pl/2010/07/pickle-na-rails3/" title="Pickle na Rails3">Pickle na Rails3</a></li><li>11.12.2009 -- <a href="http://marioosh.5dots.pl/2009/12/objecie-kontrola-wersji-git-nowej-aplikacji-rails/" title="Objęcie kontrolą wersji Git nowej aplikacji Rails">Objęcie kontrolą wersji Git nowej aplikacji Rails</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://marioosh.5dots.pl/2010/03/rails-template/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Automatyczny start czyli Rails Templates</title>
		<link>http://marioosh.5dots.pl/2009/12/automatyczny-start-czyli-rails-templates/</link>
		<comments>http://marioosh.5dots.pl/2009/12/automatyczny-start-czyli-rails-templates/#comments</comments>
		<pubDate>Sat, 12 Dec 2009 10:01:16 +0000</pubDate>
		<dc:creator>Marioosh</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[WebDeveloping]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[rails templates]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://marioosh.5dots.pl/?p=379</guid>
		<description><![CDATA[Jeżeli tworzymy kilka aplikacji w ruby on rails, to przeważnie początkowe etapy są do siebie bardzo podobne. Np. inicjalizacja kontroli wersji (np. w sposób jaki jest opisany w poprzednim artykule), instalacja ulubionych pluginów, usuwanie zbędnych plików, Czy też inne operacje. Na szczeście do pomocy przychodzą nam Templates, które zostały wprowadzone w rails 2.3. Teplate to [...]]]></description>
			<content:encoded><![CDATA[<p>Jeżeli tworzymy kilka aplikacji w ruby on rails, to przeważnie początkowe etapy są do siebie bardzo podobne. Np. inicjalizacja kontroli wersji (np. w sposób jaki jest opisany w poprzednim artykule), instalacja ulubionych pluginów, usuwanie zbędnych plików, Czy też inne operacje. Na szczeście do pomocy przychodzą nam Templates, które zostały wprowadzone w rails 2.3. Teplate to nic innego niż plik ruby,  w którym wpisujemy komendy w przygotowanym do tego języku domenowym (DSL). Po przygotowaniu takiego szablonu inicjujemy projekt rails z parametrem <code>-m ścieżka_do_szablonu.rb</code>. Rails od razu po wykonaniu inicjacji projektu od razu uruchomi podany plik.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rails my_app <span style="color: #660033;">-m</span> ~<span style="color: #000000; font-weight: bold;">/</span>szablon_startowy.rb</pre></div></div>

<p>tak samo jak URI, możemy uzywać URL:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rails my_app <span style="color: #660033;">-m</span> http:<span style="color: #000000; font-weight: bold;">//</span>marioosh.5dots.pl<span style="color: #000000; font-weight: bold;">/</span>szablon.txt</pre></div></div>

<p>(powyższy plik nie istnieje więc nie testujcie <img src='http://marioosh.5dots.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  )<br />
ostatnim sposobem jest inicjacja szablonu przed odpowiednie zadanie <code>rake</code> z ustawienie zmiennej <code>LOCATION</code>:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rake rails:template <span style="color: #007800;">LOCATION</span>=~<span style="color: #000000; font-weight: bold;">/</span>szablon_startowy.rb</pre></div></div>

</p>
<p><span id="more-379"></span></p>
<p>
Jakie operacje możemy wykonywać w przygotowanym języku DSL? Może zacznemy od przykładu.<br />
Zacznijmy od wykonania kilku operacji opisanych w poprzednim artykule, mówiącym o wprowadzeniu aplikacji rails pod kontrolę Git.<br />
Przygotujmy nasz plik szablonu, ja go utworzłem w katalogu domowym i zapisałem go jako <code>5dots_template.rb</code><br />
Kroki które powinniśmy  wykonać:<br />
- inicjalizacja Git,<br />
- utworzenie pliku .gitignore w folderach <code>tmp</code> i <code>log</code><br />
- dodaniu kilku wpisów w głównym <code>.gitignore</code>.<br />
Plik powinien wyglądać tak:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;"># 5dots_szablon.rb</span>
git <span style="color:#ff3333; font-weight:bold;">:init</span>
git <span style="color:#ff3333; font-weight:bold;">:add</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;.&quot;</span>
<span style="color:#008000; font-style:italic;"># teraz dodajemy pliki .gitignore do folderów tmp i log.</span>
run <span style="color:#996600;">&quot;touch tmp/.gitignore log/.gitignore&quot;</span>
<span style="color:#008000; font-style:italic;">#oraz tworzymy plik .gitignore w głównym folderze z zawartością:</span>
file <span style="color:#996600;">'.gitignore'</span>, <span style="color:#006600; font-weight:bold;">&lt;&lt;-</span>GITIGNORE_FILE
.<span style="color:#9900CC;">DS_Store</span>
log<span style="color:#006600; font-weight:bold;">/*</span>.<span style="color:#9900CC;">log</span>
tmp<span style="color:#006600; font-weight:bold;">/**/*</span>
config<span style="color:#006600; font-weight:bold;">/</span>database.<span style="color:#9900CC;">yml</span>
db<span style="color:#006600; font-weight:bold;">/*</span>.<span style="color:#9900CC;">sqlite3</span>
doc<span style="color:#006600; font-weight:bold;">/</span>app
doc<span style="color:#006600; font-weight:bold;">/</span>api
GITIGNORE_FILE
&nbsp;
<span style="color:#008000; font-style:italic;"># teraz pozostaje tylko zatwierdzenie zmian do repozytorium:</span>
git <span style="color:#ff3333; font-weight:bold;">:commit</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;-a -m 'Initial commit'&quot;</span></pre></div></div>

</p>
<p>
W powyższym przykładnie poznaliśmy kilka komend języka DSL dla szablonów, wyjaśniam po kolei:<br />
- <code>git</code> odpowiada za komendy systemu kontroli wersji git,<br />
- <code>run</code> uruchamia polecenia konsolowe.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">run <span style="color:#996600;">&quot;rm -rf *&quot;</span></pre></div></div>

<p>(komenda ta robi porządki w folderze <img src='http://marioosh.5dots.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )<br />
- <code> file </code> &#8211; odpowiada za tworzenie plików i operacje na nich.
</p>
<p> Mając podstawy za sobą możemy przejść do szczegółowego opisania wszystkich poleceń, w końcu te trzy powyższe, może i zrobią dużo, to i tak nie wszystko.
</p>
<h3>Polecenie rake</h3>
<p>Za wykonywanie zadań rake jest odpowiedzialna komenda o tej samej nazwie ,dodatkowo możemy uruchomić skrypt jako superużytkownik, wtedy musimy podać parametr <code> :sudo => true</code>. Dodatkowo możemy podać parametry, których możemy używać podczas ręcznego użycia komendy <code>rake</code>.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">rake <span style="color:#996600;">&quot;gem:install&quot;</span>
<span style="color:#008000; font-style:italic;"># lub jako superuser</span>
rake <span style="color:#996600;">&quot;gem:install&quot;</span>, <span style="color:#ff3333; font-weight:bold;">:sudo</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span>
<span style="color:#008000; font-style:italic;"># jeszcze jeden przykład:</span>
rake <span style="color:#996600;">&quot;gem:install&quot;</span>, <span style="color:#ff3333; font-weight:bold;">:env</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'production'</span></pre></div></div>

</p>
<h3> Operacje na gemach</h3>
<p>
Komenda <code>gem</code> odpowiada za dodawanie gemów. Komenda dodaje odpowiedni wpis do pliku <code> config/envoirnment.rb</code>. Parametry, które mają być również dopisane (takie jak <code> :version, :lib, :source</code>) podajemy na końcu.<br />
Komenda nie istaluje gema, do tego celu musimy użyć odpowiedniego zadania rake (zgadnijcie którego <img src='http://marioosh.5dots.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )<br />
Kilka przykładów:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">gem <span style="color:#996600;">'thoughtbot-factory_girl'</span>, <span style="color:#ff3333; font-weight:bold;">:lib</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'factory_girl'</span>, <span style="color:#ff3333; font-weight:bold;">:source</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'http://gems.github.com'</span>
gem <span style="color:#996600;">&quot;hpricot&quot;</span>, <span style="color:#ff3333; font-weight:bold;">:version</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'0.6'</span>, <span style="color:#ff3333; font-weight:bold;">:source</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;http://code.whytheluckystiff.net&quot;</span>
gem <span style="color:#996600;">&quot;RedCloth&quot;</span></pre></div></div>

</p>
<h3>Instalowanie wtyczek (inaczej zwanymi pluginami) <img src='http://marioosh.5dots.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </h3>
<p>
Aby zainstalować pluginy używamy z komendy <code>plugin</code>(mam wrażenie, że się domyślaliście &#8211; ot taki prosty ten język, wszystko jest domyślnie proste)<br />
Pluginy możemy instalować z svn, z gita lub z gita jako submoduły:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;"># instalowanie ze starego dobrego subversion:</span>
plugin <span style="color:#996600;">'svnowy_plugin'</span>, <span style="color:#ff3333; font-weight:bold;">:svn</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'svn://repozytorium/scieżka_do_plugina/trunk'</span>
<span style="color:#008000; font-style:italic;"># albo z nowego, jeszcze lepszego gita:</span>
plugin <span style="color:#996600;">'git_plugin'</span>, <span style="color:#ff3333; font-weight:bold;">:git</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'git://github.com/scieżka_do_plugina.git'</span>
<span style="color:#008000; font-style:italic;"># lub nawet jako submoduł gitowy (o tym będzie w następnym artykule)</span>
plugin <span style="color:#996600;">'git_plugin'</span>, <span style="color:#ff3333; font-weight:bold;">:git</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'git://github.com/scieżka_do_plugina.git'</span>, <span style="color:#ff3333; font-weight:bold;">:submodule</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span></pre></div></div>

</p>
<h3>Inicjalizery- czyli automatory, wewnątrz automatora <img src='http://marioosh.5dots.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </h3>
<p>
Jeżeli korzystamy z inicjalizerów, czyli skryptów, które są uruchamiane podczas startu aplikacji używamy komendy <code>initialize</code>. Właśnie ona, tworzy plik w folderze <code>cofnig/initializers</code></p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">initialize <span style="color:#996600;">&quot;nowy_object.rb&quot;</span>, <span style="color:#006600; font-weight:bold;">&lt;&lt;</span>NOWY_OBJECT_CONTENT
<span style="color:#9966CC; font-weight:bold;">class</span> <span style="color:#CC00FF; font-weight:bold;">Object</span>
    <span style="color:#9966CC; font-weight:bold;">def</span> nowa_metoda
        <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Fajna ta nowa metoda, dobrze, że mogę z niej korzystać, zanim railsy się odpalą! &quot;</span>;
    <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
NOWY_OBJECT_CONTENT</pre></div></div>

<p>Dokładnie na tej samej zasadzie działają komendy <code>lib</code> i <code>vendor</code>, które tworzą pliki w folderach (odpowiednio) <code>/lib</code> i <code>/vendor</code>.
</p>
<h3>Pliki</h3>
<p>
Tworzenie nowych plików tworzymy na podobnej zasadzie jak poprzednia metoda, główną różnicą jest, że plik zostanie utworzony, wg folderu RAILS_ROOT a nie wewnątrz <code>initailizers</code>.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">file <span style="color:#996600;">&quot;app/components/Klasa.rb&quot;</span>, <span style="color:#006600; font-weight:bold;">&lt;&lt;</span>KLASA
<span style="color:#9966CC; font-weight:bold;">class</span> Klasa
<span style="color:#9966CC; font-weight:bold;">end</span>
KLASA</pre></div></div>

<p>Komenda powyższa utworzy foldery <code>app/components</code> i umieści w nim plik <code>Klasa.rb</code>.
</p>
<h3>Zadania Rake</h3>
<p>
Komenda <code>rakefile</code> tworzy plik w folderze <code>/lib/tasks</code></p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">rakefile <span style="color:#996600;">&quot;clear_all.rake&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    namespace <span style="color:#ff3333; font-weight:bold;">:clear</span> <span style="color:#9966CC; font-weight:bold;">do</span>
        task <span style="color:#ff3333; font-weight:bold;">:all</span> <span style="color:#9966CC; font-weight:bold;">do</span>
            <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Usuwamy wszystko!!!!! &quot;</span>
        <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Teraz to zadanie możemy uruchomić po wydaniu komendy: <code>rake clear:all</code>.
</p>
<h3>Generatory</h3>
<p>
Generatory możemy uruchomić komendą <code>generate</code> i podając listę argumentów. Możemy uzywać wszystkie generatory, które są standardowo w railsach, lub które uprzednio zainstalowaliśmy w formie pluginów lub gemów.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">generate<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:scaffold</span>, <span style="color:#996600;">&quot;person&quot;</span>, <span style="color:#996600;">&quot;name:string&quot;</span>, <span style="color:#996600;">&quot;email:string&quot;</span>, <span style="color:#996600;">&quot;password:string&quot;</span>
generate<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;rspec&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

</p>
<h3>Uruchamianie skryptów powłoki</h3>
<p>
Jak już wspomniałem można tego dokonać za pomocą komendy <code>run</code></p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">run <span style="color:#996600;">&quot;rm -rf *&quot;</span></pre></div></div>

</p>
<h3>Dodawanie rutingów <img src='http://marioosh.5dots.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </h3>
<p>Jeżeli potrzebujemy dodatkowych wpisów w pliku <code>/config/routes.rb</code> wykonujemy je uruchamiając komendę <code>route</code></p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">route <span style="color:#996600;">&quot;map.root :controller =&gt; :person&quot;</span></pre></div></div>

</p>
<h3>Zmiana folderu</h3>
<p>
Czasami wygodne jest przejście do innego folderu i w nim wykonanie kilku operacji, możemy to zrobić za pomocą komendy <code>inside</code>. Jako parametr podajemy folder docelowy i potem block.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">inside <span style="color:#996600;">&quot;config&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    run <span style="color:#996600;">&quot;cp database.yml database.orig.yml&quot;</span>
<span style="color:#008000; font-style:italic;"># linkowanie ustawień z innego projektu, bo oba mają działać na tej samej bazie</span>
    run <span style="color:#996600;">&quot;ln -s /projekty/super_rails_app/config/database.yml database.yml&quot;</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

</p>
<h3>Działanie zależne od odpowiedzi</h3>
<p>
Podczas wykonywania skryptu, możemy wprowadzić małą intekerakcję, np. zadać pytanie i zależnie od odpowiedzi wykonać dalej skrypt.<br />
Na przykład możemy zapytać o nazwę pliku. W tym celu wykonujemy komendę <code>ask</code>.<br />
W poniższym przykładzie pytamy sie o nazwę pliku dla pliku konfiguracji <code>.yml</code>. Skrypt również sprawdza, czy rozszerzenie zostało podane czy nie. jeżeli nie, to dodaje je do nazwy pliku.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">file_name = ask<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;Podaj nazwę pliku konfiguracyjnego&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
file_name <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#996600;">&quot;.yml&quot;</span> <span style="color:#9966CC; font-weight:bold;">unless</span> file_name.<span style="color:#9900CC;">index</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;.yml&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
file <span style="color:#996600;">&quot;/config/&quot;</span> <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> filename, <span style="color:#006600; font-weight:bold;">&lt;&lt;</span>FILE_CONTENT
global_settings:
    color: <span style="color:#008000; font-style:italic;">#e343f3</span>
    font<span style="color:#006600; font-weight:bold;">-</span>size: 14px
FILE_CONTENT</pre></div></div>

</p>
<p>
Istnieją również uproszczone wersje powyższej metody, jedna oczekuje na odpowiedź &#8220;yes&#8221; druga na &#8220;no&#8221;</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">gem <span style="color:#996600;">&quot;RedCloth&quot;</span> <span style="color:#9966CC; font-weight:bold;">if</span> yes?<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;Zainstalować gem Red Cloth?&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">if</span> no?<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;Zainstalować gem Blue Cloth?&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> 
    gem ask<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;Podaj nazwę gemu z edytorem, którym ma być użyty zamiast BlueCloth:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#9966CC; font-weight:bold;">else</span>
    gem <span style="color:#996600;">&quot;BlueCloth&quot;</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#008000; font-style:italic;"># po wpisaniu 'no' zostanie uruchomione zapytanie o nazwe gem'a, w każdej innej sytuacji zostanie dodany BlueCloth</span></pre></div></div>

</p>
<h3>GIT &#8211; kochaj albo rzuć <img src='http://marioosh.5dots.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </h3>
<p>
Komenda <code>git</code> wykonduje komendy systemu kontroli wersji Git &#8211; jak nie trudno się domyśleć.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">git <span style="color:#ff3333; font-weight:bold;">:init</span>
git <span style="color:#ff3333; font-weight:bold;">:add</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;.&quot;</span>
git <span style="color:#ff3333; font-weight:bold;">:commit</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;-a -m 'Initial commit'&quot;</span>
git <span style="color:#ff3333; font-weight:bold;">:submodule</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;init&quot;</span></pre></div></div>

</p>
<h3>Rezume <img src='http://marioosh.5dots.pl/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  </h3>
<p>Lista komend do wykorzystania:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">&nbsp;
gem<span style="color:#006600; font-weight:bold;">&#40;</span>nazwa, options=<span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
plugin<span style="color:#006600; font-weight:bold;">&#40;</span>nazwa, options=<span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
initializer<span style="color:#006600; font-weight:bold;">&#40;</span>nazwa_pliku, data=<span style="color:#0000FF; font-weight:bold;">nil</span>, <span style="color:#006600; font-weight:bold;">&amp;</span>block<span style="color:#006600; font-weight:bold;">&#41;</span>
lib<span style="color:#006600; font-weight:bold;">&#40;</span>nazwa_pliku, data=<span style="color:#0000FF; font-weight:bold;">nil</span>, <span style="color:#006600; font-weight:bold;">&amp;</span>block<span style="color:#006600; font-weight:bold;">&#41;</span>
vendor<span style="color:#006600; font-weight:bold;">&#40;</span>nazwa_pliku, data=<span style="color:#0000FF; font-weight:bold;">nil</span>, <span style="color:#006600; font-weight:bold;">&amp;</span>block<span style="color:#006600; font-weight:bold;">&#41;</span>
rakefile<span style="color:#006600; font-weight:bold;">&#40;</span>nawa_pliku, data=<span style="color:#0000FF; font-weight:bold;">nil</span>, <span style="color:#006600; font-weight:bold;">&amp;</span>block<span style="color:#006600; font-weight:bold;">&#41;</span>
generate<span style="color:#006600; font-weight:bold;">&#40;</span>co_generować, argumenty<span style="color:#006600; font-weight:bold;">&#41;</span>
run<span style="color:#006600; font-weight:bold;">&#40;</span>komenda<span style="color:#006600; font-weight:bold;">&#41;</span>
rake<span style="color:#006600; font-weight:bold;">&#40;</span>komenda, options=<span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
route<span style="color:#006600; font-weight:bold;">&#40;</span>routing_code<span style="color:#006600; font-weight:bold;">&#41;</span>
inside<span style="color:#006600; font-weight:bold;">&#40;</span>folder<span style="color:#006600; font-weight:bold;">&#41;</span>
ask<span style="color:#006600; font-weight:bold;">&#40;</span>pytanie<span style="color:#006600; font-weight:bold;">&#41;</span>
yes?<span style="color:#006600; font-weight:bold;">&#40;</span>pytanie<span style="color:#006600; font-weight:bold;">&#41;</span>
no?<span style="color:#006600; font-weight:bold;">&#40;</span>pytanie<span style="color:#006600; font-weight:bold;">&#41;</span>
git<span style="color:#006600; font-weight:bold;">&#40;</span>parametry<span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>Teraz znająć już wszystkie komendy, możemy tworzyć własne szablone jako startowe ustawienia aplikacji. Jeżeli stworzymy coś nowego i fajnego warto się tym podzielić. Moża dodać je do projektu: <a href="http://github.com/jeremymcanally/rails-templates">Rails Templates</a>, który takie szablony zbiera. Możemy również skorzystać z instniejących tam szablonów.</p>
<p><a href="http://www.addtoany.com/add_to/wykop?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fautomatyczny-start-czyli-rails-templates%2F&amp;linkname=Automatyczny%20start%20czyli%20Rails%20Templates" title="Wykop" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/wykop.png" width="16" height="16" alt="Wykop"/></a> <a href="http://www.addtoany.com/add_to/blip?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fautomatyczny-start-czyli-rails-templates%2F&amp;linkname=Automatyczny%20start%20czyli%20Rails%20Templates" title="Blip" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/blip.png" width="16" height="16" alt="Blip"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fautomatyczny-start-czyli-rails-templates%2F&amp;linkname=Automatyczny%20start%20czyli%20Rails%20Templates" title="Twitter" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fautomatyczny-start-czyli-rails-templates%2F&amp;linkname=Automatyczny%20start%20czyli%20Rails%20Templates" title="Facebook" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/dzone?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fautomatyczny-start-czyli-rails-templates%2F&amp;linkname=Automatyczny%20start%20czyli%20Rails%20Templates" title="DZone" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/dzone.png" width="16" height="16" alt="DZone"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fautomatyczny-start-czyli-rails-templates%2F&amp;linkname=Automatyczny%20start%20czyli%20Rails%20Templates" title="Digg" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/blinklist?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fautomatyczny-start-czyli-rails-templates%2F&amp;linkname=Automatyczny%20start%20czyli%20Rails%20Templates" title="Blinklist" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/blinklist.png" width="16" height="16" alt="Blinklist"/></a> <a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fautomatyczny-start-czyli-rails-templates%2F&amp;linkname=Automatyczny%20start%20czyli%20Rails%20Templates" title="Delicious" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/evernote?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fautomatyczny-start-czyli-rails-templates%2F&amp;linkname=Automatyczny%20start%20czyli%20Rails%20Templates" title="Evernote" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/evernote.png" width="16" height="16" alt="Evernote"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fautomatyczny-start-czyli-rails-templates%2F&amp;linkname=Automatyczny%20start%20czyli%20Rails%20Templates" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fautomatyczny-start-czyli-rails-templates%2F&amp;linkname=Automatyczny%20start%20czyli%20Rails%20Templates" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/google_buzz?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fautomatyczny-start-czyli-rails-templates%2F&amp;linkname=Automatyczny%20start%20czyli%20Rails%20Templates" title="Google Buzz" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/google_buzz.png" width="16" height="16" alt="Google Buzz"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fautomatyczny-start-czyli-rails-templates%2F&amp;linkname=Automatyczny%20start%20czyli%20Rails%20Templates" title="Google Reader" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p><h3  class="related_post_title">Podobne wpisy:</h3><ul class="related_post"><li>05.03.2010 -- <a href="http://marioosh.5dots.pl/2010/03/rails-template/" title="Rails Template">Rails Template</a></li><li>16.07.2010 -- <a href="http://marioosh.5dots.pl/2010/07/pickle-na-rails3/" title="Pickle na Rails3">Pickle na Rails3</a></li><li>11.12.2009 -- <a href="http://marioosh.5dots.pl/2009/12/objecie-kontrola-wersji-git-nowej-aplikacji-rails/" title="Objęcie kontrolą wersji Git nowej aplikacji Rails">Objęcie kontrolą wersji Git nowej aplikacji Rails</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://marioosh.5dots.pl/2009/12/automatyczny-start-czyli-rails-templates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Objęcie kontrolą wersji Git nowej aplikacji Rails</title>
		<link>http://marioosh.5dots.pl/2009/12/objecie-kontrola-wersji-git-nowej-aplikacji-rails/</link>
		<comments>http://marioosh.5dots.pl/2009/12/objecie-kontrola-wersji-git-nowej-aplikacji-rails/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 11:22:05 +0000</pubDate>
		<dc:creator>Marioosh</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[GIT]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[SCM]]></category>

		<guid isPermaLink="false">http://marioosh.5dots.pl/?p=372</guid>
		<description><![CDATA[Za każdym razem, gdy rozpoczynam pracę z projektem, muszę skonfigurować Git, aby repozytorium nie zawierało zbędnych plików.
Cała operacja jest wykonywana w kilku krokach, gdzie pierwszym z nich będzie stworzenie nowej aplikacji rails na naszym komputerze. Następnie musimy zaiinicjować kontrolę wersji.

$ rails my_app
$ cd my_app
$ git init
$ git status
...
# Untracked files:
#   (use "git add [...]]]></description>
			<content:encoded><![CDATA[<p>Za każdym razem, gdy rozpoczynam pracę z projektem, muszę skonfigurować Git, aby repozytorium nie zawierało zbędnych plików.<br />
Cała operacja jest wykonywana w kilku krokach, gdzie pierwszym z nich będzie stworzenie nowej aplikacji rails na naszym komputerze. Następnie musimy zaiinicjować kontrolę wersji.</p>
<p><code lang="bash"><br />
$ rails my_app<br />
$ cd my_app<br />
$ git init<br />
$ git status<br />
...<br />
# Untracked files:<br />
#   (use "git add <file>..." to include in what will be committed)<br />
#<br />
#       README<br />
#       Rakefile<br />
#       app/<br />
#       config/<br />
#       db/<br />
#       doc/<br />
#       log/<br />
#       public/<br />
#       script/<br />
#       test/<br />
</code><span id="more-372"></span></p>
<p>Wydanie komendy <code>git statu</code>s pokazało nam całą strukturę aplikacji, która nie jest objęta kontrolą wersji. Zanim dodamy, powinniśmy wyłączyć kilka plików. Po pierwsze w repozytorium nie potrzebujemy plików dzienników („logów”), które znajdują się w folderze log. Aby je wyłączyć musimy stworzyć plik <code>.gitignore</code> i dodać linijkę <code>log/*.log</code>.<br />
<code lang="bash"><br />
$ echo „log/*.log” >>.gitignore </code>
<p>
Ponowne sprawdznie statusu pozwoli nam zauważyć zmianę, która zaszła w repozytorium.</p>
<p><code lang="bash"><br />
$ git status<br />
…<br />
# Untracked files:<br />
#   (use "git add <file>..." to include in what will be committed)<br />
#<br />
#       .gitignore<br />
#       README<br />
#       Rakefile<br />
#       app/<br />
#       config/<br />
#       db/<br />
#       doc/<br />
#       public/<br />
#       script/<br />
#       test/<br />
nothing added to commit but untracked files present (use "git add" to track)</code>
<p>
Folder log zniknął z listy plików do dodania. Problem polega na tym, że klonująć potem repozytorium, otrzymamy jest bez tego folderu. Gdy uruchomimy aplikację, będą problemy z jej działaniem, ponieważ w tym folderze logi muszą być zapisywane.<br />
Naszym zadaniem zatem jest ustawienie repozytorium tak, aby sam folder znajdował się w nim, a ignorowana powinna być jedynie jego zawartość. Cała powyższa sytuacja dzieję się tak dlatego, że system Git nie śledzi pustych folderów. Wyjściem z tej sytuacji jest trick, polegającym na dodaniu pliku <code>.gitignore</code> w folderze <code>log</code>. Folder nie będzie pusty, a jednocześnie dodany plik, nie będzie miał wpływu na nasz projekt.</p>
<p><code lang="bash"><br />
$ touch log/.gitignore<br />
$ git status<br />
…<br />
# Untracked files:<br />
#   (use "git add <file>..." to include in what will be committed)<br />
#<br />
#       .gitignore<br />
#       README<br />
#       Rakefile<br />
#       app/<br />
#       config/<br />
#       db/<br />
#       doc/<br />
#       log/<br />
#       public/<br />
#       script/<br />
#       test/<br />
nothing added to commit but untracked files present (use "git add" to track)</code>
<p>
Na powyższym listingu widać, że osiągnęliśmy zamierzony efekt. Podobny problem występuje w folderze tmp, którego zawartość również powinna być ignorowana, nie ignorując samgo folderu. Nauczeni powyższym doświadczeniem dodajemy plik .gitignore w tym katalogu, a w <code>.gitignore</code> znajdującym się w głównym folderze aplikacji dopisujemy <code>tmp/**/*</code>. Co oznacza ignorowanie wszystkich plików nawet w podfolderach.<br />
Warto również zignorować dwa foldery z dokumentacją, które niepotrzebnie zajmują miejsce w repozytorium. Po dopisaniu dwóch linijek w głównym pliku <code>.gitignore</code>, powinien on zawierać taką treść:<br />
<code lang="bash"><br />
log/*.log<br />
tmp/**/*<br />
doc/api<br />
doc/app</code><br />
Teraz możemy dodać wszystkie pliki i wykonać początkowe zatwierdzenie.<br />
<code lang="bash"><br />
$ git add .<br />
$ git commit -a -m „rozpoczęcie pracy”<br />
</code></p>
<p>
W praktyce warto przenieść zewnętrzną bibliotekę rails, wewnątrz aplikacji, co pomoże w późniejszym uruchamianiu projektu na serwerze produkcyjnym. Aby to zrobić musimy wykonać komendę rake rails:freeze:gems co spowoduje przeniesienie całego frameworka, do folderu <code>vendor/rails</code>. Aplikacja przeszukuje ten folder w pierwszej kolejności i dopiero gdy go nie znajdzie, to szuka po zainstalowanych w systemie gemach.<br />
Po wykonaniu powyższej komendy wystarczy zatwierdzić kolejną zmianę.<br />
<code lang="bash"><br />
$ git add vendor<br />
$ git commit -a -m „Dodanie frameworku do fodleru vendors”</code><br />
Teraz nie pozostaje nic innego niż rozpoczęcie pracy nad projektem.
</p>
<p>W sumie nie stoi nic na przeszkodzie, aby powyższy zaimplikować w Rails Template, ale o tym jak to się robi, napiszę już niedługo.</p>
<p><a href="http://www.addtoany.com/add_to/wykop?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fobjecie-kontrola-wersji-git-nowej-aplikacji-rails%2F&amp;linkname=Obj%C4%99cie%20kontrol%C4%85%20wersji%20Git%20nowej%20aplikacji%20Rails" title="Wykop" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/wykop.png" width="16" height="16" alt="Wykop"/></a> <a href="http://www.addtoany.com/add_to/blip?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fobjecie-kontrola-wersji-git-nowej-aplikacji-rails%2F&amp;linkname=Obj%C4%99cie%20kontrol%C4%85%20wersji%20Git%20nowej%20aplikacji%20Rails" title="Blip" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/blip.png" width="16" height="16" alt="Blip"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fobjecie-kontrola-wersji-git-nowej-aplikacji-rails%2F&amp;linkname=Obj%C4%99cie%20kontrol%C4%85%20wersji%20Git%20nowej%20aplikacji%20Rails" title="Twitter" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fobjecie-kontrola-wersji-git-nowej-aplikacji-rails%2F&amp;linkname=Obj%C4%99cie%20kontrol%C4%85%20wersji%20Git%20nowej%20aplikacji%20Rails" title="Facebook" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/dzone?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fobjecie-kontrola-wersji-git-nowej-aplikacji-rails%2F&amp;linkname=Obj%C4%99cie%20kontrol%C4%85%20wersji%20Git%20nowej%20aplikacji%20Rails" title="DZone" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/dzone.png" width="16" height="16" alt="DZone"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fobjecie-kontrola-wersji-git-nowej-aplikacji-rails%2F&amp;linkname=Obj%C4%99cie%20kontrol%C4%85%20wersji%20Git%20nowej%20aplikacji%20Rails" title="Digg" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/blinklist?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fobjecie-kontrola-wersji-git-nowej-aplikacji-rails%2F&amp;linkname=Obj%C4%99cie%20kontrol%C4%85%20wersji%20Git%20nowej%20aplikacji%20Rails" title="Blinklist" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/blinklist.png" width="16" height="16" alt="Blinklist"/></a> <a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fobjecie-kontrola-wersji-git-nowej-aplikacji-rails%2F&amp;linkname=Obj%C4%99cie%20kontrol%C4%85%20wersji%20Git%20nowej%20aplikacji%20Rails" title="Delicious" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/evernote?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fobjecie-kontrola-wersji-git-nowej-aplikacji-rails%2F&amp;linkname=Obj%C4%99cie%20kontrol%C4%85%20wersji%20Git%20nowej%20aplikacji%20Rails" title="Evernote" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/evernote.png" width="16" height="16" alt="Evernote"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fobjecie-kontrola-wersji-git-nowej-aplikacji-rails%2F&amp;linkname=Obj%C4%99cie%20kontrol%C4%85%20wersji%20Git%20nowej%20aplikacji%20Rails" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fobjecie-kontrola-wersji-git-nowej-aplikacji-rails%2F&amp;linkname=Obj%C4%99cie%20kontrol%C4%85%20wersji%20Git%20nowej%20aplikacji%20Rails" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/google_buzz?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fobjecie-kontrola-wersji-git-nowej-aplikacji-rails%2F&amp;linkname=Obj%C4%99cie%20kontrol%C4%85%20wersji%20Git%20nowej%20aplikacji%20Rails" title="Google Buzz" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/google_buzz.png" width="16" height="16" alt="Google Buzz"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fobjecie-kontrola-wersji-git-nowej-aplikacji-rails%2F&amp;linkname=Obj%C4%99cie%20kontrol%C4%85%20wersji%20Git%20nowej%20aplikacji%20Rails" title="Google Reader" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p><h3  class="related_post_title">Podobne wpisy:</h3><ul class="related_post"><li>16.07.2010 -- <a href="http://marioosh.5dots.pl/2010/07/pickle-na-rails3/" title="Pickle na Rails3">Pickle na Rails3</a></li><li>05.03.2010 -- <a href="http://marioosh.5dots.pl/2010/03/rails-template/" title="Rails Template">Rails Template</a></li><li>12.12.2009 -- <a href="http://marioosh.5dots.pl/2009/12/automatyczny-start-czyli-rails-templates/" title="Automatyczny start czyli Rails Templates">Automatyczny start czyli Rails Templates</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://marioosh.5dots.pl/2009/12/objecie-kontrola-wersji-git-nowej-aplikacji-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
