Class: RackSessionManipulation::Middleware

Inherits:
Object
  • Object
show all
Defined in:
lib/rack_session_manipulation/middleware.rb

Overview

Rack middleware that handles the accessing and modification of session state.

Instance Method Summary collapse

Constructor Details

#initialize(app, _options = {}) ⇒ Middleware

Returns a new instance of Middleware.



13
14
15
16
17
18
19
# File 'lib/rack_session_manipulation/middleware.rb', line 13

def initialize(app, _options = {})
  @app = app
  @routes = {
    'GET' => :retrieve,
    'PUT' => :update
  }
end

Instance Method Details

#call(env) ⇒ void



6
7
8
9
10
11
# File 'lib/rack_session_manipulation/middleware.rb', line 6

def call(env)
  request = Rack::Request.new(env)

  action = get_action(request)
  action.nil? ? @app.call(env) : send(action, request)
end

#extract_method(request) ⇒ void (protected)



23
24
25
26
27
# File 'lib/rack_session_manipulation/middleware.rb', line 23

def extract_method(request)
  return request.request_method unless request.request_method == 'POST'
  return request.params['_method'].upcase if request.params['_method']
  request.request_method
end

#get_action(request) ⇒ void (protected)



29
30
31
32
# File 'lib/rack_session_manipulation/middleware.rb', line 29

def get_action(request)
  return unless request.path == RackSessionManipulation.config.path
  @routes[extract_method(request)]
end

#headers(length) ⇒ void (protected)



34
35
36
37
38
39
# File 'lib/rack_session_manipulation/middleware.rb', line 34

def headers(length)
  {
    'Content-Type'   => 'application/json',
    'Content-Length' => length
  }
end

#retrieve(request) ⇒ void (protected)



41
42
43
44
45
46
# File 'lib/rack_session_manipulation/middleware.rb', line 41

def retrieve(request)
  session_hash = request.env['rack.session'].to_hash
  content = RackSessionManipulation.encode(session_hash)

  [200, headers(content.length), content]
end

#update(request) ⇒ void (protected)



48
49
50
51
52
53
54
55
56
57
# File 'lib/rack_session_manipulation/middleware.rb', line 48

def update(request)
  session_data = request.params['session_data']
  RackSessionManipulation.decode(session_data).each do |k, v|
    request.env['rack.session'][k] = v
  end

  [204, headers(0), '']
rescue JSON::ParserError
  [400, headers(0), '']
end