Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

ERb alternatyvos

1,533 views

Published on

ERb alternatyvų prezentacija RubyConfLT 2010

Published in: Technology
  • Be the first to comment

  • Be the first to like this

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

×