diff -r 78c58876bc9f -r 88674a86b3ad www-apps/redmine/files/redmine-rubytree-r8214.patch --- a/www-apps/redmine/files/redmine-rubytree-r8214.patch Tue Jun 14 14:57:38 2016 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,261 +0,0 @@ -Index: test/unit/lib/redmine/menu_manager/menu_item_test.rb -=================================================================== ---- test/unit/lib/redmine/menu_manager/menu_item_test.rb (リビジョン 8213) -+++ test/unit/lib/redmine/menu_manager/menu_item_test.rb (リビジョン 8214) -@@ -114,7 +114,7 @@ - - def test_has_children - parent_item = get_menu_item(:test_menu, :parent) -- assert parent_item.hasChildren? -+ assert parent_item.children.present? - assert_equal 2, parent_item.children.size - assert_equal get_menu_item(:test_menu, :child_menu), parent_item.children[0] - assert_equal get_menu_item(:test_menu, :child2_menu), parent_item.children[1] -Index: config/environment.rb -=================================================================== ---- config/environment.rb (リビジョン 8213) -+++ config/environment.rb (リビジョン 8214) -@@ -54,7 +54,6 @@ - # It will automatically turn deliveries on - config.action_mailer.perform_deliveries = false - -- config.gem 'rubytree', :lib => 'tree' - config.gem 'coderay', :version => '~>1.0.0' - - # Load any local configuration that is kept out of source control -Index: lib/redmine/menu_manager.rb -=================================================================== ---- lib/redmine/menu_manager.rb (リビジョン 8213) -+++ lib/redmine/menu_manager.rb (リビジョン 8214) -@@ -15,93 +15,6 @@ - # along with this program; if not, write to the Free Software - # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - --require 'tree' # gem install rubytree -- --# Monkey patch the TreeNode to add on a few more methods :nodoc: --module TreeNodePatch -- def self.included(base) -- base.class_eval do -- attr_reader :last_items_count -- -- alias :old_initilize :initialize -- def initialize(name, content = nil) -- old_initilize(name, content) -- @childrenHash ||= {} -- @last_items_count = 0 -- extend(InstanceMethods) -- end -- end -- end -- -- module InstanceMethods -- # Adds the specified child node to the receiver node. The child node's -- # parent is set to be the receiver. The child is added as the first child in -- # the current list of children for the receiver node. -- def prepend(child) -- raise "Child already added" if @childrenHash.has_key?(child.name) -- -- @childrenHash[child.name] = child -- @children = [child] + @children -- child.parent = self -- return child -- -- end -- -- # Adds the specified child node to the receiver node. The child node's -- # parent is set to be the receiver. The child is added at the position -- # into the current list of children for the receiver node. -- def add_at(child, position) -- raise "Child already added" if @childrenHash.has_key?(child.name) -- -- @childrenHash[child.name] = child -- @children = @children.insert(position, child) -- child.parent = self -- return child -- -- end -- -- def add_last(child) -- raise "Child already added" if @childrenHash.has_key?(child.name) -- -- @childrenHash[child.name] = child -- @children << child -- @last_items_count += 1 -- child.parent = self -- return child -- -- end -- -- # Adds the specified child node to the receiver node. The child node's -- # parent is set to be the receiver. The child is added as the last child in -- # the current list of children for the receiver node. -- def add(child) -- raise "Child already added" if @childrenHash.has_key?(child.name) -- -- @childrenHash[child.name] = child -- position = @children.size - @last_items_count -- @children.insert(position, child) -- child.parent = self -- return child -- -- end -- -- # Wrapp remove! making sure to decrement the last_items counter if -- # the removed child was a last item -- def remove!(child) -- @last_items_count -= +1 if child && child.last -- super -- end -- -- -- # Will return the position (zero-based) of the current child in -- # it's parent -- def position -- self.parent.children.index(self) -- end -- end --end --Tree::TreeNode.send(:include, TreeNodePatch) -- - module Redmine - module MenuManager - class MenuError < StandardError #:nodoc: -@@ -169,7 +82,7 @@ - - def display_main_menu?(project) - menu_name = project && !project.new_record? ? :project_menu : :application_menu -- Redmine::MenuManager.items(menu_name).size > 1 # 1 element is the root -+ Redmine::MenuManager.items(menu_name).children.present? - end - - def render_menu(menu, project=nil) -@@ -181,7 +94,7 @@ - end - - def render_menu_node(node, project=nil) -- if node.hasChildren? || !node.child_menus.nil? -+ if node.children.present? || !node.child_menus.nil? - return render_menu_node_with_children(node, project) - else - caption, url, selected = extract_node_details(node, project) -@@ -306,13 +219,13 @@ - end - - def items(menu_name) -- @items[menu_name.to_sym] || Tree::TreeNode.new(:root, {}) -+ @items[menu_name.to_sym] || MenuNode.new(:root, {}) - end - end - - class Mapper - def initialize(menu, items) -- items[menu] ||= Tree::TreeNode.new(:root, {}) -+ items[menu] ||= MenuNode.new(:root, {}) - @menu = menu - @menu_items = items[menu] - end -@@ -398,7 +311,102 @@ - end - end - -- class MenuItem < Tree::TreeNode -+ class MenuNode -+ include Enumerable -+ attr_accessor :parent -+ attr_reader :last_items_count, :name -+ -+ def initialize(name, content = nil) -+ @name = name -+ @childrenHash ||= {} -+ @children = [] -+ @last_items_count = 0 -+ end -+ -+ def children -+ if block_given? -+ @children.each {|child| yield child} -+ else -+ @children -+ end -+ end -+ -+ # Returns the number of descendants + 1 -+ def size -+ @children.inject(1) {|sum, node| sum + node.size} -+ end -+ -+ def each &block -+ yield self -+ children { |child| child.each(&block) } -+ end -+ -+ # Adds a child at first position -+ def prepend(child) -+ raise "Child already added" if @childrenHash.has_key?(child.name) -+ -+ @childrenHash[child.name] = child -+ @children = [child] + @children -+ child.parent = self -+ return child -+ end -+ -+ # Adds a child at given position -+ def add_at(child, position) -+ raise "Child already added" if @childrenHash.has_key?(child.name) -+ -+ @childrenHash[child.name] = child -+ @children = @children.insert(position, child) -+ child.parent = self -+ return child -+ end -+ -+ # Adds a child as last child -+ def add_last(child) -+ raise "Child already added" if @childrenHash.has_key?(child.name) -+ -+ @childrenHash[child.name] = child -+ @children << child -+ @last_items_count += 1 -+ child.parent = self -+ return child -+ end -+ -+ # Adds a child -+ def add(child) -+ raise "Child already added" if @childrenHash.has_key?(child.name) -+ -+ @childrenHash[child.name] = child -+ position = @children.size - @last_items_count -+ @children.insert(position, child) -+ child.parent = self -+ return child -+ end -+ alias :<< :add -+ -+ # Removes a child -+ def remove!(child) -+ @childrenHash.delete(child.name) -+ @children.delete(child) -+ @last_items_count -= +1 if child && child.last -+ child.parent = nil -+ child -+ end -+ -+ # Returns the position for this node in it's parent -+ def position -+ self.parent.children.index(self) -+ end -+ -+ # Returns the root for this node -+ def root -+ root = self -+ root = root.parent while root.parent -+ root -+ end -+ end -+ -+ class MenuItem < MenuNode - include Redmine::I18n - attr_reader :name, :url, :param, :condition, :parent, :child_menus, :last -