Class: Avo::Menu::Builder

Inherits:
Object
  • Object
show all
Defined in:
lib/avo/menu/builder.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name: nil, items: []) ⇒ Builder

Returns a new instance of Builder.



17
18
19
20
21
22
# File 'lib/avo/menu/builder.rb', line 17

def initialize(name: nil, items: [])
  @menu = Avo::Menu::Menu.new

  @menu.name = name
  @menu.items = items
end

Class Method Details

.parse_menu(&block) ⇒ Object



3
4
5
# File 'lib/avo/menu/builder.rb', line 3

def parse_menu(&block)
  Docile.dsl_eval(Avo::Menu::Builder.new, &block).build
end

Instance Method Details

#all_dashboards(**args) ⇒ Object

Add all the dashboards



65
66
67
68
69
# File 'lib/avo/menu/builder.rb', line 65

def all_dashboards(**args)
  Avo::App.dashboards_for_navigation.each do |dash|
    dashboard dash.id, **args
  end
end

#all_resources(**args) ⇒ Object

Add all the resources



58
59
60
61
62
# File 'lib/avo/menu/builder.rb', line 58

def all_resources(**args)
  Avo::App.resources_for_navigation.each do |res|
    resource res.route_key, **args
  end
end

#all_tools(**args) ⇒ Object

Add all the tools



72
73
74
75
76
# File 'lib/avo/menu/builder.rb', line 72

def all_tools(**args)
  Avo::App.tools_for_navigation.each do |tool|
    link tool.humanize, path: root_path(paths: [tool])
  end
end

#buildObject

Fetch the menu



79
80
81
# File 'lib/avo/menu/builder.rb', line 79

def build
  @menu
end

#dashboard(dashboard, **args) ⇒ Object

Adds a dashboard



43
44
45
# File 'lib/avo/menu/builder.rb', line 43

def dashboard(dashboard, **args)
  @menu.items << Avo::Menu::Dashboard.new(dashboard: dashboard, **args)
end

#group(name = nil, **args, &block) ⇒ Object

Adds a group



53
54
55
# File 'lib/avo/menu/builder.rb', line 53

def group(name = nil, **args, &block)
  @menu.items << Avo::Menu::Group.new(name: name, **args, items: self.class.parse_menu(&block).items)
end

Adds a link



25
26
27
28
# File 'lib/avo/menu/builder.rb', line 25

def link(name, path = nil, **args)
  path ||= args[:path]
  @menu.items << Avo::Menu::Link.new(name: name, path: path, **args)
end

#resource(name, **args) ⇒ Object Also known as: resources

Validates and adds a resource



32
33
34
35
36
37
38
39
# File 'lib/avo/menu/builder.rb', line 32

def resource(name, **args)
  name = name.to_s.singularize
  res = Avo::App.guess_resource(name)

  if res.present?
    @menu.items << Avo::Menu::Resource.new(resource: name, **args)
  end
end

#section(name = nil, **args, &block) ⇒ Object

Adds a section



48
49
50
# File 'lib/avo/menu/builder.rb', line 48

def section(name = nil, **args, &block)
  @menu.items << Avo::Menu::Section.new(name: name, **args, items: self.class.parse_menu(&block).items)
end