class WebConsole::Middleware
Constants
- DEFAULT_OPTIONS
- TEMPLATES_PATH
- UNACCEPTABLE_REQUEST_MESSAGE
- UNAVAILABLE_SESSION_MESSAGE
Public Class Methods
new(app, options = {})
click to toggle source
# File lib/web_console/middleware.rb, line 24 def initialize(app, options = {}) @app = app @options = DEFAULT_OPTIONS.merge(options) end
Public Instance Methods
call(env)
click to toggle source
# File lib/web_console/middleware.rb, line 29 def call(env) request = create_regular_or_whiny_request(env) return @app.call(env) unless request.from_whitelited_ip? if id = id_for_repl_session_update(request) return update_repl_session(id, request) elsif id = id_for_repl_session_stack_frame_change(request) return change_stack_trace(id, request) end status, headers, body = @app.call(env) if exception = env['web_console.exception'] session = Session.from_exception(exception) elsif binding = env['web_console.binding'] session = Session.from_binding(binding) end if session && request.acceptable_content_type? headers["X-Web-Console-Session-Id"] = session.id response = Rack::Response.new(body, status, headers) template = Template.new(env, session) response.write(template.render('index')) response.finish else [ status, headers, body ] end end
Private Instance Methods
binding_change_re()
click to toggle source
# File lib/web_console/middleware.rb, line 92 def binding_change_re @options[:binding_change_re] end
change_stack_trace(id, request)
click to toggle source
# File lib/web_console/middleware.rb, line 114 def change_stack_trace(id, request) json_response_with_session(id, request) do |session| session.switch_binding_to(request.params[:frame_id]) { ok: true } end end
create_regular_or_whiny_request(env)
click to toggle source
# File lib/web_console/middleware.rb, line 83 def create_regular_or_whiny_request(env) request = Request.new(env) whiny_requests ? WhinyRequest.new(request) : request end
id_for_repl_session_stack_frame_change(request)
click to toggle source
# File lib/web_console/middleware.rb, line 102 def id_for_repl_session_stack_frame_change(request) if request.xhr? && request.post? binding_change_re.match(request.path_info) { |m| m[:id] } end end
id_for_repl_session_update(request)
click to toggle source
# File lib/web_console/middleware.rb, line 96 def id_for_repl_session_update(request) if request.xhr? && request.put? update_re.match(request.path_info) { |m| m[:id] } end end
json_response(opts = {}) { || ... }
click to toggle source
# File lib/web_console/middleware.rb, line 61 def json_response(opts = {}) status = opts.fetch(:status, 200) headers = { 'Content-Type' => 'application/json; charset = utf-8' } body = yield.to_json Rack::Response.new(body, status, headers).finish end
json_response_with_session(id, request, opts = {}) { |session| ... }
click to toggle source
# File lib/web_console/middleware.rb, line 69 def json_response_with_session(id, request, opts = {}) json_response(opts) do unless request.acceptable? return respond_with_unacceptable_request end unless session = Session.find(id) return respond_with_unavailable_session(id) end yield session end end
respond_with_unacceptable_request()
click to toggle source
# File lib/web_console/middleware.rb, line 128 def respond_with_unacceptable_request json_response(status: 406) do { error: UNACCEPTABLE_REQUEST_MESSAGE } end end
update_re()
click to toggle source
# File lib/web_console/middleware.rb, line 88 def update_re @options[:update_re] end
update_repl_session(id, request)
click to toggle source
# File lib/web_console/middleware.rb, line 108 def update_repl_session(id, request) json_response_with_session(id, request) do |session| { output: session.eval(request.params[:input]) } end end