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

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

Жанры

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

<html>

 <head>

<title>Nitro!</title>

 </head>

 <body>

<h1>The Ruby Way</h1>

<h2>Hal Fulton</h2>

Page last updated: #{Time.now}

 </body>

</html>

После перезагрузки страницы вы увидите текущие дату и время. Nitro также поддерживает синтаксис команд обработки, принятый в XML:

<?r curr_date = Time.new.strftime( "%a, %b %d, %Y") ?>

<html>

 <head>

<title>Nitro!</title>

 </head>

 <body>

<h1>The Ruby Way</h1>

<h2>Hal Fulton</h2>

Page last updated: #{curr_date}

 </body>

</html>

Отметим, что из наличия синтаксиса

<?r ... ?>
не следует, что весь шаблон должен подчиняться правилам XML. Nitro располагает средствами для обработки шаблонов как XML-документов, а такой синтаксис позволяет иметь шаблоны, которые одновременно являются корректными XML-документами.

19.4.2. Nitro и паттерн MVC

Вставка кода непосредственно в шаблон удобна для экспериментов и перехода со статических страниц на динамические. Но со временем обнаруживается, что тестировать и сопровождать такое приложение становится все сложнее. Паттерн Модель-Вид-Контроллер позволяет упростить жизнь за счет переноса кода в классы Ruby.

Начнем с создания класса контроллера

main.rb
. Если в каталоге приложения есть папка
src
, Nitro добавит ее в список путей, по которым ищутся страницы. Следуя принятым в Nitro соглашениям, создадим файл
<app_root>/src/controller/book.rb
:

class BookController

 def index

@author = "Hal Fulton"

@title = "The Ruby Way"

@last_update = Time.new

 end

end

Изменим файл

index.xhtml
, включив в него ссылки на эти переменные:

<html>

 <head>

<title>Nitro!</title>

 </head>

 <body>

<h1>#{@title}</h1>

<h2>#{@author}</h2>

Page last updated: #{@last_update}

 </body>

</html>

Придется также немного подправить файл

run.rb
:

require 'nitro'

require 'controller/book'

Nitro.run(BookController)

Перезапустите сервер WEBrick и перезагрузите страницу, чтобы посмотреть на результат.

Отметим несколько вещей. Файлы шаблонов могут остаться в папке

public
; класс контроллера не обязан расширять какой-то специальный базовый класс; класс, переданный методу
Nitro.run
, автоматически сопоставляется с корневым URL приложения. Все эти аспекты конфигурируемы.

По умолчанию Nitro ищет шаблоны в каталогах

template
и
public
. Если вы не хотите помещать шаблоны в каталог
public
(скажем, потому, что предпочитаете зарезервировать его только для статических HTML-файлов), то можете создать каталог
template
и хранить их там. Предполагается, что пути к шаблонам повторяют пути, заданные в URL, относительно корневой папки шаблонов. Наш файл
index.xhtml
мог бы храниться как
public/index.xhtml
или
template/index.xhtml
. Использование каталога
public
упрощает переход от статического сайта к динамическому, но лучше организовать раздельное хранение статических файлов и шаблонов.

Классы контроллеров могут отображаться на пути URL с помощью файла

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

require 'nitro'

require 'controller/book'

Nitro::Server.map = { '/books' => BookController }

Nitro.run

Соответствующий шаблон нужно будет переместить в другое место, которое соответствовало бы новому пути (

template/books/index.xhtml
)

Перезапустите сервер и укажите новый URL:

http://127.0.0.1:9999/books

Сейчас самое время создать настоящую страницу сайта, но ради экономии места подавим это желание. Интереснее добавить механизм для запроса данных о нескольких книгах (сколь бы замечательна ни была та, что вы держите в руках). Добавим файл

src/model/book.rb
, содержащий описание модели
Book
:

class Book

 @@items = {}

 attr_accessor :title

 attr_accessor :author

 attr_accessor :update_time

 def initialize( values = {} )

@title, @author = values[:title], values[:author]

@update_time = Time.now

 end

 def save

@@items[author] = self

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

Полное собрание стихотворений

Брюсов Валерий Яковлевич
Поэзия:
поэзия
7.00
рейтинг книги
Полное собрание стихотворений

Книга 16. Каббалистический форум (старое издание)

Лайтман Михаэль Семенович
Научно-образовательная:
прочая научная литература
религиоведение
5.00
рейтинг книги
Книга 16. Каббалистический форум (старое издание)

Письма императора

Вербинина Валерия
5. Амалия – секретный агент императора
Детективы:
исторические детективы
8.76
рейтинг книги
Письма императора

Кодекс Охотника. Книга XXIV

Винокуров Юрий
24. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXIV

Глотка

Страуб Питер
Детективы:
триллеры
6.25
рейтинг книги
Глотка

100 великих войн

Соколов Борис Вадимович
100 великих
Справочная литература:
энциклопедии
6.40
рейтинг книги
100 великих войн

Последний Паладин. Том 14

Саваровский Роман
14. Путь Паладина
Фантастика:
аниме
фэнтези
попаданцы
5.75
рейтинг книги
Последний Паладин. Том 14

Миры Источника. Трилогия

Авраменко Олег Евгеньевич
19. В одном томе
Фантастика:
фэнтези
5.60
рейтинг книги
Миры Источника. Трилогия

Дважды одаренный. Том II

Тарс Элиан
2. Дважды одаренный
Фантастика:
городское фэнтези
альтернативная история
аниме
5.25
рейтинг книги
Дважды одаренный. Том II

Средневековая история. Тетралогия

Гончарова Галина Дмитриевна
Средневековая история
Фантастика:
фэнтези
попаданцы
9.16
рейтинг книги
Средневековая история. Тетралогия

Политолог

Проханов Александр Андреевич
Проза:
современная проза
5.20
рейтинг книги
Политолог

Англо-русский и русско-английский словарь ПК

Мизинина Ирина
Справочная литература:
словари
6.30
рейтинг книги
Англо-русский и русско-английский словарь ПК

Последний Паладин. Том 6

Саваровский Роман
6. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 6

Чернильный орешек

Хэррод-Иглз Синтия
4. Династия Морлэндов
Приключения:
исторические приключения
7.70
рейтинг книги
Чернильный орешек