Updated

lib/context_request_middleware/context / cookie_session_retriever.rb

A
76 lines of codes
11 methods
3.9 complexity/method
9 churn
42.41 complexity
0 duplications
# frozen_string_literal: true module ContextRequestMiddleware module Context # Class for retrieving the session if set via rack cookie. # This requires the session and more data to be stored in # '_session_id' cookie key. class CookieSessionRetriever
  1. ContextRequestMiddleware::Context::CookieSessionRetriever assumes too much for instance variable '@response'
include ActiveSupport::Configurable include ContextRequestMiddleware::Cookie HTTP_HEADER = 'Set-Cookie' attr_accessor :data
  1. ContextRequestMiddleware::Context::CookieSessionRetriever#data is a writable attribute
def initialize(request) @request = request @data = {} end def call(status, header, body)
  1. ContextRequestMiddleware::Context::CookieSessionRetriever#call has approx 7 statements
@response = Rack::Response.new(body, status, header) if new_context? data[:context_id] = session_id data[:owner_id] = owner_id data[:context_status] = context_status data[:context_type] = context_type data[:app_id] = ContextRequestMiddleware.app_id end data end def new_context? new_session_id && new_session_id != request_cookie_session_id end private def owner_id from_thread_var(ContextRequestMiddleware.session_owner_id, 'unknown') end def context_status from_thread_var(ContextRequestMiddleware.context_status, 'unknown') end def context_type 'session_cookie' end def session_id new_session_id || request_cookie_session_id end def new_session_id new_session = nil session_id_header = set_cookie_header.match(/_session_id=([^\;]+)/) \ if set_cookie_header new_session = session_id_header[1] if session_id_header new_session end def request_cookie_session_id cookie_session_id(@request) end def set_cookie_header @response.headers.fetch(HTTP_HEADER, nil) end def from_thread_var(key, default = nil)
  1. ContextRequestMiddleware::Context::CookieSessionRetriever#from_thread_var doesn't depend on instance state (maybe move it to another class?)
RequestStore.store[key] || default end end end end