Class: RackSessionManipulation::Middleware
- Inherits:
-
Object
- Object
- RackSessionManipulation::Middleware
- Defined in:
- lib/rack_session_manipulation/middleware.rb
Overview
Rack middleware that handles the accessing and modification of session state.
Instance Method Summary collapse
- #call(env) ⇒ void
- #extract_method(request) ⇒ void protected
- #get_action(request) ⇒ void protected
- #headers(length) ⇒ void protected
-
#initialize(app, _options = {}) ⇒ Middleware
constructor
A new instance of Middleware.
- #retrieve(request) ⇒ void protected
- #update(request) ⇒ void protected
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, = {}) @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 |