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
build_menu() click to toggle source
# File lib/decidim/decidim_awesome/menu_hacker.rb, line 44
def build_menu
  menu = Decidim::Menu.new(name)
  menu.build_for(view)
  menu
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
menu_overrides() click to toggle source
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