diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..ba91883d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +log/app.log diff --git a/README.md b/README.md index e9b8235c..5775ad51 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,33 @@ -# Simpler +Создайте на гитхабе форк учебного проекта из скринкаста (ссылки в дополнительных материалах), в полученном новом репозитории, в новой ветке выполните следующие задания: -**Simpler** is a little web framework written in [Ruby](https://www.ruby-lang.org) language. It's compatible with [Rack](https://rack.github.io) interface and intended to **learn** how web frameworks work in general. +Реализуйте расширенные возможности метода render которые позволят возвращать ответ в других форматах, например: +render plain: "Plain text response" + +Реализуйте возможность устанавливать в методе контроллера статус ответа, например: +status 201 + +Реализуйте возможность устанавливать в методе контроллера заголовки, например: +headers['Content-Type'] = 'text/plain' + +Реализуйте механизм обработки исключения когда маршрут для запрашиваемого URL не был найден. В этом случае клиенту должен отдаваться ответ со статусом 404 -## The application overview -Simpler application is a singleton instance of the `Simpler::Application` class. For convenience it can be obtained by calling `Simpler.application` method. This instance holds all the routes and responds to `call` method which is required by the Rack interface. +Напишите механизм разбора route-параметров. Например, при добавлении маршрута +get '/tests/:id', 'tests#show' + + а) Маршрут должен корректно обрабатывать GET запрос +/tests/101 + + b) В методе show контроллера при вызове метода params должен быть доступен параметр :id со значением 101 + +Напишите middleware для логирования HTTP-запросов и ответов: + a) Лог должен записываться в файл log/app.log + b) Для запросов необходимо записывать HTTP-метод запроса, URL, контроллер и метод который будет обрабатывать запрос, хэш параметров который будет доступен при вызове метода params + c) Для ответов необходимо записывать код статуса ответа, тип тела ответа и название шаблона (если ответ рендерился с помощью шаблона представления) + +Пример: + +Request: GET /tests?category=Backend +Handler: TestsController#index +Parameters: {'category' => 'Backend'} +Response: 200 OK [text/html] tests/index.html.erb diff --git a/app/controllers/tests_controller.rb b/app/controllers/tests_controller.rb index 1526a689..30031d17 100644 --- a/app/controllers/tests_controller.rb +++ b/app/controllers/tests_controller.rb @@ -2,10 +2,15 @@ class TestsController < Simpler::Controller def index @time = Time.now + @tests = Test.all end def create + render plain: "Test create!" + end + def show + @id = params[:id] end end diff --git a/app/views/tests/index.html.erb b/app/views/tests/index.html.erb index 39fce580..7ef02c33 100644 --- a/app/views/tests/index.html.erb +++ b/app/views/tests/index.html.erb @@ -8,5 +8,10 @@
<%= @time %>
+