Не уверен, насколько вы знакомы с ruby - дайте мне знать, что не имеет смысла.
Строки 1 и 2 импортируют библиотеки, необходимые для запуска веб-сервера.
Затем в сети4, базовый класс Object
вновь открывается, чтобы добавить в него новый метод - вы можете делать это где угодно в ruby.Все классы наследуются от Object
, поэтому любые методы, которые вы здесь определяете, можно вызывать для любого объекта.
В строке 5 начинается определение нового метода для всех объектов, который называется webapp
.
.6 и 7 определяют метод call
для каждого экземпляра Object
, который создается.Я думаю, что это в основном эквивалентно использованию self.call
для определения метода.
Строки 8 берет относительную часть URL (например, push/1
или to_a
) и разбивает его на две части (т.е.func
и строка переменной длины attrs
).
Строка 9 затем возвращает необработанный HTTP-ответ, состоящий из кода состояния (200
), заголовков (в данном случае пустых: {}
) и тело ([send(func, *attrs).to_s])
Тело состоит из ответа объекта на метод func
с аргументами attrs
.Таким образом, если запрошенный URL-адрес был push/1
, метод push
будет вызван с аргументом 1
.Это эквивалентно [push(1).to_s]
.to_s
преобразует значение, возвращаемое методом, в строку.
Наконец, в строке 16 веб-сервер запускается через порт 9292. Объект, для которого вызывается метод webapp
, являетсяпустой массив - вы можете использовать String
(т.е. ''
), Hash
(т.е. {}
), Proc
(т.е. Proc.new
) или любой класс ruby, который вам нравится.
Затем вы можете манипулировать объектом, нажимая URL-адреса вида func/attribute1/attribute2/attribute3...
, и объект будет вызывать метод func
со строкой аргументов attribute1, attribute2, attribute3...
.
Интересный код!