eRuby

Origem: Wikipédia, a enciclopédia livre.


eRuby (Embedded Ruby)
Versão estável 1.0.5 (14 de dezembro de 2004; há 19 anos)
Escrito em Ruby
Sistema operacional Cross-platform
Gênero(s) Sistema de template web
Licença GPL and LGPL
Estado do desenvolvimento Ativo

eRuby (embedded ruby, ou ruby embarcado) é um sistema de templates que incorpora ruby em um documento de texto. Ele é frequentemente usado para embutir código ruby em documentos HTML, semelhante ao ASP, JSP e PHP. O sistema de template eRuby combina código em ruby e texto simples para fornecer controle de fluxo e substituição de variáveis, facilitando a manutenção.[1]

A módulo de visão em rails é responsável por apresentar a resposta ou saída em um navegador. Em sua forma mais simples, uma visão pode ser um pedaço de código HTML que tem algum conteúdo estático. Para a maioria das aplicações, apenas ter conteúdo estático pode não ser suficiente. Muitas aplicações em rails exigem que conteúdo dinamicamente criado pelo controlador (método de ação) seja exibido na visão. Isto é possível usando eRuby para gerar templates que podem conter conteúdo dinâmico. Embedded ruby permite que o código de ruby seja incorporado em um documento de visão. Este código é substituído com os valores corretos resultantes da execução do código em tempo de execução. Mas, por ter a capacidade de incorporar código em um documento de visão, corremos o risco de ofuscar a clara separação presente no quadro MVC. Assim, é de responsabilidade do desenvolvedor se certificar de que há uma separação clara de responsabilidade entre os módulos de modelo, visão e controlador na aplicação.[2]

Utilização[editar | editar código-fonte]

O eRuby permite que o código de Ruby seja incorporado dentro de um par de delimitadores <% e %> . Estes blocos de código embarcado são então avaliados no local e substituídos pelo resultado de sua avaliação. Além de criar páginas da web, eRuby também pode ser utilizado para criar documentos XML, RSS feeds e outras formas de arquivos de texto estruturados. O eRuby gera arquivos estáticos dinamicamente baseados em templates. Estas funcionalidades de eRuby podem ser encontrado na biblioteca ERB.

Diferentes tipos de marcadores utilizados nos templates de ERB são:

  1. Tags de expressão
  2. Tags de execução
  3. Tags de comentário[3]

Tags de expressão[editar | editar código-fonte]

<%= %>: Indica que a tag inclui uma expressão. Essas tags começam com uma tag delimitadora de abertura seguida pelo símbolo de igual e termina com uma tag que delimita o final. Durante o processamento do template, este pedaço de código é substituído com o resultado do código. Se o resultado avaliado não for uma string, ele é convertido em uma sequência de caracteres antes de ser renderizado. Por exemplo:

  require 'erb'
  x = 500
  template = ERB.new("O valor de x é: <%= x %>")
  puts template.result(binding)

O texto resultante se parece com: O valor de x é: 500[1]

Tags de execução[editar | editar código-fonte]

<% %>: Código entre essas tags é chamado de scriptlet. O código de uma tag é executado e o resultado é substituído no lugar do scriptlet. Tais tags devem ter uma tag <% end %> quando necessário para indicar o final de um bloco funcional. Por exemplo:[4]

<ul>
<% 4.times do %>

  <li>item</li>

<% end %>
</ul>

No exemplo acima, o texto do item é impresso quatro vezes. O scriplet não produz o texto por si mesmo, ele só faz com que o texto entre ele seja executado várias vezes. O resultado do código acima é:

  • item
  • item
  • item
  • item

Tags de comentário[editar | editar código-fonte]

<%# %> : O conteúdo de tags de comentário não é renderizado no resultado. Tais marcas começam com um tag delimitador seguido por um símbolo de hash e terminam com um tag delimitador de final. Exemplo de uma tag de comentário é mostrado abaixo:[5]

<%# código de ruby %>

Este é o mesmo como um comentário em Ruby. Todo código em ruby que vem após o # é ignorado e não gera nada.

Outras tags[editar | editar código-fonte]

Outras coisas comuns em eRuby são também comuns em Ruby, como a substituição de strings em, que é semelhante em linguagens como Perl ou PHP.

Quebras de linha em eRuby podem ser suprimida pela adição de um hífen no início da tag delimitadora de final. Por exemplo:

<%2.times do -%>
    <%= @nome %>
<% end -%>

Na saída do código acima, o valor de nome é impresso duas vezes na mesma linha.

Implementações[editar | editar código-fonte]

Existem várias implementações de eRuby, por exemplo:

  1. ERB
  2. erubis
  3. ember

erb[editar | editar código-fonte]

erb é uma implementação de eRuby escrito puramente na linguagem de programação Ruby e incluída na biblioteca padrão do Ruby.[2]

Um template pode ser gerado executando um trecho de código escrito usando o objeto ERB. Um exemplo simples é mostrado a seguir:

require 'erb'
x = 400
template_simples = "O valor de x é: <%= x %>."
renderizador = ERB.new(template_simples)
puts output = renderizador.result(binding)

Isso resulta em: "O valor de x é: 400"

O mesmo pode ser feito usando o código abaixo, que não usa um objeto ERB:

x = 400
string = "O valor de x é: #{x}"
puts string

Os dois trechos de código acima geram o mesmo resultado. Mas o que acontece quando nós trocamos a linha 2 com a linha 3 no primeiro trecho de código e a linha 1 com a linha 2 no segundo trecho de código? As alterações no primeiro trecho são mostradas abaixo:

require 'erb'
template_simples = "O valor de x é: <%= x %>."
x = 400
renderizador = ERB.new(template_simples)
puts output = renderizador.result(binding)

Isso ainda gera o mesmo resultado: "O valor de x é: 400".

O segundo trecho alterado:

string = "O valor de x é: #{x}"
x = 400
puts string

Diferente do primeiro trecho, o código acima não será executado. Isto é porque a 1ª linha não sabe o valor de x quando ela é executada. Assim, a principal razão para utilizar um objeto ERB é a elaboração de templates antes do tempo, por binding de variáveis e métodos que talvez não existam em um determinado momento. O template é processado apenas quando result é chamado no objeto ERB. A fim de obter acesso a métodos e variáveis de um objeto, ERB usa um objeto de binding. Acesso a variáveis e métodos de um objeto é dado pelo objeto privado binding que existe em cada classe de ruby. É fácil ganhar acesso a métodos e variáveis dentro do método de uma classe. Mas para acessar as variáveis de uma classe diferente, a classe terá de expor é objeto de binding através de um método público. Um exemplo é mostrado abaixo:

class ERBExemplo
    attr_accessor:variavel1

    # usando bind pra acessar variáveis
    def render()
        renderer.result(binding)
    end

    def initialize(variable1)
        @variavel1 = variavel1
    end

    # Expose private binding() method.
    def get_binding
        binding()
    end
end

exemplo = ERBExemplo.new(variavel1)
renderer = ERB.new(template)
puts output = renderer.result(exemplo.get_binding)

Como podemos ver no exemplo acima, estamos expondo o objeto binding da classe ERBExemplo. Além disso, usamos o objeto de binding para acessar variáveis e métodos da classe de dentro de um de seus métodos.

Método new() em ERB[editar | editar código-fonte]

O método new em um objeto ERB leva mais dois parâmetros. O segundo parâmetro especifica o nível de segurança.

Dando um número no segundo parâmetro (valor máximo = 4) pode-se fazer o template ser executado em outra thread. O valor do número determina o nível de segurança. No máximo, nível de isolamento, a menos que o objecto de binding seja marcado como confiável, ERB não pode usá-lo.

O terceiro parâmetro especifica modificadores opcionais. Estes podem ser usados para controlar a adição de novas linhas para a saída. Por exemplo, para certificar-se de que o ERB não adicione novas linhas depois da tag final,

podemos criar a ERB objeto, como mostrado abaixo

renderer = ERB.new(template, 3, '>')

Para fornecer apenas o terceiro parâmetro e ignorar o segundo parâmetro, use 0 como o segundo parâmetro.

ERB possui muitos outros métodos expostos, que podem ser usados para processar um template. Para a lista completa das APIs expostas pelo objeto ERB, consulte a documentação do ERB.

Executar ERB na linha de comando

É comum usar ERB para passar o resultado do template para um arquivo desejado. Para conseguir isso, podemos usar a função de redirecionamento fornecido na linha de comando e redirecionar a saída para um arquivo, em vez de a imprimir na saída padrão. No exemplo acima, a saída é redirecionada para o arquivo minha_visao.html.erb.

Ligação a bibliotecas de terceiros é possível fazendo uso da opção -r e fornecendo o nome da biblioteca. Para lembrar esta funcionalidade, pode-se lembrar que Ruby usa a palavra-chave require, que tem a mesma funcionalidade que a opção -r. O exemplo abaixo usa a biblioteca IPAddr: Como mencionamos sobre os níveis de segurança na seção anterior, pode-se especificar o nível de segurança como um argumento de linha de comando usando a opção -S:

erubis[editar | editar código-fonte]

erubis é uma implementação de eRuby implementado em Ruby e também em Java. De acordo com a sua home page, ele corre mais rápido que eRuby e ERb e tem várias opções úteis, incluindo tags alternativas que permitem XML válido.

ember[editar | editar código-fonte]

ember é uma implementação de eRuby em puro Ruby para Linux. Ember permite a depuração de templates em eRuby, melhora a sua composição, e fornece abreviações poderosas de diretivas eRuby.

Referências[editar | editar código-fonte]

  1. a b Brown, Gregory (2009). Ruby Best Practices. [S.l.]: O'Reilly. pp. 279–281. ISBN 978-0596523008 
  2. a b S., Ruby; D., Thomas; Hansson D, Heinemeier. Agile Web Development with Rails. [S.l.: s.n.] ISBN 978-1-934356-54-8 
  3. Ellis, Stuart (1 de julho de 2016). «An Introduction to ERB Templating». Consultado em 12 de setembro de 2016 
  4. «ERB» 
  5. «ERB – Ruby Templating»