RUBY: преобразование параметров адресной строки URL в хэш

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


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

Основную итерацию разборки параметра можно поделить условно на две части.

Подготовка строки параметра для рекурсивной обработки. Например, параметр вида «g[b][e][]=2» преобразуется в массив основным свойством которого является вложенность массивов размерность которых не превышает два элемента «[»g«, [»b«, [»e«, [»«, [»«, „2“]]]]]». Пустые строки в данном наборе расцениваются как признак массива «[]» и знак равно «=».

Пример подготовки массива для параметра с конечным значением типа массив «[]»

Пример подготовки массива для параметра с конечным значением типа строка или число «…»

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

Данная функция парсирует параметры вида «g[b][e][]=1&g[b][e][]=2&g[b][e][]=34&g[b][c]=d», но, увы, она не расчитана для парсирования массива сложных объектов, например, «g[][b][e][]=expression». Массив для этой функции может быть только конечным значением.

Пример работы функции

Любителям dry-кода предлагаю вносить поправки 🙂


Похожие записи:

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля отмечены *