Class: Redmine::MenuManager::MenuNode

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/redmine/menu_manager.rb

Overview

Since:

  • 1.4.0

Direct Known Subclasses

MenuItem

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, content = nil) ⇒ MenuNode

Returns a new instance of MenuNode



339
340
341
342
343
# File 'lib/redmine/menu_manager.rb', line 339

def initialize(name, content = nil)
  @name = name
  @children = []
  @last_items_count = 0
end

Instance Attribute Details

#last_items_countObject (readonly)

Returns the value of attribute last_items_count



337
338
339
# File 'lib/redmine/menu_manager.rb', line 337

def last_items_count
  @last_items_count
end

#nameObject (readonly)

Returns the value of attribute name



337
338
339
# File 'lib/redmine/menu_manager.rb', line 337

def name
  @name
end

#parentObject

Returns the value of attribute parent



336
337
338
# File 'lib/redmine/menu_manager.rb', line 336

def parent
  @parent
end

Instance Method Details

#add(child) ⇒ Object Also known as: <<

Adds a child



385
386
387
388
# File 'lib/redmine/menu_manager.rb', line 385

def add(child)
  position = @children.size - @last_items_count
  add_at(child, position)
end

#add_at(child, position) ⇒ Object

Adds a child at given position



369
370
371
372
373
374
375
# File 'lib/redmine/menu_manager.rb', line 369

def add_at(child, position)
  raise "Child already added" if find {|node| node.name == child.name}

  @children = @children.insert(position, child)
  child.parent = self
  child
end

#add_last(child) ⇒ Object

Adds a child as last child



378
379
380
381
382
# File 'lib/redmine/menu_manager.rb', line 378

def add_last(child)
  add_at(child, -1)
  @last_items_count += 1
  child
end

#childrenObject



345
346
347
348
349
350
351
# File 'lib/redmine/menu_manager.rb', line 345

def children
  if block_given?
    @children.each {|child| yield child}
  else
    @children
  end
end

#each {|_self| ... } ⇒ Object

Yields:

  • (_self)

Yield Parameters:



358
359
360
361
# File 'lib/redmine/menu_manager.rb', line 358

def each &block
  yield self
  children { |child| child.each(&block) }
end

#positionObject

Returns the position for this node in it's parent



400
401
402
# File 'lib/redmine/menu_manager.rb', line 400

def position
  self.parent.children.index(self)
end

#prepend(child) ⇒ Object

Adds a child at first position



364
365
366
# File 'lib/redmine/menu_manager.rb', line 364

def prepend(child)
  add_at(child, 0)
end

#remove!(child) ⇒ Object

Removes a child



392
393
394
395
396
397
# File 'lib/redmine/menu_manager.rb', line 392

def remove!(child)
  @children.delete(child)
  @last_items_count -= +1 if child && child.last
  child.parent = nil
  child
end

#rootObject

Returns the root for this node



405
406
407
408
409
# File 'lib/redmine/menu_manager.rb', line 405

def root
  root = self
  root = root.parent while root.parent
  root
end

#sizeObject

Returns the number of descendants + 1



354
355
356
# File 'lib/redmine/menu_manager.rb', line 354

def size
  @children.inject(1) {|sum, node| sum + node.size}
end