Хорошо написанные тесты значительно уменьшают риск “поломать” приложение при добавлении новой фитчи или исправлении ошибки. В сложных системах, состоящих из нескольких взаимосвязанных компонентов, наиболее сложным является тестирование их точек соприкосновения.
В этой статье я расскажу о том как мы столкнулись со сложностью написания хороших тестов при разработке компонента на Go и как решали эту задачу используя библиотеку RSpec в Ruby on Rails.
Cloudwatch Log это сервис AWS в который приложения или Bash скрипты могут отправлять данные в виде строк или JSON, потом их можно найти или построить различные графики средствами того же AWS.
Как то раз у меня возникло желание получить данные из AWS Cloudwatch Log, обработать их особым образом и красиво представить в виде графика. Google Spreadsheet хорошо справляется с визуализацией данных, и ранее для подобных задач я загружал в него данные используя Ruby. Но тот же ruby скрипт нужно где-то хостить и периодически запускать, а все что он будет делать это запрашивать данные из одного API (AWS) и ложить их в другой (Spreadsheet). Хорошо бы, если бы Spreadsheet сам мог бы запрашивать данные, и оказывается он может, используя Google Script. Удивительно, сколько всего на самом деле умеют гугл доки.
Google Script позволяет не только создавать пользовательские функции и макросы используя JavaScript, но и обращаться к внешнему API.
У AWS есть SDK под JavaScript, так что я не ожидал никаких сложностей, но не тут то было. Оказалось, что этот SDK будучи импортированным в проект GS не может найти объект «window» и не работает.
Пришлось почитать API доки и самому реализовать вычисления сигнатуры для запроса. В этом нет ничего технически сложного, просто склеивание строк и вычисление хеша. Поэтому я не вдаюсь в подробности, а просто представляю свое решение на случае если кто-то столкнётся с подобной задачей.
Фреймворк Ruby on Rails меня просто очаровывает, но до недавнего времени некоторую сложность представляла из себя генерация CRUD контроллеров.
Почти всегда мне было необходимо реализовывать списки с сортировкой, фильтрацией и пагинацией, а стандартного способа этого достичь в рельсах я не обнаружил. Перепробовал несколько вариантов и ни один меня не удовлетворил:
стандартный генератор scaffold_controller — ничего подобного нет, CRUD с простейшим дизайном
nifty Scaffold — его разработка приостановлена, но все равно фильтрации и сортировки нет
гем для DataTable — не прижился, он обеспечивает только представление данных, а код для фильтрации и сортировки пришлось бы писать самому
Долгое время не удавалось найти ничего похожего на полюбившийся мне виджет CGridView из Yii framework. Уже почти смирился с необходимостью писать свой велосипед, но наткнулся на DRY CRUD и хочу поделится опытом его использования. Может кому-то он окажется полезным, а может кто-то подскажет еще более подходящий инструмент.