2020
Реализуем простое веб-приложение, которое будет оперировать списком проверочных работ для студентов
Система должна поддерживать следующие действия:
Roda построена по принципу модульной системы, с помощью модулей можно решать конкретные задачи разработки приложения
Модульная система позволяет проводить кардинальные изменения в API путём добавления нового модуля и помечая старый модуль как устаревший
Для подключения модулей внутри RODA-приложения используется метод plugin
Список модулей, поставляемых вместе с джемом roda
, описан в официальной документации
Модули разделены на следующие группы:
route do |r|
)В рамках следующей пары занятий будем использовать простую схему организации файлов наших Roda-приложений
Структура такого приложения описана в конвенциях
При показе HTML-страниц с точки зрения веб-сервера мы должны разделять
При развёртывании приложения для большого количества пользователей (больше 1) статические файлы должен раздавать специализированный веб-сервер (Nginx, Apache и т.п.)
При локальной разработке удобно раздавать файлы единым сервером
Для раздачи статических файлов будем использовать модуль Public
Хеш opts
содержит настройки приложения, которые могут быть использованы как модулями, так и разработчиком приложения
Для ограничения раздачи файлов только в окружении для разработки будем использовать модуль Environments
configure :development do
plugin :public
opts[:serve_static] = true
end
route do |r|
r.public if opts.key?(:serve_static)
end
Для формирования HTML-документов используется библиотека tilt, которая поддерживает множество шаблонизаторов. В рамках курса мы будем использовать уже знакомые вам ERB-шаблоны. Данную библиотеку нужно добавить в зависимости приложения
На стороне Roda мы будем использовать следующие модули:
Render предлагает 2 метода для отображения информации:
view
- отображение шаблона страницы внутри раскладкиrender
- отображение шаблона без раскладкиPartials добавляет метод partial
, работающий как render
При формировании страниц сайта у нас всегда есть общие элементы: заголовок, навигационная панель, подножие и технические элементы. Удобно поместить их в раскладку и подменять только центральную часть
Файл раскладки называется layout.erb
и располагается рядом с шаблонами страницы в каталоге views
Существует два варианта передачи информации:
Локальные переменные
Переменные экземпляра
Эти классы и библиотеки входят в стандартную поставку языка Ruby
Класс Struct предоставляет возможности для быстрого создания классов для хранения данных
Он входит в состав языка, не надо подключать никаких библиотек
Модуль Forwardable предоставляет инструменты для делегирования методов переменной экземпляра
require 'forwardable'
class RecordCollection
extend Forwardable
def_delegator :@records, :[], :record_number
def initialize
@records = [1, 5, 10]
end
end
collection = RecordCollection.new
collection.record_number(0) # => 4