Sha256: b641c18bec047ccb4f1e8be8fe277af750519d4e48defec7a085ee968c935e6d

Contents?: true

Size: 1.56 KB

Versions: 23

Compression:

Stored size: 1.56 KB

Contents

# frozen_string_literal: true

module Decidim
  #
  # This class is responsible for sending route helper methods to the correct
  # mounted engine. To do that, it needs to know the name of the mounted helper
  # for the engine, and the contextual parameters to identify the mount point
  # for it, which are added to the parameters passed to the route helper.
  #
  class EngineRouter
    include Rails.application.routes.mounted_helpers

    # Instantiates a router to the frontend engine for an object.
    #
    # @param target [#mounted_engine, #mounted_params] Object to be routed
    #
    # @return [EngineRouter] The new engine router
    def self.main_proxy(target)
      new(target.mounted_engine, target.mounted_params)
    end

    # Instantiates a router to the backend engine for an object.
    #
    # @param target [#mounted_admin_engine, #mounted_params] Object to be routed
    #
    # @return [EngineRouter] The new engine router
    def self.admin_proxy(target)
      new(target.mounted_admin_engine, target.mounted_params)
    end

    attr_reader :default_url_options

    def initialize(engine, default_url_options)
      @engine = engine
      @default_url_options = default_url_options
    end

    def respond_to_missing?(method_name, include_private = false)
      route_helper?(method_name) || super
    end

    def method_missing(method_name, *args)
      return super unless route_helper?(method_name)

      send(@engine).send(method_name, *args)
    end

    private

    def route_helper?(method_name)
      method_name.to_s.match?(/_(url|path)$/)
    end
  end
end

Version data entries

23 entries across 23 versions & 2 rubygems

Version Path
decidim-core-0.7.4 lib/decidim/engine_router.rb
decidim-core-0.7.3 lib/decidim/engine_router.rb
decidim-core-0.7.2 lib/decidim/engine_router.rb
decidim-core-0.7.1 lib/decidim/engine_router.rb
decidim-core-0.7.0 lib/decidim/engine_router.rb
decidim-core-0.6.8 lib/decidim/engine_router.rb
decidim-0.6.8 decidim-core/lib/decidim/engine_router.rb
decidim-core-0.6.7 lib/decidim/engine_router.rb
decidim-0.6.7 decidim-core/lib/decidim/engine_router.rb
decidim-core-0.6.6 lib/decidim/engine_router.rb
decidim-0.6.6 decidim-core/lib/decidim/engine_router.rb
decidim-core-0.6.5 lib/decidim/engine_router.rb
decidim-0.6.5 decidim-core/lib/decidim/engine_router.rb
decidim-core-0.6.4 lib/decidim/engine_router.rb
decidim-0.6.4 decidim-core/lib/decidim/engine_router.rb
decidim-core-0.6.3 lib/decidim/engine_router.rb
decidim-0.6.3 decidim-core/lib/decidim/engine_router.rb
decidim-core-0.6.2 lib/decidim/engine_router.rb
decidim-0.6.2 decidim-core/lib/decidim/engine_router.rb
decidim-core-0.6.1 lib/decidim/engine_router.rb