Sha256: 6e4ccc56e302bb78e511b5d922ea1c71589f27e94c12b6f31820beae8d242e0a

Contents?: true

Size: 1.47 KB

Versions: 33

Compression:

Stored size: 1.47 KB

Contents

# frozen_string_literal: true

module EacRailsUtils
  module MenusHelper
    class DataBuilder
      def initialize(view)
        @view = view
      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?')
          @view.can_by_path?(path, method)
        else
          true
        end
      end
    end
  end
end

Version data entries

33 entries across 33 versions & 1 rubygems

Version Path
eac_rails_utils-0.22.2 app/helpers/eac_rails_utils/menus_helper/data_builder.rb
eac_rails_utils-0.22.1 app/helpers/eac_rails_utils/menus_helper/data_builder.rb
eac_rails_utils-0.22.0 app/helpers/eac_rails_utils/menus_helper/data_builder.rb
eac_rails_utils-0.21.0 app/helpers/eac_rails_utils/menus_helper/data_builder.rb
eac_rails_utils-0.20.0 app/helpers/eac_rails_utils/menus_helper/data_builder.rb
eac_rails_utils-0.19.0 app/helpers/eac_rails_utils/menus_helper/data_builder.rb
eac_rails_utils-0.18.0 app/helpers/eac_rails_utils/menus_helper/data_builder.rb
eac_rails_utils-0.17.2 app/helpers/eac_rails_utils/menus_helper/data_builder.rb
eac_rails_utils-0.17.1 app/helpers/eac_rails_utils/menus_helper/data_builder.rb
eac_rails_utils-0.17.0 app/helpers/eac_rails_utils/menus_helper/data_builder.rb
eac_rails_utils-0.16.0 app/helpers/eac_rails_utils/menus_helper/data_builder.rb
eac_rails_utils-0.15.2 app/helpers/eac_rails_utils/menus_helper/data_builder.rb
eac_rails_utils-0.15.1 app/helpers/eac_rails_utils/menus_helper/data_builder.rb
eac_rails_utils-0.15.0 app/helpers/eac_rails_utils/menus_helper/data_builder.rb
eac_rails_utils-0.14.1 app/helpers/eac_rails_utils/menus_helper/data_builder.rb
eac_rails_utils-0.14.0 app/helpers/eac_rails_utils/menus_helper/data_builder.rb
eac_rails_utils-0.13.5 app/helpers/eac_rails_utils/menus_helper/data_builder.rb
eac_rails_utils-0.13.4 app/helpers/eac_rails_utils/menus_helper/data_builder.rb
eac_rails_utils-0.13.3 app/helpers/eac_rails_utils/menus_helper/data_builder.rb
eac_rails_utils-0.13.2 app/helpers/eac_rails_utils/menus_helper/data_builder.rb