Sha256: f17b2dd53a734f464d8867dac5a2d5a8a00ceb627fd1ba5a77ab6895f5d451f6

Contents?: true

Size: 1.49 KB

Versions: 6

Compression:

Stored size: 1.49 KB

Contents

# frozen_string_literal: true

require 'active_support/concern'
require 'rails_menu_manager/menu_item'

module RailsMenuManager
  # Menu methods for ActionController
  module ActionController
    extend ActiveSupport::Concern

    included do
      helper_method :'in_menu?'
    end

    # Checks if a at least one defined and active menu is in given path
    #
    # @param [Array] Menu path to check
    # @return [Boolean] Boolean indicating if at least one menu item is in path
    def in_menu?(*args)
      rails_menu_manger_items.any? { |m| m.in?(*args) }
    end

    # Adds a menu
    # Supports before_action options: if, only, unless, except
    #
    # @param [Array/Hash] Menu path and options.
    def menu(*args)
      rails_menu_manger_add_menu_setting(*args)
    end

    private

    def rails_menu_manger_items
      @rails_menu_manger_items ||= []
    end

    def rails_menu_manger_add_menu_setting(*args)
      opts = args.extract_options!

      path = args.map(&:to_sym)

      rails_menu_manger_items << MenuItem.new(path, opts)
    end

    # Class methods for ActionController
    module ClassMethods
      def menu(*args)
        opts = args.extract_options!

        before_action_opts = {
          only:   opts.delete(:only),
          if:     opts.delete(:if),
          except: opts.delete(:except),
          unless: opts.delete(:unless)
        }

        before_action before_action_opts do
          rails_menu_manger_add_menu_setting(*args, opts)
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
rails-menu-manager-0.8.0 lib/rails_menu_manager/action_controller.rb
rails-menu-manager-0.7.0 lib/rails_menu_manager/action_controller.rb
rails-menu-manager-0.6.0 lib/rails_menu_manager/action_controller.rb
rails-menu-manager-0.5.0 lib/rails_menu_manager/action_controller.rb
rails-menu-manager-0.4.1 lib/rails_menu_manager/action_controller.rb
rails-menu-manager-0.4.0 lib/rails_menu_manager/action_controller.rb