Проект #1

Генератор форм

Разработчик на Ruby on Rails

Библиотека, с помощью которой удобно создавать формы в шаблонах сайтов. Позволяет сократить код описания формы во много раз за счет автоматической обработки ошибок и различных контролов.

2-4
недели

Цель

Настройка окружения

Первый проект прокачивает работу с экосистемой Ruby. Студенты учатся запускать любые программы, написанные на Ruby. Знакомятся с интерпретатором языка и его возможностями по быстрой отладке и проверке работы небольших кусков кода. Знакомятся с bundler. Утилитой, через которую происходит управление проектами: установка и обновление дополнительных библиотек, публикация пакета и многое другое.

Здесь же идет формирование правильной инженерной культуры. Одно из первых заданий в настройке — это подключение линтера (Rubocop), который автоматически следит за стилем кода и находит потенциальные ошибки. Код, соответствующий стандартам кодирования, гораздо проще в анализе и значительно выше оценивается другими программистами. Это, в том числе, важно при демонстрации проектов на собеседованиях.

Архитектура

В ходе разработки понадобится выполнять множество операций: парсинг входящих данных, построение формы, формирование необходимого вывода. Все это требует хорошей организации кода. Модульность и абстракции выходят в этом проекте на новый уровень.

Помимо внутренней архитектуры, в этом проекте появляется необходимость работать с Rails. Происходит углубление понимания работы экосистемы Rails и как работают шаблонизаторы форм.

Описание

Генератор Форм - библиотека, с помощью которой удобно создавать формы в шаблонах сайтов. Это популярная задача, для решения которой существует множество библиотек, например библиотека встроенная в Rails https://guides.rubyonrails.org/form_helpers.html или популярный gem SimpleForm

Пример использования:

User = Struct.new(:id, :name, :job)

user = User.new

html = HexletCode.form_for user, url: 'hello_world' do |f|
  f.input :name
  f.input :job, as: :text
  f.submit
end

puts html
# <form action="hello_world" method="post">
#   <label for="user_name">Name</label>
#   <input id="user_name" name="user[name]" value="" type="text">
#   <label for="user_job">Job</label>
#   <textarea cols="20" rows="40" id="user_job" name="user[job]"></textarea>
#   <input type="submit" name="commit" value="Create">
# </form>

Наставники

Аватар эксперта Давид Саламау
Давид Саламау
Lead developer, Hodlex LTD
Аватар эксперта Руслан Князев
Руслан Князев
Backend Developer, Sifox
Аватар эксперта Артем Раков
Артем Раков
Full Stack Engineer, SWTCH Energy
Аватар эксперта Алена Фалевич
Алена Фалевич
Software Developer, Wer liefert was? GmbH
Сколько стоят проекты?

Проекты входят в стоимость обучения в любом формате: самостоятельном, групповом и индивидуальном. Дополнительно платить не нужно.

Зачем проходить проекты?

Проекты дают опыт разработки в реальной среде. Проходите каждый проект сразу после изучения курсов, которые стоят в учебном плане перед ним, — это отличный способ глубже разобраться в материале.

Проекты — портфолио программиста. Их код останется в вашем аккаунте на GitHub и будет преимуществом при поиске работы.

Чтобы узнать о том, что такое проекты и в чём их польза, прочитайте нашу статью «Анатомия проектов Хекслета».

Что делать, если возникли трудности во время выполнения проекта?

Задавайте вопросы в разделе «Обсуждение» на странице шага, на котором возникли трудности, или вашему наставнику. Изучите вопросы других студентов в «Обсуждениях»: там собрана большая база знаний, ей можно и нужно пользоваться. Попросите о помощи в нашем Slack-чате в канале #hexlet-projects.

Кто проверяет проекты?

Автоматизированные тесты и линтер. В групповом и индивидуальном форматах наставник дополнительно проверит то, что тестами проверить невозможно (архитектуру проекта, правильность именования, удачность решений), и проведёт код-ревью, чтобы сделать проект ещё качественнее.

У меня другой вопрос

Нажмите на виджет в правом нижнем углу экрана и поищите ответ в нашей справке. Или сразу пишите на support@hexlet.io — вам ответит живой человек из команды Хекслета.