Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
будет преобразован в следующий код:
<?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
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
В шаблонах применяются специальные конструкции для обозначения подставляемого текста:
<div class='detail'>[[:author]]: #{@book.author}</div>
<div class='detail'>[[:language]]: #{@book.language}</div>
<div class='detail'>[[:book_rank]]: #{@book.rank}</div>
Выбор файла локали определяется значением
session[:LOCALE]
@lc
@language = @lc[:language]
Если зависимости от языка более обширны, то можно организовать несколько каталогов шаблонов, по одному для каждого языка. Какой из них использовать, определяется значением установленной локали.
Дополнительную информацию о Nitro можно найти на следующих ресурсах:
• http://www.nitroproject.org/ (домашняя страница Nitro)
• http://rubyforge.org/forum/forum.php?forum_id=5921 (страница проекта Nitro на сайте Ruby Forge);
• http://oxyliquit.de/ (справочное и учебное руководство по Nitro).
19.5. Введение в Wee
Согласно заявлению автора Майкла Ноймана (Michael Neumann), Wee — это «каркас для создания очень динамичных, компонентных Web-приложений, на дизайн которого оказал большое влияние продукт Seaside». Название расшифровывается как «Web Engineering Easy» (сделаем конструирование Web проще).
Установить Wee проще всего из gem-пакета (
gem install wee
Но даже и с такими оговорками Wee заслуживает изучения ради своей компонентной модели, а также потому, что продолжения — интересная, но недостаточно исследованная область, лежащая в стороне от главного направления разработки для Web. Автор говорит, что на него повлияли идеи Seaside, а основанный на продолжениях каркас для Web-приложений на языке Smalltalk написал Ави Брайант (Avi Bryant).
В gem-пакет для инсталляции Wee входит большое число разнообразных примеров. Один из них — Web-интерфейс к обозревателю объектного пространства, другой — применение Ajax на основе библиотеки JavaScript-функций Prototype. Есть также пример, демонстрирующий совместную работу Wee и Nitro.
В основе Wee лежит идея компонентов. Они похожи на виджеты в графических интерфейсах. Компоненты легко поддаются повторному использованию, инкапсулируют состояние, представление и поведение, хотя все это можно делегировать внешним шаблонам или моделям.
19.5.1. Простой пример
Во время установки Wee создается генератор простых приложений, который, естественно, называется
wee
wee create my-demo
my-demo
Созданное приложение всего лишь подсчитывает, сколько раз пользователь щелкнул по ссылке. Файл
run.rb
require 'wee'
require 'wee/utils'
require 'wee/adaptors/webrick'
# Ваши компоненты.
require 'components/main'
app = Wee::Utils.app_for do