class Decidim::DecidimAwesome::MenuHacker
Attributes
name[R]
organization[RW]
user[RW]
view[R]
Public Class Methods
new(name, view)
click to toggle source
# File lib/decidim/decidim_awesome/menu_hacker.rb, line 7 def initialize(name, view) @name = name @organization = view.try(:current_organization) @user = view.try(:current_user) @view = view end
Public Instance Methods
items(include_invisible: false)
click to toggle source
returns a combined array of the Decidim
defined menu and the hacked stored as config vars
# File lib/decidim/decidim_awesome/menu_hacker.rb, line 15 def items(include_invisible: false) return @items if @items @items = default_items menu_overrides.each do |item| default = default_items.find { |i| i.url.gsub(/\?.*/, "") == item.url } if default item.send("overrided?=", true) @items.reject! { |i| i.url.gsub(/\?.*/, "") == item.url } end @items << item end @items.select!(&:visible?) unless include_invisible @items.sort_by!(&:position) end
Private Instance Methods
activate?(url, view)
click to toggle source
# File lib/decidim/decidim_awesome/menu_hacker.rb, line 67 def activate?(url, view) urls = @items.map(&:url).sort_by(&:length).reverse url == urls.find { |u| view.request.original_fullpath.start_with?(u) } end
current_config()
click to toggle source
# File lib/decidim/decidim_awesome/menu_hacker.rb, line 85 def current_config @current_config ||= (AwesomeConfig.find_by(var: name, organization: organization)&.value || []).filter { |i| i.is_a? Hash } end
default_items()
click to toggle source
# File lib/decidim/decidim_awesome/menu_hacker.rb, line 37 def default_items @default_items ||= build_menu.instance_variable_get(:@items).map do |item| item.instance_variable_set(:@active, method(:activate?)) unless item.active == :exact item end end
visible?(item)
click to toggle source
# File lib/decidim/decidim_awesome/menu_hacker.rb, line 72 def visible?(item) case item["visibility"] when "hidden" false when "logged" user.present? when "non_logged" user.blank? else true end end