Sha256: 5cfe42328fa295e4f9072f06d9e89ae3b2379d4f75b18ec48dd35e42fdf3a5e4

Contents?: true

Size: 1.53 KB

Versions: 2

Compression:

Stored size: 1.53 KB

Contents

# frozen_string_literal: true

require 'sunrise/config/navigation_item'
require 'singleton'

module Sunrise
  module Config
    class Navigation
      include Singleton
      include Sunrise::Engine.routes.url_helpers

      attr_accessor :presenters

      class << self
        # Configure menu items
        def navigation(name, options = {}, &block)
          instance.presenters ||= {}
          instance.presenters[name] = PagePresenter.new(options, &block)
        end

        def method_missing(method_name, *args, &block)
          if instance.respond_to?(method_name)
            instance.send(method_name, *args, &block)
          else
            super
          end
        end
      end

      def initialize
        @navigations = nil
        @presenters = {}
        @current_name = :main
      end

      def navigations
        @navigations ||= build_navigation
      end

      def item(item_name, url = nil, options = {})
        url ||= index_path(model_name: item_name)

        @navigations[@current_name] ||= []
        @navigations[@current_name] << NavigationItem.new(item_name, url, @current_name, options)
      end

      protected

      def build_navigation
        @navigations = {}

        presenters.each do |key, presenter|
          @current_name = key.to_sym
          run_registration_block &presenter.block
        end

        @navigations
      end

      # Runs the registration block inside this object
      def run_registration_block(&block)
        instance_exec &block if block_given?
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
sunrise-cms-1.1.1 lib/sunrise/config/navigation.rb
sunrise-cms-1.1.0 lib/sunrise/config/navigation.rb