Ruby for Newbies The Tilt Gem

Ruby er et av de mest populære språkene som brukes på nettet. Vi har startet en ny sesjon her på Nettuts + som vil introdusere deg til Ruby, samt de flotte rammer og verktøy som går sammen med Ruby-utviklingen. I denne episoden ser vi på Tilt, en altomfattende wrapper perle for Ruby template motorer.


Videoopplæring


Gjenopprette maler

Hvis du har brukt en Ruby web-rammeverk som Rails and Sinatra, er du sikkert kjent med minst en av de mange malmotorer som er tilgjengelige: Jeg handler om alternativer som ERB eller Haml. Når du bruker dem i sammenheng med et rammeverk, er det ganske enkelt? men noen ganger virker de veldig innebygde; hva om du vil bruke dem i ditt eget prosjekt? Er det en enkel måte å utnytte deres nytte av?

Skriv inn kantelen. Fakturert som et tynt grensesnitt over en haug med forskjellige Ruby-malmotorer ,? Du finner det gjør gjengivelse maler en bris.

Selvfølgelig installerer vi det først.

perle installasjon tilt

Hvis du ikke bruker RVM (som du burde være), må du kanskje kjøre det med root-privilegier (sudo).

Selvfølgelig må du starte med en mal for å gjengi. Vi vil holde det enkelt:

    <%= title %>   

Noen av Tuts + Nettsteder

    <% sites.each do |name, link| %>
  • "> <%= name %>
  • <% end %>

Lagre dette til tutsplus.erb. Legg merke til at tittelteksten blir satt inn med Ruby, så vel som listen over nettsteder. La oss nå gjøre det. Vi gjør det på denne måten (lagre dette inn using_tilt.rb):

krever "tilt" -steder = "Nettuts +" => "http://net.tutsplus.com", "Psdtuts +" => "http://psd.tutsplus.com", "Mobiletuts +" => "http: / /mobile.tutplus.com "," Audiotuts + "=>" http://audio.tutsplus.com " kontekst = Object.new def context.title" Tuts + Nettsteder "sluttmal = Tilt :: ERBTemplate.new (" tutsplus .erb ") File.open" sites.html "," w "gjør | fil | file.write template.render (kontekst, nettsteder: nettsteder) ende

Selvfølgelig begynner vi med å kreve Tilt. Deretter lager vi dataene våre for malen: en enkel hash, samt et vanlig vaniljeobjekt. Vi gir objektet en eiendom: tittel. Deretter lager vi vårt malobjekt. Her skaper vi en forekomst av Tilt :: ERBTemplate klassen, men hele punktet til Tilt er at du kan bruke hvilken som helst malmotor du vil ha: for eksempel kan du bruke Tilt :: HamlTemplate, Tilt :: SassTempalte (for CSS), Tilt :: CoffeScriptTemplate (for CoffeeScript), eller hvilken som helst støttet malmotor du vil. Det er imidlertid viktig å merke seg at Tilt er bare en wrapper: Du må kreve riktig bibliotek for malmmotoren du vil bruke. Så, hvis du vil bruke en Tilt :: HamlTemplate eksempel, du må krever 'haml'. Du kan se hvilke biblioteker som kreves for hver malmotor i Readme.

Til slutt åpner vi filen vi vil skrive utdataene til. HTML (eller CSS, eller JavaScript, avhengig av hvilken mal og motor du bruker) vil bli returnert fra gjengi Metode for malobjektet. De gjengi Metoden tar to parametere. Den første er et kontekstobjekt: Alle egenskapene til dette objektet vil være tilgjengelige som variabel i malen. Så, vår context.title eiendom vil være tilgjengelig som bare tittel innenfor malen. Hvis det er noen andre verdier du vil passere inn i malen, send dem som en del av den andre parameteren, som er en hash.

Så, vi kan kjøre dette skriptet på kommandolinjen:

rubin using_tilt.rb

Se nå i katalogen som du har lagret disse filene i: du bør se en sites.html fil. Hvis du ser det, vil du oppdage at malen har blitt gjengitt:


Utbytte for mer kraft

Du kan gjøre mer komplekse ting med Tilt hvis du passerer en blokk til gjengi metode.

Tilt :: ERBTemplate ('other.erb'). Render (kontekst, other_params) "litt tekst"

Inne i malen din, kan du utbytte til blokken; hva som kommer tilbake fra blokken, vil bli satt inn på det tidspunktet i malen.

Mens du selvfølgelig bare kan sende en streng via blokken, som ovenfor, er det en mer interessant brukstilstand. Nylig har jeg brukt denne funksjonaliteten i Tilt for å legge inn en sidespesifikk mal inne i et nettstedssikkert skall. For eksempel kan vi dele vår ovenfor mal i to filer:

layout.erb

    <%= title %>   <%= yield %>  

sites.erb

Noen av Tuts + Nettsteder

    <% sites.each do |name, link| %>
  • "> <%= name %>
  • <% end %>

Nå, for å gjengjøre vår side, kan vi gjøre dette:

template = Tilt :: ERBTemplate.new ("layout.erb") File.open "sites.html" do | file | file.write template.render (kontekst) Tilt :: ERBTemplate.new ("sites.erb"). render (Object.new, nettsteder: nettsteder) slutten

Legg merke til at siden vi ikke hadde noe objekt vi ønsket å bruke som kontekstobjekt, passerte vi nettopp en vanlig vanilje-blank Ruby-gjenstand. HTML-koden som returneres fra gjengivelsen av sites.erb vil bli satt inn der utbytte søkeordet er. Hvis du kjører koden ovenfor, bør du se samme utgang som før.


Bruk av andre alternativer

Du vil merke at vi til nå har måttet velge malmotoren vi vil bruke når du lager Tilt-underklasseobjektet. Tilt vil imidlertid gjenkjenne filutvidelsen til malen du sender den, slik at du ikke må eksplisitt velge en motor: den velger den riktige, basert på filtypen:

t = Tilt.new "tutsplus.erb" t.class # => Tilt :: ERBTemplate

Hvis, av en eller annen grunn, dine maler har en filtype som ikke er hva Tilt forventer, kan du registrere det:

Tilt.register Tilt :: ERBTemplate, "some_extension" t = Tilt.new "my_template.some_extension" t.class # => Tilt :: ERBTemplate

Finn ut mer

Det er noen flere nisje ting som Tilt kan gjøre; Hvis du er interessert i å finne ut mer, anbefaler jeg at du sjekker ut dokumentasjonen.