stringtranslate.com

eRuby

Embedded Ruby (также сокращенно ERB ) — это система шаблонов , которая встраивает Ruby в текстовый документ. Он часто используется для встраивания кода Ruby в документ HTML , подобно ASP и JSP , а также PHP и другим языкам сценариев на стороне сервера. Система шаблонов eRuby объединяет код Ruby и простой текст для обеспечения управления потоком данных и замены переменных, что упрощает поддержку объединенного кода. [1]

Модуль View Ruby on Rails отвечает за отображение ответа или вывода в браузере. В своей простейшей форме представление может представлять собой часть HTML- кода со статическим содержимым. Для большинства приложений просто статического контента может быть недостаточно. Многим приложениям Ruby on Rails потребуется отображение динамического контента, созданного контроллером ( методом действия). Это стало возможным благодаря использованию Embedded Ruby для создания шаблонов, которые могут содержать динамический контент. Встроенный Ruby позволяет встраивать код Ruby в документ представления. Этот код заменяется правильным значением, полученным в результате выполнения кода во время выполнения. Но, имея возможность встраивать код в документ представления, мы рискуем преодолеть четкое разделение, присутствующее в кадре MVC . Таким образом, разработчик несет ответственность за четкое разделение ответственности между модулями модели, представления и контроллера его/ее приложения. [2]

Применение

eRuby позволяет встраивать код Ruby в пару разделителей<% и . Эти встроенные блоки кода затем оцениваются на месте (они заменяются результатом их оценки). Помимо создания веб-страниц, eRuby также можно использовать для создания XML-документов , RSS- каналов и других форм структурированных текстовых файлов. eRuby динамически генерирует статические файлы на основе шаблонов . Эти функциональные возможности eRuby можно найти в библиотеке ERB.%>

В шаблонах ERB используются следующие типы маркеров тегов:

  1. Теги выражений
  2. Теги выполнения
  3. Теги комментариев [3]

Теги выражений

<%= %> : Это указывает на то, что тег содержит выражение. Такой тег начинается с открывающего разделителя тега , за которым следует символ равенства, и заканчивается разделителем конечного тега . Во время рендеринга шаблона этот фрагмент кода заменяется результатом кода. Если вычисленный результат не является строкой, он преобразуется в строку перед обработкой. Например:

требуется 'erb' x = 500 template = ERB . new ( "Значение x: <%= x %>" ) помещает template . результат ( привязка )      

Результирующий текст выглядит следующим образом: Значение x: 500 [1]

Теги выполнения

<% %> : Код, заключенный в такие теги, называется скриптлетом . Код в таком теге выполняется, и его результат заменяется вместо скриптлета. Такие теги должны иметь соответствующий тег, обозначающий конец функционального блока. Например: [4]<% end %>

< ул > <% 4 . раз делать %>    <li> элемент списка </li> _ _ _<% end %> </ ul >  

В приведенном выше примере элемент текстового списка печатается четыре раза. Скриптлет не создает никакого текста сам по себе, он только заставляет вложенный оператор выполняться несколько раз . Вывод приведенного выше кода:

Теги комментариев

<%# %> : Содержимое тегов комментариев не отображается в выходных данных. Такие теги начинаются с открытого разделителя тега, за которым следует символ решетки и заканчиваются разделителем конечного тега. Пример тега комментария показан ниже: [5]

<%# рубиновый код %>

Это то же самое, что комментарий в Ruby. Весь код Ruby после # игнорируется и ничего не генерирует.

Другие теги

Другие вещи, общие для eRuby, просто распространены в Ruby, например, замена строк с помощью #{string_name}, которая аналогична в таких языках, как Perl или PHP .

Новые строки в eRuby можно подавить, добавив дефис в начале разделителя конечного тега. Например:

<% 2 . раз сделать -%> <%= @name %> <% end -%>        

В выводе приведенного выше кода значение имени печатается дважды в одной строке. [1] [3]

Реализации

Существует несколько реализаций eRuby, а именно:

  1. Еврорадио
  2. Эрубис
  3. уголек

ээээээ

erb — это реализация eRuby, написанная исключительно на языке программирования Ruby и включенная в стандартную библиотеку Ruby. [2]

Шаблон можно создать, запустив фрагмент кода, написанный с использованием объекта ERB. Простой пример показан ниже:

require 'erb' x = 400 simple_template = "Значение x: равно <%= x %>." рендерер = ERB . new ( simple_template ) помещает выход = рендерер . результат ( привязка )          

Результат выглядит следующим образом: Значение x: 400.

То же самое можно достичь, используя приведенный ниже код, который не использует объект ERB:

x = 400 string = "Значение x: #{ x } " помещает строку     

Оба приведенных выше фрагмента кода генерируют один и тот же результат. Но что произойдет, если мы поменяем местами строки 2 со строкой 3 в первом фрагменте кода и строку 1 со строкой 2 во втором фрагменте кода? Первый фрагмент изменится на код, показанный ниже:

require 'erb' simple_template = "Значение x: равно <%= x %>." x = 400 рендерер = ERB . new ( simple_template ) помещает выход = рендерер . результат ( привязка )          

Это по-прежнему генерирует тот же результат. т. е. значение x равно: 400.

Второй фрагмент кода изменится на следующий код:

string = "Значение x: #{ x } " x = 400 помещает строку     

Приведенный выше код не будет выполнен. Это связано с тем, что первая строка не знает значения x при выполнении. Таким образом, основная причина использования объекта ERB — заранее написать шаблоны путем привязки переменных и методов, которые могут не существовать в данный момент. Шаблон обрабатывается только тогда, когда результат вызывается для объекта ERB. Чтобы получить доступ к методам экземпляра и переменной экземпляра объекта, ERB использует объект привязки . Доступ к переменным и методам объекта предоставляется частным объектом привязки , который существует в каждом классе Ruby. Получить доступ к методам и переменным внутри метода класса легко . Но для доступа к переменным другого класса этот класс должен будет предоставить свой объект привязки через открытый метод. Пример показан ниже: [2] [4]

class ERBExample attr_accessor :variable1 # использование привязки для доступа к переменным класса def render () renderer . результат ( привязка ) конец         def инициализировать ( переменная1 ) @variable1 = конец переменной1      # Открыть метод приватной привязки(). def get_binding привязка () конец конец    пример = ERBExample . новый ( переменная1 ) рендерер = ERB . новый ( шаблон ) помещает выход = рендерер . результат ( пример . get_binding )       

Как мы видим в приведенном выше примере, мы предоставляем объект привязки класса ERBExample. Кроме того, мы использовали объект привязки для доступа к переменным и методам класса внутри одного из его методов.

метод new() ERB

Новый метод объекта ERB принимает еще два параметра . Второй параметр определяет уровень безопасности. Указав число во втором параметре (максимальное значение = 4), можно запустить шаблон в другом потоке . Значение числа определяет уровень безопасности. На максимальном уровне изоляции, если объект привязки не помечен как доверенный, ERB не сможет его использовать. Третий параметр указывает необязательные модификаторы. Их можно использовать для управления добавлением новых строк в вывод. Например, чтобы убедиться, что ERB не выводит новые строки после завершения тега, мы можем создать объект ERB, как показано ниже [3] [4]

рендерер = ERB . новый ( шаблон , 3 , '>' )    

Чтобы предоставить только третий параметр и игнорировать второй параметр, используйте 0 в качестве входного значения для второго параметра.

В ERB есть много других методов, которые можно использовать для визуализации шаблона. Полный список API, предоставляемых объектом ERB, см. в документации ERB, приведенной в справочном разделе.

Запуск ERB из командной строки

Как уже объяснялось в предыдущих разделах, erb используется для создания шаблонов. Это часто используется для создания веб-страниц или других текстовых файлов. Обычно требуется erb, чтобы отправить вывод в нужный файл. Чтобы добиться этого, мы можем использовать возможность перенаправления, предусмотренную в командной строке , и перенаправить вывод в файл, а не выводить его на стандартный вывод. [3]

erb  sample1.erb.txt  >  my_view.html.erb

В приведенном выше примере выходные данные перенаправляются в файл my_view.html.erb .

Связывание сторонних библиотек можно выполнить, используя опцию -r и указав имя библиотеки. Чтобы запомнить эту функциональность, можно запомнить ключевое слово Ruby require , которое выполняет ту же функциональность, что и опция -r. В приведенном ниже примере используется библиотека IPAddr.

erb  -r  IPAddr  sample1.txt.erb  >  my_view.html.erb

Как мы упоминали об уровнях безопасности в предыдущем разделе, можно указать уровень безопасности в качестве аргумента командной строки, используя опцию -S [3]

erb  -S 4 sample1.erb.txt > my_view.html.erb    

Эрубис

Erubis — это реализация eRuby, реализованная в Ruby, а также в Java . Согласно его домашней странице, он работает быстрее, чем eRuby и ERb, и имеет несколько полезных опций, включая альтернативные теги, позволяющие использовать действительный XML .

уголек

ember — это чистая реализация eRuby для Linux на Ruby . Он позволяет отлаживать шаблоны eRuby, улучшает их компоновку и предоставляет мощные сокращенные директивы eRuby.

Сравнение различных тегов реализации

В таблице ниже сравниваются теги, доступные в каждой из вышеперечисленных реализаций [4] [6] [7]

Смотрите также

Рекомендации

  1. ^ abc Браун, Грегори (2009). Лучшие практики Ruby . О'Рейли. стр. 279–281. ISBN 978-0596523008.
  2. ^ abc С., Руби; Д., Томас; Ханссон Д., Хайнемайер (2011). Гибкая веб-разработка с помощью Rails . Прагматичные программисты. п. 35. ISBN 978-1-934356-54-8.
  3. ^ abcde Эллис, Стюарт (1 июля 2016 г.). «Введение в шаблоны ERB» . Проверено 12 сентября 2016 г.
  4. ^ abcd "ЕРБ". 23 февраля 2015 года . Проверено 12 сентября 2016 г.
  5. ^ "ERB - Рубиновые шаблоны" . 2016 . Проверено 12 сентября 2016 г.
  6. ^ "уголь (1)" . 29 июня 2011 года . Проверено 12 сентября 2016 г.
  7. ^ "Эрубис". 2011 . Проверено 12 сентября 2016 г.

Внешние ссылки