Sha256: 7344a7f0ad97a8c4f81655200f3542c96062881b4414a073c274007258ab38b6

Contents?: true

Size: 1.43 KB

Versions: 17

Compression:

Stored size: 1.43 KB

Contents

module Eac
  module MenusHelper
    class DataBuilder
      def initialize(view)
        @view = view
      end

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

      private

      def build_entries(entries, level)
        fail '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

17 entries across 17 versions & 1 rubygems

Version Path
eac_rails_utils-0.8.0 lib/eac/menus_helper/data_builder.rb
eac_rails_utils-0.7.1 lib/eac/menus_helper/data_builder.rb
eac_rails_utils-0.7.0 lib/eac/menus_helper/data_builder.rb
eac_rails_utils-0.6.0 lib/eac/menus_helper/data_builder.rb
eac_rails_utils-0.5.0 lib/eac/menus_helper/data_builder.rb
eac_rails_utils-0.4.0 lib/eac/menus_helper/data_builder.rb
eac_rails_utils-0.3.0 lib/eac/menus_helper/data_builder.rb
eac_rails_utils-0.2.2 lib/eac/menus_helper/data_builder.rb
eac_rails_utils-0.2.1 lib/eac/menus_helper/data_builder.rb
eac_rails_utils-0.2.0 lib/eac/menus_helper/data_builder.rb
eac_rails_utils-0.1.15 lib/eac/menus_helper/data_builder.rb
eac_rails_utils-0.1.14 lib/eac/menus_helper/data_builder.rb
eac_rails_utils-0.1.13 lib/eac/menus_helper/data_builder.rb
eac_rails_utils-0.1.12 lib/eac/menus_helper/data_builder.rb
eac_rails_utils-0.1.11 lib/eac/menus_helper/data_builder.rb
eac_rails_utils-0.1.10 lib/eac/menus_helper/data_builder.rb
eac_rails_utils-0.0.1 lib/eac/menus_helper/data_builder.rb