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



63
64
65
66
67
# File 'lib/avo/menu/builder.rb', line 63

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



56
57
58
59
60
# File 'lib/avo/menu/builder.rb', line 56

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

#all_tools(**args) ⇒ Object

Add all the tools



70
71
72
73
74
# File 'lib/avo/menu/builder.rb', line 70

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



77
78
79
# File 'lib/avo/menu/builder.rb', line 77

def build
  @menu
end

#dashboard(dashboard, **args) ⇒ Object

Adds a dashboard



41
42
43
# File 'lib/avo/menu/builder.rb', line 41

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

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

Adds a group



51
52
53
# File 'lib/avo/menu/builder.rb', line 51

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
# File 'lib/avo/menu/builder.rb', line 25

def link(name, **args)
  @menu.items << Avo::Menu::Link.new(name: name, **args)
end

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

Validates and adds a resource



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

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



46
47
48
# File 'lib/avo/menu/builder.rb', line 46

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