Мне, кажется, пока еще рановато: приложение еще не готово для полноценного использования (и дело не только в рюшечках, но и в важных аспектах безопасности). После третьей статьи обязательно выложу.
Отличное замечание! Действительно, если у нас уже есть файл с таким именем, то мы получим то же самое значение дайджеста и два файла будут иметь одну и ту же ссылку. Значит, в третьей части заодно рассмотрим решение этой проблемы.
Оффтоп.
Помимо привычных get и post Синатра понимает методы put и delete. Я раньше об этом слышал, но никогда не сталакивался. Насколько я понимаю, эти методы не поддерживаются браузерами (хотя Синатра умеет с ними работать через hidden input поля формы). Я не смог найти на эту тему русскоязычной литературы, а английская вики для меня сложновата. Вы на пальцах, в двух словах не объясните где здесь выгода? Я чувствую, что она здесь есть :)
То есть мне не ясно что представляет из себя запрос put и delete. И не понятно почему их реализации нет в браузерах.
Некоторые комментаторы статьи узко смотрят на REST. Просто иногда на одной стороне пользователь а на другой сервер, а иногда сервера общаются между собой.
Хотел дополнить, что есть не только REST (Иван Сагалаев об отличиях REST и WS*), но REST это действительно просто и наглядно.
Для меня достоинства REST неоспоримы, и даже ничего и никому доказывать не хочется.
Домашний файлообменник на базе Sinatra и DataMapper. Часть 2 — Advanced features.