Хэл Фултон - Программирование на языке Ruby
- Название:Программирование на языке Ruby
- Автор:
- Жанр:
- Издательство:ДМК Пресс
- Год:2007
- Город:Москва
- ISBN:5-94074-357-9
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Хэл Фултон - Программирование на языке Ruby краткое содержание
Ruby — относительно новый объектно-ориентированный язык, разработанный Юкихиро Мацумото в 1995 году и позаимствовавший некоторые особенности у языков LISP, Smalltalk, Perl, CLU и других. Язык активно развивается и применяется в самых разных областях: от системного администрирования до разработки сложных динамических сайтов.
Книга является полноценным руководством по Ruby — ее можно использовать и как учебник, и как справочник, и как сборник ответов на вопросы типа «как сделать то или иное в Ruby». В ней приведено свыше 400 примеров, разбитых по различным аспектам программирования, и к которым автор дает обстоятельные комментарии.
Издание предназначено для программистов самого широкого круга и самой разной квалификации, желающих научиться качественно и профессионально работать на Ruby.
Программирование на языке Ruby - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
/home/jbritt/demo/public/index.html
Д ля начала сделаем этот файл совсем простым:
The Ruby Way
Hal Fulton
Теперь в корневом каталоге приложения создадим файл run.rb
:
require 'nitro'
Nitro.run
Чтобы увидеть новое приложение в действии, запустите файл run.rb
(из каталога demo/
). Потом откройте браузер и введите URL http://127.0.0.1:9999 (здесь 9999 — порт Nitro по умолчанию).
Если все пройдет удачно, то появится приведенная выше простая страница. Принимайте поздравления — вы создали первое приложения для Nitro! Разумеется, Nitro позволяет делать гораздо больше, поэтому посмотрим, как это приложение можно расширить.
Прежде всего, интерес представляет файл run.rb
. В зависимости от того, как вы развернули свою программу, его запуском может заниматься диспетчерский сценарий в каталоге public
. Но для демонстрации и тестирования вы можете запустить его вручную и воспользоваться встроенным диспетчером WEBrick. Впрочем, для промышленной эксплуатации имеет смысл изучить предоставляемую Nitro поддержку Mongrel, SCGI или FastCGI.
Nitro поддерживает много разных архитектур и паттернов, а приложение обычно строится на базе паттерна Модель-Вид-Контроллер (model-view-controller, MVC). Окончательный выбор всегда остается за вами, a Nitro облегчает переход от простых сайтов, предназначенных только для просмотра, к полноценным приложениям с поддержкой базы данных.
По умолчанию при обработке запроса Nitro сначала ищет файл в папке public
. Предполагается, что если имя страницы явно не указано, речь идет о файле index.html
. В этом отношении Nitro ведет себя как любая статическая система. При желании мы можем поместить в папку public
дополнительные статические HTML-страницы, а в ее подпапках хранить изображения и CSS-файлы.
Но интереснее то, что происходит, когда Nitro не может найти прямого соответствия запрошенной странице. Давайте изменим расширение файла index.html
на .xhtml
:
public/index.xhtml
Перезапустите сценарий run.rb
. Снова введите URL http://127.0.0.1:9999, вы должны увидеть ту же самую страницу. Не найдя файла index.html
, Nitro ищет файл index.xhtml
и загружает его. По умолчанию xhtml
— расширение, применяемое в Nitro для динамического контента. В общем случае, получив запрос, Nitro сначала ищет файл с расширением html
, а потом — xhtml
.
В XHTML-файлах могут быть подставляемые переменные и программная логика. Измените файл index.xhtml
следующим образом:
The Ruby Way
Hal Fulton
Page last updated: #{Time.now}
После перезагрузки страницы вы увидите текущие дату и время. Nitro также поддерживает синтаксис команд обработки, принятый в XML:
The Ruby Way
Hal Fulton
Page last updated: #{curr_date}
Отметим, что из наличия синтаксиса не следует, что весь шаблон должен подчиняться правилам XML. Nitro располагает средствами для обработки шаблонов как XML-документов, а такой синтаксис позволяет иметь шаблоны, которые одновременно являются корректными XML-документами.
19.4.2. Nitro и паттерн MVC
Вставка кода непосредственно в шаблон удобна для экспериментов и перехода со статических страниц на динамические. Но со временем обнаруживается, что тестировать и сопровождать такое приложение становится все сложнее. Паттерн Модель-Вид-Контроллер позволяет упростить жизнь за счет переноса кода в классы Ruby.
Начнем с создания класса контроллера main.rb
. Если в каталоге приложения есть папка src
, Nitro добавит ее в список путей, по которым ищутся страницы. Следуя принятым в Nitro соглашениям, создадим файл /src/controller/book.rb
:
class BookController
def index
@author = "Hal Fulton"
@title = "The Ruby Way"
@last_update = Time.new
end
end
Изменим файл index.xhtml
, включив в него ссылки на эти переменные:
#{@title}
#{@author}
Page last updated: #{@last_update}
Придется также немного подправить файл 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
end
def self.find(author)
@@items[author]
end
end
Теперь контроллер может запрашивать данные у класса Book
. Изменим метод index
:
def index
book = Book.find_by_author("Mark Twain")
@author = book.author
@title = book.title
@last_update = book.update_time
end
А в файл run.rb
вставим ссылку на модель Book
и загрузим какие-нибудь данные:
require 'model/book'
Book.new(:title => "Life on the Mississippi",
:author => "Mark Twain").save
Интервал:
Закладка: