lib/cuba.rb in cuba-3.0.0.rc2 vs lib/cuba.rb in cuba-3.0.0.rc3
- old
+ new
@@ -1,10 +1,57 @@
require "rack"
+require "time"
class Cuba
class RedefinitionError < StandardError; end
+ class Response
+ attr_accessor :status
+
+ attr :headers
+
+ def initialize(status = 200, headers = { "Content-Type" => "text/html" })
+ @status = status
+ @headers = headers
+ @body = []
+ @length = 0
+ end
+
+ def [](key)
+ @headers[key]
+ end
+
+ def []=(key, value)
+ @headers[key] = value
+ end
+
+ def write(str)
+ s = str.to_s
+
+ @length += s.bytesize
+ @headers["Content-Length"] = @length.to_s
+ @body << s
+ end
+
+ def redirect(path, status = 302)
+ @headers = { "Location" => path }
+ @status = status
+ end
+
+ def finish
+ [@status, @headers, @body]
+ end
+
+ def set_cookie(key, value)
+ Rack::Utils.set_cookie_header!(@headers, key, value)
+ end
+
+ def delete_cookie(key, value = {})
+ Rack::Utils.delete_cookie_header!(@headers, key, value)
+ end
+ end
+
@@methods = []
class << self
undef method_added
end
@@ -72,10 +119,10 @@
end
def call!(env)
@env = env
@req = Rack::Request.new(env)
- @res = Rack::Response.new
+ @res = Cuba::Response.new
# This `catch` statement will either receive a
# rack response tuple via a `halt`, or will
# fall back to issuing a 404.
#