Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Main.new.add_decoration(Wee::PageDecoration.new('Wee'))endWee::Utils::autoreload_glob('components/**/*.rb')Wee::WEBrickAdaptor.register('/арр' => app).startКласс
Mainrenderadd_decoration(Wee::PageDecoration.new('Wee'))Далее конфигурируется автоматическая перезагрузка файлов, чтобы можно было изменить код и проверить, как работает новая версия приложения, не перезапуская WEBrick. И наконец, запускается экземпляр сервера WEBrick, который обслуживает запросы к URL, начинающемуся с пути
'/арр'Wee::WEBrickAdaptor.register('/арр' => арр).start(:Port => 8787 )Компонент
Mainrenderclass Main < Wee::Component def initialize super() # Здесь должен быть ваш код инициализации... end def render r.anchor.callback(:click).with { r.h1("Welcome to Wee!") } r.text "#{ @clicks || 'No' } clicks" end def click @clicks = (@clicks || 0) + 1 endendWee позволяет пользоваться синтаксисом Ruby для генерации HTML-кода примерно так же, как библиотека XML Builder Джима Вайриха и генератор XML в Nitro. Однако в Wee можно еще связать ссылку с действием (в данном случае с методом
clickclick19.5.2. Ассоциирование состояния с URL
В примере выше отслеживается текущее значение переменной
@clickЕсли вручную изменить URL в браузере, то вы получите ту же самую страницу, показываемый счетчик щелчков не изменится. Нет никакой связи между URL и состоянием сервера. (Когда будете ставить эксперимент, не забудьте отключить кэширование в браузере).
Впрочем, это положение можно изменить, слегка модифицировав файл
main.rbMaindef backtrack_state(snap) super snap.add(self)endТеперь перезапустите приложение. Щелкнув несколько раз по ссылке, вручную измените URL в браузере так, чтобы повторно загрузилась предыдущая страница. Теперь счетчик должен показать то значение переменной
@clickЧтобы проверить то же самое с использованием механизма продолжений Wee, добавьте после директив
requirerun.rbrequire 'wee/continuation'В Wee слишком много возможностей, чтобы рассмотреть их здесь подробно. Дополнительную информацию можно найти на следующих ресурсах:
• страница проекта Wee (http://rubyforge.org/projects/wee/);
• страница проекта Nemo (http://rubyforge.org/projects/nemo/):
• проект Seaside (http://seaside.st/)
Одна из интересных особенностей — возможность иметь вложенные компоненты и организовывать цепочки обязанностей, что позволяет собирать сайты из повторно используемых компонентов пользовательского интерфейса. Стоит также познакомиться с проектом Nemo — реализацией Mewa (Meta-level Architecture for Web Applications, метауровневая архитектура Web-приложений) на Wee.
19.6. Разработка Web-приложений с помощью IOWA
IOWA (Interpreted Objects for Web Applications — интерпретируемые объекты для Web-приложений) — это каркас, написанный Кирком Хейнсом (Kirk Haines). Он позволяет создавать повторно используемые, инкапсулированные Web-компоненты для генерации сайта.
19.6.1. Основные идеи IOWA
Приложение IOWA работает как фоновый процесс, который прослушивает сокет в ожидании запросов. IOWA включает различные адаптеры, так что источником запроса может быть CGI, Mongrel, WEBrick и т.д.
На домашней странице IOWA представлены хорошее объяснение архитектуры и учебное руководство, поэтому здесь мы приведем лишь краткий обзор основных особенностей.
Загрузить IOWA можно с сайта rubyforge.org. Gem-пакет будет подготовлен вместе с версией 1.0. Примеры, представленные в этом разделе, составлены на базе предварительной версии, доступной в виде zip- или tgz-файла.
В состав дистрибутива входит несколько примеров и тестов, демонстрирующих работу каркаса. Мы рассмотрим простое приложение, разработанное на основе этих примеров.
Для приложения IOWA нужен код, который запустит фоновый процесс, а в качестве фронтального процесса мы будем пользоваться встроенным сервером WEBrick. Сценарий
арр.rbrequire 'iowa_webrick'class HWApplication < Iowa::Application self.daemonize = true attr_accessor :dbpool def initialize(*args) super Iowa.config[Iowa::Capplication][Iowa::Croot_url] = 'http://127.0.0.1:2000' endendIowa.runПо умолчанию конфигурационные данные читаются из файла
арр.cnfsocket:
