erb alternatyvos

30
ERb alternatyvos RubyConfLT 2010 Vidmantas Kabošis vidmantas.kabosis.lt

Upload: vidmantas-kabosis

Post on 22-Jun-2015

1.255 views

Category:

Technology


9 download

DESCRIPTION

ERb alternatyvų prezentacija RubyConfLT 2010

TRANSCRIPT

Page 1: ERb alternatyvos

ERb alternatyvos

RubyConfLT 2010Vidmantas Kabošisvidmantas.kabosis.lt

Page 2: ERb alternatyvos

Kas yra kas (intro)

Šablono variklis == template engine Greitis Saugumas

Page 3: ERb alternatyvos

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

Page 4: ERb alternatyvos

4

eruby C

Page 5: ERb alternatyvos

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

Page 6: ERb alternatyvos

6

erubis

http://www.kuwata-lab.com/erubis/

Page 7: ERb alternatyvos

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

Page 8: ERb alternatyvos

8

rbTenjin (1/3)

Lengvas, greitas (greičiausias?) Saugus ,,pagal nutylėjimą” Layouts, partials Konvertuoto kodo kešavimas … Savybėmis labai panašus į erubis

Page 9: ERb alternatyvos

9

rbTenjin (2/3)

http://www.kuwata-lab.com/tenjin/

Page 10: ERb alternatyvos

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>

Page 11: ERb alternatyvos

11

Kitas požiūris

TAL Smarty-like (Liquid) Ruby DSL wiki-style Kiti :-)

Page 12: ERb alternatyvos

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

Page 13: ERb alternatyvos

13

TAL: Amrita (1/3)

http://amrita.sourceforge.jp/

Page 14: ERb alternatyvos

14

TAL: Amrita (2/3)

,,Pure XML/HTML document” <? … ?>, <%= … %>

Išvestį kontroliuoja duomenys Gali būti sukompiliuotas į ruby Amrita 2

Page 15: ERb alternatyvos

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>

# datadata = { :table1=>[ { :name=>"Ruby", :author=>"matz" }, { :name=>"perl", :author=>"Larry Wall" }, { :name=>"python", :author=>"Guido van Rossum" }, ]}

Page 16: ERb alternatyvos

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>

Page 17: ERb alternatyvos

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

Page 18: ERb alternatyvos

18

Smarty-like (Liquid)

Atskira ,,kalba” šablonuose Ruby realizacijos:

Liquid Ruty

Page 19: ERb alternatyvos

19

Liquid (1/2)

Iš ,,Shopify”, naudojamas production'e Ruby on Rails Saugus Sintaksė panaši į Ruby Plečiama (tagai, filtrai, blokai)

Page 20: ERb alternatyvos

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

Page 21: ERb alternatyvos

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

Page 22: ERb alternatyvos

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

Page 23: ERb alternatyvos

23

Ruby DSL: Markaby

,,Markup as Ruby” Naudojamas ,,Camping” microframework'e

Lengvai integruojamas į Rails

Susidūrusiems su DSL, lengvai perprantamashtml do head do title 'Products: ' + action_name stylesheet_link_tag 'scaffold' end body do p flash[:notice], :style => "color: green" self << yield endend

Page 24: ERb alternatyvos

24

wiki-style

Nėra tikrosios ,,šablonų kalbos” Skirtos vartotojų įvesčiai apdoroti Markdown:

BlueCloth, Maruku, Kramdown, RDiscount

Textile: RedCloth, ?

Page 25: ERb alternatyvos

25

Kiti

HAML Radius

Page 26: ERb alternatyvos

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

Page 27: ERb alternatyvos

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"

Page 28: ERb alternatyvos

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>')

Page 29: ERb alternatyvos

29

Pabaigai

Svarbiausia – produktyvumas Naudojami:

ERB plačiąja prasme HAML Liquid

Page 30: ERb alternatyvos

30

end

?