Чтение онлайн

на главную - закладки

Жанры

Программирование на языке Ruby
Шрифт:

<app_root>/part/users

<app_root>/part/users.rb

<app_root>/part/users/public/

<app_root>/part/users/controller.rb

<app_root>/part/users/model/user.rb

<app_root>/part/users/model/acl.rb

<app_root>/part/users/template/login.xhtml

<app_root>/part/users/template/form.xinc

<app_root>/part/users/run.rb

Главный файл

run.rb
мог бы включить такую часть с помощью одной директивы
require
:

require 'part/users'

Теперь Nitro будет рассматривать весь код в каталоге

part/users
, как если бы он находился в дереве исходных текстов главного приложения. Поиск шаблонов начинается в папке template приложения и продолжается в подкаталогах каталога
part
. Если вы хотите переопределить шаблон, поставляемый вместе с частью, то нужно просто поместить замещающий вариант в соответствующий подкаталог папки
template
.

Часто приложение должно отображать повторяющиеся данные; обычно они оформлены в виде HTML-таблицы в шаблоне. Если число строк заранее не известно, то придется обойти какой-то набор.

Можно встроить код Ruby непосредственно в шаблон, но Nitro предлагает специальный механизм конвейерной компиляции, чтобы упростить программирование типичных логических конструкций.

Конвейерная компиляция — это последовательность преобразований, которым подвергаются шаблоны по мере объединения в действия. Существуют классы преобразования для различных задач, в частности статического включения файлов, XSLT-преобразований и локализации. Класс

Morphing
исследует разметку в шаблоне и ищет специальные атрибуты, которые обозначают различные преобразования.

В нашем демонстрационном приложении данных мало, но если представить себе много авторов, каждый из которых написал несколько книг, то можно было бы показать список книг данного автора. Метод контроллера поместил бы в переменную

@books
список книг, а часть шаблона для обхода этого цикла могла бы выглядеть так:

<h4>Books by #{@author}</h4>

<ul>

 <li each="book in @books" > #{book.title}</li>

</ul>

Класс

Morphing
находит атрибут each элемента li и преобразует его в следующий код:

<?r for book in @books ?>

<li>#{book.title} </li>

<?r end ?>

Порожденная таким образом разметка передается следующему этапу конвейера.

Точно так же для повтора элемента можно использовать атрибут

times
. Например, фрагмент

<img src='/img/ruby.png' alt='*' times='@book.rating' />

будет преобразован в следующий код:

<?r 3.times do ?>

<img src='/img/ruby.png' alt='*' />

<?r end ?>

19.4.5. Прочие детали

В Nitro слишком много различных механизмов, чтобы все их можно было рассмотреть здесь. Но в этом разделе мы упомянем некоторые особенно приятные «вкусности».

В состав Nitro входит вспомогательный код, позволяющий использовать многочисленные библиотеки JavaScript, которые поддерживают различные формы DHTML и Ajax. Для облегчения интеграции в Nitro применяется высокоуровневый синтаксис. Например, в дистрибутиве Nitro есть пример поиска по сайту Flickr и вывода уменьшенных изображений. Текстовое поле для ввода тегов поиска поддерживает технологию Ajax, что достигается следующей разметкой:

<input type="text" id="tags" name="tags" auto_complete="true" />

Контроллер реализует метод

tags_auto_complete
, который возвращает строку в формате XML, зависящую от содержимого поля.

Nitro позволяет кэшировать действия (то есть отрисованные страницы целиком), результаты вызова методов и сгенерированные фрагменты текста. Например, чтобы поместить в кэш результат отрисовки страницы index, контроллер должен вызвать следующий метод:

cache_output :index

Кэширование можно добавить и в сегменты кода:

<?r cache(:book_list_cache_key) do ?>

<ul>

 <li each="book in Books.all">#{book.title}</li>

</ul>

<?r end ?>

В Nitro встроен класс преобразования для локализации, позволяющий автоматически подставлять в шаблон то или иное содержимое. Он не является стандартным этапом конвейерной компиляции, вы сами должны добавить его в файл

run.rb
:

require 'nitro/compiler/localization'

include Nitro

Compiler.transformation_pipeline = [

 StaticInclude,

 Elements,

 Morphing,

 Markup,

 Localization,

 Cleanup

]

Отметим, что конвейер можно переконфигурировать, выбросив стандартные преобразования и добавив собственные. Далее определяются локали:

Localization.locales = {

 :en => 'conf/locales/en.yml',

 :de => 'conf/locales/de.yml'

}

Локаль — это просто YAML-файл, сопоставляющий одним строкам другие:

– --

:author: Autor

:language: Sprache

:book_rank: Buchrank

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

Поделиться:
Популярные книги

Вечный Данж. Трилогия

Матисов Павел
Фантастика:
фэнтези
юмористическая фантастика
6.77
рейтинг книги
Вечный Данж. Трилогия

Небесные просторы

Брин Дэвид
3. Буря Возвышения
Фантастика:
космическая фантастика
6.25
рейтинг книги
Небесные просторы

Князь Андер Арес 3

Грехов Тимофей
3. Андер Арес
Фантастика:
рпг
аниме
фэнтези
5.00
рейтинг книги
Князь Андер Арес 3

Цари. Романовы. История династии

Радзинский Эдвард Станиславович
Документальная литература:
биографии и мемуары
6.09
рейтинг книги
Цари. Романовы. История династии

Игра с огнем

Джейн Анна
2. Мой идеальный смерч
Любовные романы:
современные любовные романы
9.51
рейтинг книги
Игра с огнем

Цикл "Отмороженный". Компиляция. Книги 1-14

Гарцевич Евгений Александрович
Отмороженный
Фантастика:
боевая фантастика
рпг
постапокалипсис
5.00
рейтинг книги
Цикл Отмороженный. Компиляция. Книги 1-14

Библия. Синодальный перевод

Священное Писание
Религия и эзотерика:
религия
5.00
рейтинг книги
Библия. Синодальный перевод

Свет и Тьма

Щепетнов Евгений Владимирович
3. Нед
Фантастика:
фэнтези
9.16
рейтинг книги
Свет и Тьма

Герои 1812 года

Дуров Валерий Александрович
680. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Герои 1812 года

Имаджика

Баркер Клайв
7. Книга-загадка, книга-мистика
Фантастика:
фэнтези
7.56
рейтинг книги
Имаджика

Последний реанорец. Том I и Том II

Павлов Вел
1. Высшая Речь
Фантастика:
фэнтези
7.80
рейтинг книги
Последний реанорец. Том I и Том II

Воронцов. Перезагрузка

Тарасов Ник
1. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фантастика: прочее
5.40
рейтинг книги
Воронцов. Перезагрузка

Образ врага

Дашкова Полина Викторовна
Детективы:
триллеры
прочие детективы
8.32
рейтинг книги
Образ врага

История человечества. Восток

Панкова Мария Александровна
История человечества
Научно-образовательная:
история
5.00
рейтинг книги
История человечества. Восток