Sha256: 8b5cb132afc8e809855d69c965792b3fcda63b84027c95e30ea1e38572445e5f
Contents?: true
Size: 999 Bytes
Versions: 2
Compression:
Stored size: 999 Bytes
Contents
module Ecom module Core class MenuService def fetch_menu(user) role_ids = user.user_roles.map(&:id) join_sql = <<-SQL INNER JOIN ecom_core_menus_user_roles MUR ON MUR.menu_id = ecom_core_menus.id INNER JOIN ecom_core_user_roles UR ON MUR.user_role_id = UR.id SQL menu = Menu.joins(join_sql).where('UR.id IN (?)', role_ids).distinct menu_list = menu.select { |m| m.parent.nil? }.each_with_object([]) do |item, list| list << { id: item.id, label: item.label, icon: item.icon, items: [] } end menu_list.each do |ml| ml[:items] = menu.reject { |m| m.parent.nil? }.each_with_object([]) do |item, list| if item.parent_id == ml[:id] list << { id: item.id, label: item.label, icon: item.icon, route: item.route } end end end # Remove id key menu_list.map { |ml| ml.delete(:id) } menu_list end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
ecom_core-1.1.13 | app/services/ecom/core/menu_service.rb |
ecom_core-1.1.12 | app/services/ecom/core/menu_service.rb |