2020
Реализуем простое веб-приложение, которое будет оперировать списком проверочных работ для студентов
Система должна поддерживать следующие действия:
Roda построена по принципу модульной системы, с помощью модулей можно решать конкретные задачи разработки приложения
Модульная система позволяет проводить кардинальные изменения в API путём добавления нового модуля и помечая старый модуль как устаревший
Для подключения модулей внутри RODA-приложения используется метод plugin
class App < Roda
  plugin :csrf
endСписок модулей, поставляемых вместе с джемом roda, описан в официальной документации
Модули разделены на следующие группы:
route do |r|)В рамках следующей пары занятий будем использовать простую схему организации файлов наших Roda-приложений
Структура такого приложения описана в конвенциях
При показе HTML-страниц с точки зрения веб-сервера мы должны разделять
При развёртывании приложения для большого количества пользователей (больше 1) статические файлы должен раздавать специализированный веб-сервер (Nginx, Apache и т.п.)
При локальной разработке удобно раздавать файлы единым сервером
Для раздачи статических файлов будем использовать модуль Public
opts[:root] = __dir__
plugin :public
route do |r|
  r.public
endХеш 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
r.on 'tests' do
  r.get do
    view('tests')
  end
endСуществует два варианта передачи информации:
Локальные переменные
view('tests', locals: { info: 'Some' })Данные: <%= info %>Переменные экземпляра
@info = 'Some info'
view('tests')<%= @info %>Эти классы и библиотеки входят в стандартную поставку языка Ruby
Класс Struct предоставляет возможности для быстрого создания классов для хранения данных
Он входит в состав языка, не надо подключать никаких библиотек
Customer = Struct.new(:name, :address)
dave = Customer.new("Dave", "123 Main")
dave.name     #=> "Dave"Модуль 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