[LRUG] Proffer and introducing constraints to Rails

Arek Turlewicz quirek at gmail.com
Thu Apr 5 02:01:55 PDT 2012

On 05/04/12 15:59, Andrew Stewart wrote:
> On 4 Apr 2012, at 23:58, mudge wrote:
>> Perhaps if we could
>> simplify the view part to simply be:
>> 1. Take some state;
>> 2. Return a string.
>> Then views and helpers would be practically the same thing and we
>> could tackle some of these problems more easily.
> I think Mustache goes some way towards this:
>    https://github.com/defunkt/mustache
Interesting. btw. I think I try to do something similar using what, we 
already got in Rails like erb templates and by adding simple Widget 
(View) class.
My goal is to be able to see structure of the page directly in the ruby 
code like this:

def build_page
     nav_bar = Widget.new("navigation_bar") do |nav_bar|
       nav_bar << Container.new(:menu) do |menu|
         menu << Widget.new("link", :label=> "Product list", :target => 
         menu << Widget.new("link", :label=> "About", :target => "/about")
       nav_bar << Widget.new("search_field")

     column_left = Container.new(:column_left) do |column_grid|
       column_grid << ProductView.new(@product) if @product
       column_grid << ProductListView.new(@products) if @products
       column_grid << Container.new('picture_row') do |picture_row|
         picture_row << Widget.new("sample_picture")
         picture_row << Widget.new("sample_picture")
         picture_row << Widget.new("sample_picture")

     column_right = Container.new(:column_right) do |column_grid|
       column_grid << Widget.new("sample_picture")
       column_grid << Widget.new("sample_picture")
       column_grid << Widget.new("sample_picture")

     row_container = Container.new(:row_container) do |row_container|
       row_container << column_left
       row_container << column_right

     @page = ::WebPage.build do |p|
       p << nav_bar
       p << row_container
       p << Container.new(:footer)

Then I can call @page.render to generate page. I still use html.erb 
templates to render single widgets.
So this extra layer is mostly as a design plan for programmer.

Example that use bootstrap is here:

Everything is in very early stage, but example works, so it could be 
useful for someone.

Arek Turlewicz
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lrug.org/pipermail/chat-lrug.org/attachments/20120405/60f46095/attachment-0003.html>

More information about the Chat mailing list