Sha256: 5855c0ed3530546484e8c2e99f9936cc5789b4b127b3bd0f8be887a091e49066

Contents?: true

Size: 1.7 KB

Versions: 1

Compression:

Stored size: 1.7 KB

Contents

# frozen_string_literal: true

module Decidim
  # This module contains all the logic needed for a controller to render a participatory space
  # public layout.
  #
  module ParticipatorySpaceContext
    extend ActiveSupport::Concern

    class_methods do
      # Public: Called on a controller, it sets up all the surrounding methods to render a
      # participatory space's template. It expects the method `current_participatory_space` to be
      # defined, from which it will extract the participatory manifest.
      #
      # options - A hash used to modify the behavior of the layout. :only: - An array of actions on
      #           which the layout will be applied.
      #
      # Returns nothing.
      def participatory_space_layout(options = {})
        layout :layout, options
        before_action :authorize_participatory_space, options
      end
    end

    included do
      include Decidim::NeedsOrganization

      helper ParticipatorySpaceHelpers, IconHelper
      helper_method :current_participatory_space
      helper_method :current_participatory_space_manifest
      helper_method :current_participatory_space_context

      delegate :manifest, to: :current_participatory_space, prefix: true
    end

    private

    def current_participatory_space_context
      :public
    end

    def current_participatory_space
      raise NotImplementedError
    end

    def authorize_participatory_space
      authorize! :read, current_participatory_space
    end

    def ability_context
      super.merge(
        current_participatory_space: current_participatory_space,
      )
    end

    def layout
      current_participatory_space_manifest.context(current_participatory_space_context).layout
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
decidim-core-0.8.4 app/controllers/concerns/decidim/participatory_space_context.rb