ERb alternatyvos

1,500 views

Published on

ERb alternatyvų prezentacija RubyConfLT 2010

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,500
On SlideShare
0
From Embeds
0
Number of Embeds
116
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

ERb alternatyvos

  1. 1. ERb alternatyvos RubyConfLT 2010 Vidmantas Kabošis vidmantas.kabosis.lt
  2. 2. Kas yra kas (intro)  Šablono variklis == template engine  Greitis  Saugumas
  3. 3. ERb  Embedded Ruby  <%= … %>  ERB - kartu su standartiniu Ruby  Autsaideris greičio ir saugumo atžvilgiu  Turi realizacijų, sprendžiančių jo problemas  eruby  erubis  Ember  rbTenjin 3
  4. 4. eruby  C 4
  5. 5. erubis  Ruby  Greitesnis už ERB, eruby  Keičiamas įterpimo šablonas  Automatinis eskeipinimas  Kešavimas (preprocessing)  [%= link_to 'Create', :action=>'create'%]  Priima vykdymo nurodymus (processing instructions) šablonuose  Rails 3 5
  6. 6. erubis http://www.kuwata-lab.com/erubis/ 6
  7. 7. ember  Ruby  Gali automatiškai papildyti trūkstamais <% end %> pagal identaciją  Klaidų pranešimuose naudoja teisingus eilučių numerius  Papildomos instrukcijos  <%+ "doc/example.erb" %>  Ruby on Rails 7
  8. 8. rbTenjin (1/3)  Lengvas, greitas (greičiausias?)  Saugus ,,pagal nutylėjimą”  Layouts, partials  Konvertuoto kodo kešavimas  …  Savybėmis labai panašus į erubis 8
  9. 9. rbTenjin (2/3) http://www.kuwata-lab.com/tenjin/ 9
  10. 10. rbTenjin (3/3) ###### layout <html> <body> <h1>${@title}</h1> <div class="main-content"> #{@_content} </div> ... ###### template <table> <?rb i = 0 ?> <?rb for item in @items ?> <?rb i += 1 ?> <?rb color = i % 2 == 0 ? '#FFCCCC' : '#CCCCFF' ?> <tr bgcolor="#{color}"> <td>#{i}</td> <td>${item}</td> </tr> <?rb end ?> </table> 10
  11. 11. Kitas požiūris  TAL  Smarty-like (Liquid)  Ruby DSL  wiki-style  Kiti :-) 11
  12. 12. TAL  Template Attribute Language  Elementai žymimi TAL aprašo atributais  Validus XML/HTML dokumentas  Parašytas ,,Zope”  TALES, METAL  Ruby realizacijos:  Amrita/Amrita2  Kwartz 12
  13. 13. TAL: Amrita (1/3) http://amrita.sourceforge.jp/ 13
  14. 14. TAL: Amrita (2/3)  ,,Pure XML/HTML document”  <? … ?>, <%= … %>  Išvestį kontroliuoja duomenys  Gali būti sukompiliuotas į ruby  Amrita 2 14
  15. 15. TAL: Amrita (3/3) <table border="1"> <tr> <th>name</th><th>author</th> </tr> <tr id="table1"> <td id="name"> <td id="author"> </tr> </table> # data data = { :table1=>[ { :name=>"Ruby", :author=>"matz" }, { :name=>"perl", :author=>"Larry Wall" }, { :name=>"python", :author=>"Guido van Rossum" }, ] } 15
  16. 16. TAL: Kwartz  ,,Independence of Presentation Logic”  Šablonas + šablono logika (plogic) #list1 { logic: { for member in @members _stag # start tag _cont # content _etag # end tag end } } <tr id="list1"> <td id="mark:item1">foo</td> </tr> 16
  17. 17. TAL DHH: The pursuit of "no code"-templates reminds me of the search for the holy grail of the MDA camp with "no code"-programs. It's mirage, but its also a play on words of the "a rose by any other name..." variety. http://www.loudthinking.com/arc/000405.html 17
  18. 18. Smarty-like (Liquid)  Atskira ,,kalba” šablonuose  Ruby realizacijos:  Liquid  Ruty 18
  19. 19. Liquid (1/2)  Iš ,,Shopify”, naudojamas production'e  Ruby on Rails  Saugus  Sintaksė panaši į Ruby  Plečiama (tagai, filtrai, blokai) 19
  20. 20. Liquid (2/2) Hello {{ '*rubyconf*' | textilize | upcase }} {% if user.name == 'bob' and user.age > 45 %} Hello old bob {% endif %} # array = [1,2,3,4,5,6] {% for item in array limit:2 offset:2 %} {{ item }} {% endfor %} # results in 3,4 20
  21. 21. Ruty  Ištakos: Django / Jinja Template Engine  Šablonų paveldėjimas  Sintaksė visiškai analogiška Liquid (?)  Papildomos saugumo priemonės  Lėtesnis už ERB, bet greitesnis už Liquid 21
  22. 22. Ruby DSL  Priešingai nei ERB/TAL/Liquid, aprašo šablonus su ,,pure Ruby”  Pagrindinis žaidėjas - ,,Markaby”  ,,Maline” - miręs  Builder::XmlMarkup – tik XML dokumentams 22
  23. 23. Ruby DSL: Markaby  ,,Markup as Ruby”  Naudojamas ,,Camping” microframework'e  Lengvai integruojamas į Rails  Susidūrusiems su DSL, lengvai perprantamas html do head do title 'Products: ' + action_name stylesheet_link_tag 'scaffold' end body do p flash[:notice], :style => "color: green" self << yield end end 23
  24. 24. wiki-style  Nėra tikrosios ,,šablonų kalbos”  Skirtos vartotojų įvesčiai apdoroti  Markdown:  BlueCloth, Maruku, Kramdown, RDiscount  Textile:  RedCloth, ? 24
  25. 25. Kiti  HAML  Radius 25
  26. 26. Kiti: HAML (1/2)  ,,Markup haiku”  Principai:  Markup should be DRY  Markup should be well-intended  HTML structure should be clear  Markup should be meaningful  HAML sesutė CSS'ui: SASS 26
  27. 27. Kiti: HAML (2/2)  Klasė žymima ., id - #, atributai - (), tag'as - % #content .left.column %h2 Welcome to rubyconf! %p= print_information .right.column = render :partial => "sidebar" 27
  28. 28. Kiti: Radius  Šablonų kūrimui  Leidžia patogiai apibrėžti savo tag'us ir juos parsinti  Šablonas – beveik XML (namespace) context.define_tag "hello" do |tag| "Hello #{tag.attr['name'] || 'World'}!" end parser = Radius::Parser.new(context) parser.parse('<p><radius:hello name="RubyConf" /></p>') 28
  29. 29. Pabaigai  Svarbiausia – produktyvumas  Naudojami:  ERB plačiąja prasme  HAML  Liquid 29
  30. 30. end ? 30

×