Sha256: 7ebff392978ede4199bb52274bcb4026d51e996d97e556aa20cbbee04a2797c5
Contents?: true
Size: 1.61 KB
Versions: 1
Compression:
Stored size: 1.61 KB
Contents
module RailsConnector class WorkspaceSelectionMiddleware def initialize(app) @app = app end def call(env) handler = WorkspaceParameterHandler.new(env) handler.handle_params set_current_workspace(handler.workspace_id) @app.call(env) end private class WorkspaceParameterHandler < Struct.new(:env) WS_KEYS = { current: '_rc-ws', compare: '_rc-compare-ws', base: '_rc-compare-base', reverse: '_rc-compare-reverse' }.freeze def handle_params if params_workspace_id.present? remember_compare_workspace_params elsif params_workspace_id == '' # empty param means "forget it" forget_compare_workspace_params end end def workspace_id session[WS_KEYS[:current]] end private def params_workspace_id params[WS_KEYS[:current]] end def remember_compare_workspace_params WS_KEYS.each do |_, value| session[value] = params[value] end end def forget_compare_workspace_params WS_KEYS.each do |_, value| session.delete(value) end end def params request.params end def request Rack::Request.new(env) end def session @session ||= env[Rack::Session::Abstract::ENV_SESSION_KEY] end end def set_current_workspace(workspace_id) Workspace.current = proc do if workspace_id begin Workspace.find(workspace_id) rescue RailsConnector::ResourceNotFound Workspace.default end else Workspace.default end end end end end # module RailsConnector
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
infopark_cloud_connector-7.1.0 | lib/rails_connector/workspace_selection_middleware.rb |