Conversation
|
Добавь в пример работу с методом |
| end | ||
|
|
||
| def get(path, &block) | ||
| @routes['GET'] = { path => block } |
There was a problem hiding this comment.
Что произойдёт, если в my_app будет более одного маршрута, откликающегося на get?
There was a problem hiding this comment.
В данном случае все будет плохо) Есть опробованный вариант с хэшом в хэше, т.е. когда каждый метод представляет собой отдельный хэш хранящий относящиеся к нему пары path:block. Не стал его включать т.к. для решения данной задачи он был бы избыточным. Переписать на этот вариант?
There was a problem hiding this comment.
Поменял способ хранения и обработки маршрутов
| browser.get '/hello' | ||
| assert browser.last_response.ok? | ||
| assert_equal 'Hello World', browser.last_response.body | ||
| browser.post '/hello' |
There was a problem hiding this comment.
Для повышения читаемости тест-кейсы лучше разделить. Если очень хочется избежать дублирования при создании объекта browser, можно воспользоваться методом setup.
| end | ||
|
|
||
| def get(path, &block) | ||
| @routes['GET'] = {} if @routes['GET'].nil? |
There was a problem hiding this comment.
Для таких кейсов в Ruby есть оператор ||=: https://medium.com/@jaredrayjohnson1/ruby-operators-double-pipe-equals-bfcbe21a7177
| end | ||
|
|
||
| def post(path, &block) | ||
| @routes['POST'] = {} if @routes['POST'].nil? |
There was a problem hiding this comment.
Содержимое методов get и post отличается только ключом в словаре. Попробуй вынести содержимое в отдельный приватный метод.
| end | ||
|
|
||
| get '/hello/another' do | ||
| [200, {}, ['Hello World']] |
There was a problem hiding this comment.
Для чистоты эксперимента лучше поменять возвращаемое значение, потому что даже с прошлой имплементацией, когда ключи перезаписывались, тест бы прошёл.
| instance_eval(&block) | ||
| end | ||
|
|
||
| def get(path, &block) |
There was a problem hiding this comment.
Методы получаются одинаковые. Что будет когда появится patch, delete, head, options!?
Чтобы избежать дулбирования, нужно реализовать метод method_missing, который может заменить это все.
Введение в программирование Ruby/JS >> Веб-фреймворк на Ruby