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

Version Path
scrivito_sdk-1.12.0.rc2 app/cms/scrivito/cms_dispatch_controller.rb
scrivito_sdk-1.12.0.rc1 app/cms/scrivito/cms_dispatch_controller.rb
scrivito_sdk-1.11.0 app/cms/scrivito/cms_dispatch_controller.rb
scrivito_sdk-1.11.0.rc1 app/cms/scrivito/cms_dispatch_controller.rb
scrivito_sdk-1.10.0 app/cms/scrivito/cms_dispatch_controller.rb
scrivito_sdk-1.10.0.rc5 app/cms/scrivito/cms_dispatch_controller.rb
scrivito_sdk-1.10.0.rc4 app/cms/scrivito/cms_dispatch_controller.rb
scrivito_sdk-1.10.0.rc3 app/cms/scrivito/cms_dispatch_controller.rb
scrivito_sdk-1.10.0.rc2 lib/scrivito/cms_dispatch_controller.rb
scrivito_sdk-1.10.0.rc1 lib/scrivito/cms_dispatch_controller.rb
scrivito_sdk-1.9.1 lib/scrivito/cms_dispatch_controller.rb
scrivito_sdk-1.9.1.rc1 lib/scrivito/cms_dispatch_controller.rb
scrivito_sdk-1.9.0 lib/scrivito/cms_dispatch_controller.rb
scrivito_sdk-1.9.0.rc2 lib/scrivito/cms_dispatch_controller.rb
scrivito_sdk-1.9.0.rc1 lib/scrivito/cms_dispatch_controller.rb
scrivito_sdk-1.8.1 lib/scrivito/cms_dispatch_controller.rb
scrivito_sdk-1.8.1.rc1 lib/scrivito/cms_dispatch_controller.rb
scrivito_sdk-1.8.0 lib/scrivito/cms_dispatch_controller.rb
scrivito_sdk-1.8.0.rc2 lib/scrivito/cms_dispatch_controller.rb
scrivito_sdk-1.8.0.rc1 lib/scrivito/cms_dispatch_controller.rb