Skip to content

Inatra exercise complited#4

Open
NickelGit wants to merge 8 commits intodevelopfrom
feature/rackup
Open

Inatra exercise complited#4
NickelGit wants to merge 8 commits intodevelopfrom
feature/rackup

Conversation

@NickelGit
Copy link
Copy Markdown
Owner

Введение в программирование Ruby/JS >> Веб-фреймворк на Ruby

@Andrew8xx8
Copy link
Copy Markdown

Добавь в пример работу с методом post. Нужно дописать тест, myappи сам код inatra

Comment thread test/exercise/rackup/inatra.rb Outdated
end

def get(path, &block)
@routes['GET'] = { path => block }
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Что произойдёт, если в my_app будет более одного маршрута, откликающегося на get?

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В данном случае все будет плохо) Есть опробованный вариант с хэшом в хэше, т.е. когда каждый метод представляет собой отдельный хэш хранящий относящиеся к нему пары path:block. Не стал его включать т.к. для решения данной задачи он был бы избыточным. Переписать на этот вариант?

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Поменял способ хранения и обработки маршрутов

Comment thread test/exercise/rackup/test.rb Outdated
browser.get '/hello'
assert browser.last_response.ok?
assert_equal 'Hello World', browser.last_response.body
browser.post '/hello'
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Для повышения читаемости тест-кейсы лучше разделить. Если очень хочется избежать дублирования при создании объекта browser, можно воспользоваться методом setup.

Comment thread test/exercise/rackup/inatra.rb Outdated
end

def get(path, &block)
@routes['GET'] = {} if @routes['GET'].nil?
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Для таких кейсов в Ruby есть оператор ||=: https://medium.com/@jaredrayjohnson1/ruby-operators-double-pipe-equals-bfcbe21a7177

Comment thread test/exercise/rackup/inatra.rb Outdated
end

def post(path, &block)
@routes['POST'] = {} if @routes['POST'].nil?
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Содержимое методов get и post отличается только ключом в словаре. Попробуй вынести содержимое в отдельный приватный метод.

Comment thread test/exercise/rackup/my_app.rb Outdated
end

get '/hello/another' do
[200, {}, ['Hello World']]
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Для чистоты эксперимента лучше поменять возвращаемое значение, потому что даже с прошлой имплементацией, когда ключи перезаписывались, тест бы прошёл.

Comment thread test/exercise/rackup/inatra.rb Outdated
instance_eval(&block)
end

def get(path, &block)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Методы получаются одинаковые. Что будет когда появится patch, delete, head, options!?

Чтобы избежать дулбирования, нужно реализовать метод method_missing, который может заменить это все.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants