Ruby: Хеш как последний параметр функции

Одна из идиоматических конструкций в Ruby – функция, принимающая последним параметром хеш. Обычно этот хеш содержит опции. Такое часто встречается и во встроенных функциях, и в библиотеках:

# link_to(body, url, html_options = {})
link_to 'blog', 'https://ru.hexlet.io/blog', { id: 'news', class: 'article' }
# => <a href="https://ru.hexlet.io/blog" class="article" id="news">blog</a>

В Ruby добавлен «синтаксический сахар», позволяющий опускать скобки в подобных ситуациях. Вызов выше, в реальном коде, выглядит так:

link_to 'blog', 'https://ru.hexlet.io/blog', id: 'news', class: 'article'

К такому способу записи нужно немного привыкнуть, так как может быть не сразу понятно, что к чему относится. Но потом станет видно, насколько он удобен и практичен. Это ещё одна из его «фишек», которая помогает строить языки предметной области (DSL). Из-за небольшого количества дополнительного синтаксиса код на Ruby может выглядеть просто как текст. Ниже пример роутинга (отвечает за формирование адресов страниц сайта) из Rails:

# В большинстве других языков подобная конструкция либо невозможна,
# либо получится в разы сложнее и загроможденнее символами
resources :companies, only: [:show, :edit, :update, :destroy] do
  resources :orders, only: [:create] do
    member do
      get :payment
    end
  end
end

Задание

Реализуйте функцию link_to(), которая генерирует html-ссылки. Функция принимает на вход три параметра:

  • Текст ссылки
  • Сама ссылка
  • Хеш с атрибутами (не обязательный)
link_to 'name', '/url'
# <a href="/url">name</a>

link_to 'name', '/url', class: 'link'
# <a href="/url" class="link">name</a>

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются https://github.com/hexlet-basics
Если вы столкнулись с трудностями и не знаете, что делать, задайте вопрос в нашем большом и дружном сообществе