diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 00000000..436a9110 Binary files /dev/null and b/.DS_Store differ diff --git a/app/controllers/tests_controller.rb b/app/controllers/tests_controller.rb index 1526a689..e7c354fa 100644 --- a/app/controllers/tests_controller.rb +++ b/app/controllers/tests_controller.rb @@ -2,6 +2,12 @@ class TestsController < Simpler::Controller def index @time = Time.now + status 201 + headers['Content-Type'] = 'text/plain' + end + + def show + Test.find_by(params[:id]) end def create diff --git a/lib/simpler/controller.rb b/lib/simpler/controller.rb index 9383b035..eb6c9fee 100644 --- a/lib/simpler/controller.rb +++ b/lib/simpler/controller.rb @@ -3,12 +3,14 @@ module Simpler class Controller - attr_reader :name, :request, :response + attr_reader :name, :request, :response, :headers + attr_writer :headers def initialize(env) @name = extract_name @request = Rack::Request.new(env) @response = Rack::Response.new + @headers = @response end def make_response(action) @@ -32,6 +34,14 @@ def set_default_headers @response['Content-Type'] = 'text/html' end + def status(int_status) + @response.status = int_status + end + + def set_headers(template) + @response['Content-Type'] = "text/#{template.first[0]}" + end + def write_response body = render_body @@ -47,6 +57,11 @@ def params end def render(template) + if template.is_a(Hash) + set_headers(template) + else + set_default_headers + end @request.env['simpler.template'] = template end diff --git a/lib/simpler/router.rb b/lib/simpler/router.rb index 14b3415c..cdcfff48 100644 --- a/lib/simpler/router.rb +++ b/lib/simpler/router.rb @@ -5,6 +5,7 @@ class Router def initialize @routes = [] + @params = {} end def get(path, route_point) @@ -19,7 +20,12 @@ def route_for(env) method = env['REQUEST_METHOD'].downcase.to_sym path = env['PATH_INFO'] - @routes.find { |route| route.match?(method, path) } + route = @routes.find { |route| route.match?(method, path) } + if route == nil + raise "404" + else + route + end end private @@ -30,6 +36,9 @@ def add_route(method, path, route_point) action = route_point[1] route = Route.new(method, path, controller, action) + path = path.split('/') + Controller.params[:id] = path.last + @routes.push(route) end diff --git a/lib/simpler/view.rb b/lib/simpler/view.rb index 19a73b34..da8fe9c9 100644 --- a/lib/simpler/view.rb +++ b/lib/simpler/view.rb @@ -7,12 +7,17 @@ class View def initialize(env) @env = env + @templates = { plain: Hash.new { |hash, value| hash[value] = ERB.new(value) } } end def render(binding) - template = File.read(template_path) - - ERB.new(template).result(binding) + template = @env['simpler.template'].to_a.flatten + if @templates[template[0]] + @templates[template[0]][template[1]].result(binding) + else + template = File.read(template_path) + ERB.new(template).result(binding) + end end private diff --git a/log/app.log b/log/app.log new file mode 100644 index 00000000..e69de29b diff --git a/middleware/app.rb b/middleware/app.rb new file mode 100644 index 00000000..086a319a --- /dev/null +++ b/middleware/app.rb @@ -0,0 +1,15 @@ +require_relative 'logger' + +class App + def initialize # - сюда нужно передать app, не понял как это сделать + @logger = Logger.new + end + + def call(env) + req = Rack::Request.new(env) + status, headers, response = req + @logger.log(status, env) + + [status, headers, response] + end +end diff --git a/middleware/config.ru b/middleware/config.ru new file mode 100644 index 00000000..918a83df --- /dev/null +++ b/middleware/config.ru @@ -0,0 +1,2 @@ +require_relative 'app' +run App.new diff --git a/middleware/logger.rb b/middleware/logger.rb new file mode 100644 index 00000000..1a67e00b --- /dev/null +++ b/middleware/logger.rb @@ -0,0 +1,16 @@ +class Logger + def log(status, env) + req_method = env['REQUEST_METHOD'] + action = env['simpler.action'] + path = env['PATH_INFO'] + controller = env['simpler.controller'] + type = env['Content-Type'] + template ||= env['simpler.template'] + + file = File.open('log/app.log', 'w') # - no such file or directory @ rb_sysopen - '...' + + file.write( + "Request: #{req_method} #{path} Handler: #{controller}##{action} Response: #{status} #{type} #{template}" + ) + end +end