Sha256: 358d958fa64048441ee1ead68ad3b9f15f1d07e0b72a0aa32a805ab38850aa64

Contents?: true

Size: 1.65 KB

Versions: 35

Compression:

Stored size: 1.65 KB

Contents

# frozen_string_literal: true

module Koi
  module Menu
    class Builder
      def initialize
        @menu  = Katalyst::Navigation::Menu.new
        @index = 0
        @depth = 0
      end

      def add_items(items)
        items.each do |k, v|
          add_item(k, v)
        end
      end

      def add_item(title, value)
        if value.is_a?(Hash)
          add_menu(title:) do |b|
            value.each do |k, v|
              b.add_item(k, v)
            end
          end
        else
          add_link(title:, url: value)
        end
      end

      def add_menu(title:, **options, &)
        @menu.items.build(type:  Katalyst::Navigation::Heading.name,
                          title:,
                          **options,
                          index: @index,
                          depth: @depth)
        @index += 1
        @depth += 1
        yield(self)
        @depth -= 1
      end

      def add_link(title:, url:, **options)
        @menu.items.build(type:  Katalyst::Navigation::Link.name,
                          title:,
                          url:,
                          **options,
                          index: @index,
                          depth: @depth)
        @index += 1
      end

      def add_button(title:, url:, **options)
        @menu.items.build(type:  Katalyst::Navigation::Button.name,
                          title:,
                          url:,
                          **options,
                          index: @index,
                          depth: @depth)
        @index += 1
      end

      def render
        @menu.published_version = @menu.build_draft_version
        @menu
      end
    end
  end
end

Version data entries

35 entries across 35 versions & 1 rubygems

Version Path
katalyst-koi-4.7.3 lib/koi/menu/builder.rb
katalyst-koi-4.6.0 lib/koi/menu/builder.rb
katalyst-koi-4.5.9 lib/koi/menu/builder.rb
katalyst-koi-4.5.8 lib/koi/menu/builder.rb
katalyst-koi-4.5.7 lib/koi/menu/builder.rb
katalyst-koi-4.5.6 lib/koi/menu/builder.rb
katalyst-koi-4.5.5 lib/koi/menu/builder.rb
katalyst-koi-4.5.4 lib/koi/menu/builder.rb
katalyst-koi-4.5.3 lib/koi/menu/builder.rb
katalyst-koi-4.5.2 lib/koi/menu/builder.rb
katalyst-koi-4.5.1 lib/koi/menu/builder.rb
katalyst-koi-4.5.0 lib/koi/menu/builder.rb
katalyst-koi-4.5.0.beta.2 lib/koi/menu/builder.rb
katalyst-koi-4.5.0.beta.1 lib/koi/menu/builder.rb
katalyst-koi-4.4.1 lib/koi/menu/builder.rb
katalyst-koi-4.4.0 lib/koi/menu/builder.rb
katalyst-koi-4.3.5 lib/koi/menu/builder.rb
katalyst-koi-4.3.4 lib/koi/menu/builder.rb
katalyst-koi-4.3.3 lib/koi/menu/builder.rb
katalyst-koi-4.3.2 lib/koi/menu/builder.rb