Class: Kwipper::Response
- Inherits:
-
Object
- Object
- Kwipper::Response
- Defined in:
- lib/kwipper/response.rb
Constant Summary collapse
- STATUSES =
{ ok: [200, 'OK'], created: [201, 'Created'], found: [302, 'Found'], bad_request: [400, 'Bad Request'], unauthorized: [401, 'Unauthorized'], not_found: [404, 'Not Found'], server_error: [500, 'Server Error'] }
- SESSION_COOKIE_NAME =
'kwipper_session'
Instance Attribute Summary collapse
-
#body ⇒ Object
Returns the value of attribute body.
-
#content_type ⇒ Object
Returns the value of attribute content_type.
-
#headers ⇒ Object
readonly
Returns the value of attribute headers.
-
#redirect ⇒ Object
Returns the value of attribute redirect.
-
#request ⇒ Object
readonly
Returns the value of attribute request.
-
#status_code ⇒ Object
Returns the value of attribute status_code.
-
#status_message ⇒ Object
Returns the value of attribute status_message.
Instance Method Summary collapse
- #current_session ⇒ Object
- #current_user ⇒ Object
-
#has_session? ⇒ Boolean
Session helpers.
- #headers_for_response ⇒ Object
- #info ⇒ Object
-
#initialize(request) ⇒ Response
constructor
A new instance of Response.
-
#remove_session_cookie ⇒ Object
For the server to remove a browser cookie we need to set a cookie of the same name with an expires value to now (or in the past) so that the browser will expire it and remove it.
- #session_cookie(value = "#{session_cookie_value}; HttpOnly") ⇒ Object
- #session_cookie_value ⇒ Object
- #set_status(status) ⇒ Object
- #to_http_response ⇒ Object
Constructor Details
#initialize(request) ⇒ Response
Returns a new instance of Response.
17 18 19 20 21 22 23 |
# File 'lib/kwipper/response.rb', line 17 def initialize(request) @request = request @headers = {}.tap do |h| h['Set-Cookie'] = unless has_session? end @body = '' end |
Instance Attribute Details
#body ⇒ Object
Returns the value of attribute body.
14 15 16 |
# File 'lib/kwipper/response.rb', line 14 def body @body end |
#content_type ⇒ Object
Returns the value of attribute content_type.
14 15 16 |
# File 'lib/kwipper/response.rb', line 14 def content_type @content_type end |
#headers ⇒ Object (readonly)
Returns the value of attribute headers.
15 16 17 |
# File 'lib/kwipper/response.rb', line 15 def headers @headers end |
#redirect ⇒ Object
Returns the value of attribute redirect.
14 15 16 |
# File 'lib/kwipper/response.rb', line 14 def redirect @redirect end |
#request ⇒ Object (readonly)
Returns the value of attribute request.
15 16 17 |
# File 'lib/kwipper/response.rb', line 15 def request @request end |
#status_code ⇒ Object
Returns the value of attribute status_code.
14 15 16 |
# File 'lib/kwipper/response.rb', line 14 def status_code @status_code end |
#status_message ⇒ Object
Returns the value of attribute status_message.
14 15 16 |
# File 'lib/kwipper/response.rb', line 14 def @status_message end |
Instance Method Details
#current_session ⇒ Object
79 80 81 82 83 |
# File 'lib/kwipper/response.rb', line 79 def current_session if has_session? @current_session ||= Session.find request.[SESSION_COOKIE_NAME] end end |
#current_user ⇒ Object
73 74 75 76 77 |
# File 'lib/kwipper/response.rb', line 73 def current_user if current_session @current_user ||= User.find current_session.user_id end end |
#has_session? ⇒ Boolean
Session helpers
53 54 55 |
# File 'lib/kwipper/response.rb', line 53 def has_session? request..key? SESSION_COOKIE_NAME end |
#headers_for_response ⇒ Object
38 39 40 41 42 43 44 45 |
# File 'lib/kwipper/response.rb', line 38 def headers_for_response headers.merge({ 'Content-Length' => body.size, 'Content-Type' => content_type }).tap do |h| h['Location'] = redirect if redirect end.map { |k, v| "#{k}: #{v}" }.join "\r\n" end |
#info ⇒ Object
34 35 36 |
# File 'lib/kwipper/response.rb', line 34 def info "#{@status_code} #{@status_message}" end |
#remove_session_cookie ⇒ Object
For the server to remove a browser cookie we need to set a cookie of the same name with an expires value to now (or in the past) so that the browser will expire it and remove it. The value is also voided.
64 65 66 67 |
# File 'lib/kwipper/response.rb', line 64 def = "deleted; expires=#{Time.now.httpdate}" headers['Set-Cookie'] = end |
#session_cookie(value = "#{session_cookie_value}; HttpOnly") ⇒ Object
57 58 59 |
# File 'lib/kwipper/response.rb', line 57 def (value = "#{}; HttpOnly") "#{SESSION_COOKIE_NAME}=#{value}" end |
#session_cookie_value ⇒ Object
69 70 71 |
# File 'lib/kwipper/response.rb', line 69 def @session_cookie_value ||= request..fetch SESSION_COOKIE_NAME, SecureRandom.urlsafe_base64 end |
#set_status(status) ⇒ Object
47 48 49 |
# File 'lib/kwipper/response.rb', line 47 def set_status(status) @status_code, @status_message = STATUSES[status] end |
#to_http_response ⇒ Object
25 26 27 28 29 30 31 32 |
# File 'lib/kwipper/response.rb', line 25 def to_http_response <<-HTTP HTTP/1.1 #{status_code} #{} #{headers_for_response} #{body} HTTP end |