Программирование на языке 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_completeNitro позволяет кэшировать действия (то есть отрисованные страницы целиком), результаты вызова методов и сгенерированные фрагменты текста. Например, чтобы поместить в кэш результат отрисовки страницы 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.rbrequire 'nitro/compiler/localization'include NitroCompiler.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 создается генератор простых приложений, который, естественно, называется
weewee create my-demomy-demoСозданное приложение всего лишь подсчитывает, сколько раз пользователь щелкнул по ссылке. Файл
run.rbrequire 'wee'require 'wee/utils'require 'wee/adaptors/webrick'# Ваши компоненты.require 'components/main'app = Wee::Utils.app_for do
