|
| Published on May 20th, 2008 | | No Comments | | Posted by Roman Mackovcak |
|
| Published on May 20th, 2008 | | No Comments | | Posted by Roman Mackovcak |
Web developer often comes to a situation where he needs to “decorate” a block of a page. There is a simple solution and simple and elegant solution.
Helpers concept in Ruby on Rails is very powerful and will be used to do the trick.
Imagine, you want to create a rounded box helper similar to Nifty Corners (http://www.html.it/articoli/nifty/index.html), but you do not want to use javascript. So, a handy helper needs to be created.
The principle of the Nifty Corners trick is adding few b tags before content, few b tags after it and few lines to CSS.
<div id="container"> <b class="rtop"> <b class="r1"></b> <b class="r2"></b> <b class="r3"></b> <b class="r4"></b> </b> <!--content goes here --> <b class="rbottom"> <b class="r4"></b> <b class="r3"></b> <b class="r2"></b> <b class="r1"></b> </b> </div>
and modification of CSS
.rtop, .rbottom{display:block} .rtop *, .rbottom *{display: block; height: 1px; overflow: hidden} .r1{margin: 0 5px;} .r2{margin: 0 3px;} .r3{margin: 0 2px;} .r4{margin: 0 1px; height: 2px;} .r1, .r2, .r3, .r4 {background-color:red;} .cont{background-color:red;}
The easy solution uses two helpers. One to put before the content and one to put it after. So, the view could look like:
... <%= round_box_start %> content <%= round_box_end %> ...
Well, it does not look good. So, what about the other solution?
We will create a block level helper. The view will look much better.
... <% round_box do %> content <% end %> ...
Now, let’s create the helper:
def round_box(&block) b = '<div id="container"><b class="rtop"><b class="r1"></b><b class="r2"></b><b class="r3"></b><b class="r4"></b></b><div class="cont">' e = '</div><b class="rbottom"><b class="r4"></b> <b class="r3"></b> <b class="r2"></b> <b class="r1"></b></b></div>' # Get the data from the block data = capture(&block) res = b + data + e # Use concat method to pass text back to the view concat(res, block.binding) end
Good, but works only for red boxes. How to pass another color? Simply:
... <% round_box(color) do %> content <% end %> ...
and in helper
def round_box(color, &block) b = '<div id="container"><b class="rtop"><b class="r1"></b><b class="r2"></b><b class="r3"></b><b class="r4"></b></b><div class="cont">' e = '</div><b class="rbottom"><b class="r4"></b> <b class="r3"></b> <b class="r2"></b> <b class="r1"></b></b></div>' # Get the data from the block data = capture(&block) res = b + data + e # Use concat method to pass text back to the view concat(res, block.binding) end
Final implementation of the colored box is left as a homework :o)
|
| Published on April 22nd, 2008 | | 4 Comments | | Posted by Roman Mackovcak |
Grails log is verbose… very verbose. I got used to the Rails one, especially for the stack traces. Most of the time I am not interested in hundreds of messages about Hibernate not being happy with the parameter I did pass to it. Most of the time the problem is on my side and I want to know which object is it and which line of code.
So, i did a small trick with egrep. I run the grails application using this command:
grails run-app | egrep -v "at [a-z]+"
Sometime I have to go to my log file to check more details, but over 80% this is more than enough.
|
| Published on April 15th, 2008 | | No Comments | | Posted by Roman Mackovcak |
Welcome to WordPress!
We have moved to a new blogging platform and on that occasion we have also introduced a fresh new graphical design. Otherwise, all things should remain as you know them – good old articles with comments, permalinks, categories etc.
Should you miss something, don’t hesitate to leave a comment here.
|
| Published on April 8th, 2008 | | No Comments | | Posted by Miroslav Škultéty |
I have spent few years developing in Ruby on Rails. For the last half of year I have been learning Grails, too. The things described here are a summarization of the differences that I had to come over.
The comparison will be written in a simple “table based” structure. I just got used to it when preparing comparisons or product studies for tenders.
A lightweight web framework written in Ruby scripting programming language. It contains its own application server. See the Rails home website.
A web framework written in Groovy. The source code is compiled to byte code and can be run on Java application servers. Grails home website.
Before I start comparison, it is fair to say, that Rails has been around from 2004 while Grails final version dates from 2008. So, some of the differences are caused by this time shift.
Both of the frameworks are more evolutionary than revolutionary. They just implement the right patterns and they do it right.
| Ruby on Rails | Grails | |
|---|---|---|
| First release (version 1.0) | July 2004 | February 2008 |
| Life cycle | Mature framework with solid base of developers | Young framework with a growing base of developers and a huge base of potential developers (from Java) |
| Ruby on Rails | Grails | |
|---|---|---|
| Framework | Excellent. Uses the RDoc that contains not only list of methods, classes and files, but also source code of a method, with syntax highlighting. | Very good. Contains list of classes, methods, files… but I am really missing the source code. If the code is not documented, the documentation is useless |
| Application | Excellent. Only the application files are documented using the RDoc (including syntax highlighting) | On one hand it is exhaustive, because it generates documentation for all classes in the project (including plugins). On the other hand it does not contain the source code. So, once the code is not documented, the documentation is useless. So, on average I would say it is good. |
Both frameworks are based on flexible languages that allow meta programming – changing classes on the fly.
| Ruby on Rails | Grails | ||
|---|---|---|---|
| Developer audience | From beginners | Some experience is required | |
| Language constructs | Readable, sometimes like natural language | Readable, sometimes too many brackets (but as I said, I spent some time in Ruby :o) | |
| Mapping objects to database | Excellent, all declarative | Excellent, all declarative | |
| Libraries | Wide variety of libraries and plugins. Almost everything I needed was available (except for Kerberos support…) | Huge amount of java libraries could be used together with Grails. This is one of Grails killer features. | |
| Scaffold | The default scaffold looks terrible, custom plugins needs to be installed. | Looks nice out of the box, implements handy nice features like table sorting. | |
| Tools | rake (~make), rjs (ruby java script – library that allows to write java script functionality in ruby), migrations (tool that uses ruby syntax to change database schema – very useful) | ant (~make) | |
| Log file | Very descriptive, it provides exactly the information needed: controller/action/parameters, time spent on DB, VIEW, CONTROLLER, SQL statements (including timing) | Verbose… very. Exception generated 1000 lines of code in log, missing the information about SQL statements and the things that are in the Rails log. This was a disappointment. | |
| Console | Simple terminal window working in command/result mode | Window based – command answer is displayed in different frame at the end of it (unfortunately it is not scrolling properly, so it is quite annoying). I take it as a temporary problem. | |
| Folder structure | Simple, follows the MVC | Following MVC, slightly more complex than RoR | |
| Thread support | Poor | Native |
| Ruby on Rails | Grails | |
|---|---|---|
| Resource usage | Medium resource usage | Higher resource usage |
| Ruby on Rails | Grails | |
|---|---|---|
| Internet | High potential. The framework allows fast development of an application with a very good performance. | High potential. It alows fast development and it can utilize all of the Java frameworks. |
| Enterprises | Just for prototyping or small applications. The support of enterprise technologies is not at the focus of the community. | Could be used for prototyping and also for real applications |
Last, but not least, the popularity of both frameworks:
There are many more differences that were not mentioned here. If you find a major one not mentioned here, please leave me a comment. I will appreciate it.
|
| Published on March 18th, 2008 | | 7 Comments | | Posted by Roman Mackovcak |