Sha256: c485a0f35b1e8056cf2f83c2c4fcce9ca7c6798d636f4135ce5291a7ffa5eb03
Contents?: true
Size: 1.86 KB
Versions: 43
Compression:
Stored size: 1.86 KB
Contents
module Scrivito class CmsDispatchController < ActionController::Metal include ActionController::Redirecting include Rails.application.routes.url_helpers include Scrivito::ControllerHelper def process(action) CmsEnv.new(request.env).load if obj_not_found? && editing_context.workspace_changed? redirect_to "/" return self.response end controller = target_controller(request.env) request.env["action_dispatch.request.path_parameters"]["controller"] = controller.controller_path if !obj_not_found? && action == 'index' action = loaded_obj.controller_action_name end request.env["action_dispatch.request.path_parameters"]["action"] = action self.response = controller.action(action).call(request.env) end private def main_app Rails.application.routes.url_helpers end def scrivito_engine Scrivito::SdkEngine.routes.url_helpers end def editing_context EditingContextMiddleware.from_request(request) end def target_controller(env) return default_controller if obj_not_found? controller = "#{loaded_obj.controller_name}Controller".constantize if controller.respond_to?(:use_for_obj_dispatch?) && controller.use_for_obj_dispatch? controller else default_controller end rescue NameError default_controller end def loaded_obj request.env[CmsEnv::OBJ_ENV_KEY] end def obj_not_found? loaded_obj.is_a?(StandardError) end def default_controller CmsController rescue NameError => e if e.message.include?('CmsController') raise 'Your application does not define the "CmsController" needed for Scrivito. '\ 'Did you forget to run "rails generate scrivito:install"?' else raise end end end end
Version data entries
43 entries across 43 versions & 1 rubygems