Sha256: a3618a8bf51cc400db1f1bf045c5a96e2beb264f70c62113491c54559be7f0a8

Contents?: true

Size: 1.61 KB

Versions: 8

Compression:

Stored size: 1.61 KB

Contents

# frozen_string_literal: true

module EacRailsUtils
  module MenusHelper
    class DataBuilder
      def initialize(view)
        @view = view # rubocop:disable Rails/HelperInstanceVariable
      end

      def build(entries)
        build_entries(entries, 0)
      end

      private

      def build_entries(entries, level)
        raise 'Argument "entries" is not a hash' unless entries.is_a?(Hash)

        r = entries.map { |k, v| build_entry(k, v, level) }.select { |e| e }
        r.empty? ? nil : r
      end

      def build_entry(key, value, level)
        if value.is_a?(Hash)
          build_group(key, value, level)
        else
          build_item(key, value, level)
        end
      end

      def build_group(label, menu_entries, level)
        e = build_entries(menu_entries, level + 1)
        return nil unless e

        { type: :group, label: label, children: e, level: level }
      end

      def build_item(label, value, level)
        path, options = menu_item_options(value)
        return nil unless can_access_path?(path, options[:link_method])

        { type: :item, label: label, path: path, options: options, level: level }
      end

      def menu_item_options(item_value)
        if item_value.is_a?(Array)
          [item_value[0], item_value[1] || {}]
        else
          [item_value, {}]
        end
      end

      def can_access_path?(path, method)
        if @view.respond_to?(:can_by_path?) # rubocop:disable Rails/HelperInstanceVariable
          @view.can_by_path?(path, method) # rubocop:disable Rails/HelperInstanceVariable
        else
          true
        end
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
eac_rails_utils-0.25.0 app/helpers/eac_rails_utils/menus_helper/data_builder.rb
eac_rails_utils-0.24.0 app/helpers/eac_rails_utils/menus_helper/data_builder.rb
eac_rails_utils-0.23.4 app/helpers/eac_rails_utils/menus_helper/data_builder.rb
eac_rails_utils-0.23.3 app/helpers/eac_rails_utils/menus_helper/data_builder.rb
eac_rails_utils-0.23.2 app/helpers/eac_rails_utils/menus_helper/data_builder.rb
eac_rails_utils-0.23.1 app/helpers/eac_rails_utils/menus_helper/data_builder.rb
eac_rails_utils-0.23.0 app/helpers/eac_rails_utils/menus_helper/data_builder.rb
eac_rails_utils-0.22.3 app/helpers/eac_rails_utils/menus_helper/data_builder.rb