Class: Locomotive::MenuCell

Inherits:
Cell::Rails
  • Object
show all
Defined in:
app/cells/locomotive/menu_cell.rb

Direct Known Subclasses

GlobalActionsCell, MainMenuCell, SubMenuCell

Defined Under Namespace

Classes: MenuProxy

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ MenuCell

Returns a new instance of MenuCell.



10
11
12
13
# File 'app/cells/locomotive/menu_cell.rb', line 10

def initialize(*args)
  super
  self.list = []
end

Instance Attribute Details

#listObject

Returns the value of attribute list.



8
9
10
# File 'app/cells/locomotive/menu_cell.rb', line 8

def list
  @list
end

Class Method Details

.update_for(name, &block) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'app/cells/locomotive/menu_cell.rb', line 40

def self.update_for(name, &block)
  method_name = "build_list_with_#{name}".to_sym
  previous_method_name = "build_list_without_#{name}".to_sym

  unless self.instance_methods.include?(method_name) # prevents the method to be called twice which will raise a "stack level too deep" exception

    self.send(:define_method, method_name) do
      self.send(previous_method_name)
      block.call(MenuProxy.new(self))
    end

    # Note: this might cause "stack level too deep" if called twice for the same name
    alias_method_chain :build_list, name.to_sym

  end
end

Instance Method Details

#show(args = {}) ⇒ Object



15
16
17
18
# File 'app/cells/locomotive/menu_cell.rb', line 15

def show(args = {})
  self.build_list
  render
end

#url_optionsObject



20
21
22
23
24
25
26
# File 'app/cells/locomotive/menu_cell.rb', line 20

def url_options
  super.reverse_merge(
    host:               request.host_with_port,
    protocol:           request.protocol,
    _path_segments:     request.symbolized_path_parameters
  ).merge(script_name:  request.script_name)
end