Sha256: 9ae452f08f55f785a01781f6e286f79556d4469c5923c6453bd945e8606c5c37

Contents?: true

Size: 1.54 KB

Versions: 4

Compression:

Stored size: 1.54 KB

Contents

# frozen_string_literal: true

module Maquina
  module Navbar
    # == Navbar main Menu
    #
    # Renders main navbar Menu. It can render menu for desktop o mobile versions.
    #
    # Requires a Rails Helper method to get access to menu options. `menu_options` example:
    #
    #   def menu_options
    #     {
    #       home: root_path,
    #       users: users_path
    #       accounts: accounts_path
    #     }
    #   end
    #
    # `Menu` uses I18n to translate menu options. Translation example:
    #
    #   menu:
    #     main:
    #       home: Inicio
    #       users: Usuarios
    #       accounts: Cuentas
    #
    # `Menu` is initialized by default to render links for desktop. To render mobile links
    # initialize `Menu` as follow:
    #
    #   Views::Navbar::Menu.new(desktop: false)
    #
    class Menu < Phlex::HTML
      include Maquina::ApplicationView
      delegate :menu_options, to: :helpers

      def initialize(desktop: true)
        @desktop = desktop
      end

      def view_template
        div class: "#{link_type}-menu" do
          secure_menu_options.each_pair do |option, path|
            render(Maquina::Navbar::MenuItemLink.new(option, path, desktop: @desktop))
          end
        end
      end

      private

      def secure_menu_options
        menu_options
      rescue NoMethodError => ex
        Rails.logger.error "[#{self.class}] Please implement helper method :menu_options :: #{ex.message}"
        {}
      end

      def link_type
        @desktop ? "desktop" : "mobile"
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
maquina-0.7.2 app/views/maquina/navbar/menu.rb
maquina-0.7.1 app/views/maquina/navbar/menu.rb
maquina-0.5.2 app/views/maquina/navbar/menu.rb
maquina-0.5.1 app/views/maquina/navbar/menu.rb