rubytree 0.2.3 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ChangeLog +21 -0
- data/LICENSE +31 -0
- data/README +136 -2
- data/Rakefile +40 -5
- data/TAGS +66 -0
- data/lib/tree.rb +70 -18
- data/test/person.rb +36 -2
- data/test/testtree.rb +33 -0
- metadata +9 -4
    
        data/ChangeLog
    ADDED
    
    | @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            2007-06-23  Anupam Sengupta  <anupamsg@gmail.com>
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            	* Rakefile: Added the LICENSE and ChangeLog to the extra RDoc files.
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            	* lib/tree.rb: Minor updates to the comments.
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            	* test/testtree.rb: Added the Copyright and License header.
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            	* test/person.rb: Added the Copyright and License header.
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            	* lib/tree.rb: Added the Copyright and License header.
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            	* Rakefile: Added the LICENSE and Changelog to be part of the RDoc task.
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            	* README: Added documentation in the README, including install
         | 
| 16 | 
            +
            	instructions and an example.
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            	* LICENSE: Added the BSD LICENSE file.
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            	* Changelog: Added the Changelog file.
         | 
| 21 | 
            +
             | 
    
        data/LICENSE
    ADDED
    
    | @@ -0,0 +1,31 @@ | |
| 1 | 
            +
            RUBYTREE - http://rubytree.rubyforge.org
         | 
| 2 | 
            +
            ========================================
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            Copyright (c) 2007, Anupam Sengupta
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            All rights reserved.
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            Redistribution and use in source and binary forms, with or without modification,
         | 
| 9 | 
            +
            are permitted provided that the following conditions are met:
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            - Redistributions of source code must retain the above copyright notice, this
         | 
| 12 | 
            +
              list of conditions and the following disclaimer.
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            - Redistributions in binary form must reproduce the above copyright notice, this
         | 
| 15 | 
            +
              list of conditions and the following disclaimer in the documentation and/or
         | 
| 16 | 
            +
              other materials provided with the distribution.
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            - Neither the name of the organization nor the names of its contributors may
         | 
| 19 | 
            +
              be used to endorse or promote products derived from this software without
         | 
| 20 | 
            +
              specific prior written permission.
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
         | 
| 23 | 
            +
            AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
         | 
| 24 | 
            +
            IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
         | 
| 25 | 
            +
            DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
         | 
| 26 | 
            +
            ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
         | 
| 27 | 
            +
            (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
         | 
| 28 | 
            +
            LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
         | 
| 29 | 
            +
            ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
         | 
| 30 | 
            +
            (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
         | 
| 31 | 
            +
            SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
         | 
    
        data/README
    CHANGED
    
    | @@ -1,6 +1,140 @@ | |
| 1 | 
            -
            =  | 
| 1 | 
            +
            = RubyTree
         | 
| 2 2 |  | 
| 3 | 
            +
              (c) 2006, 2007 Anupam Sengupta
         | 
| 4 | 
            +
              http://rubytree.rubyforge.org
         | 
| 3 5 |  | 
| 4 | 
            -
             | 
| 6 | 
            +
              Document Revision: $Revision: 1.4 $
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            == License
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            RubyTree has been released under the BSD License. See the file LICENSE for
         | 
| 11 | 
            +
            details.
         | 
| 5 12 |  | 
| 6 13 | 
             
            == Introduction
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            RubyTree is a simple implementation of the generic Tree data structure.  This
         | 
| 16 | 
            +
            implementation is node-centric, where the individual nodes on the tree are the
         | 
| 17 | 
            +
            primary objects and drive the structure.
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            == Getting RubyTree
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            RubyTree is an open source project and is hosted at
         | 
| 22 | 
            +
            http://rubyforge.org/projects/rubytree
         | 
| 23 | 
            +
             | 
| 24 | 
            +
            The project home page is: http://rubytree.rubyforge.org
         | 
| 25 | 
            +
             | 
| 26 | 
            +
            RubyTree can be downloaded as a Ruby Gem or as a tar/zip file from:
         | 
| 27 | 
            +
             | 
| 28 | 
            +
            http://rubyforge.org/frs/?group_id=1215&release_id=8817
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            The file name is one of:
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                rubytree-<VERSION>.gem
         | 
| 33 | 
            +
                rubytree-<VERSION>.tgz
         | 
| 34 | 
            +
                rubytree-<VERSION>.zip
         | 
| 35 | 
            +
             | 
| 36 | 
            +
            Download the appropriate file-type.
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            == Installing RubyTree
         | 
| 39 | 
            +
             | 
| 40 | 
            +
            It is recommended to install RubyTree as a Ruby Gem, as this is an easy way to
         | 
| 41 | 
            +
            keep the version updated, and keep multiple versions of the library available on
         | 
| 42 | 
            +
            your system.
         | 
| 43 | 
            +
             | 
| 44 | 
            +
            === Installing the Gem
         | 
| 45 | 
            +
            To Install the Gem, from a Terminal/CLI command prompt, issue the command:
         | 
| 46 | 
            +
             | 
| 47 | 
            +
               gem install rubytree
         | 
| 48 | 
            +
             | 
| 49 | 
            +
            This should install the gem file for RubyTree. Note that you may need to be a
         | 
| 50 | 
            +
            super-user (root) to successfully install the gem.
         | 
| 51 | 
            +
             | 
| 52 | 
            +
            === Installing from the tgz/zip file
         | 
| 53 | 
            +
             | 
| 54 | 
            +
            Extract the archive file (tgz or zip) and run the 'rake' command from the
         | 
| 55 | 
            +
            top-level source directory.
         | 
| 56 | 
            +
             | 
| 57 | 
            +
            == Documentation
         | 
| 58 | 
            +
             | 
| 59 | 
            +
            The primary class for this implementation is Tree::TreeNode. See the
         | 
| 60 | 
            +
            class documentation for an usage example.
         | 
| 61 | 
            +
             | 
| 62 | 
            +
            From a command line/terminal prompt, you can issue the following command to view
         | 
| 63 | 
            +
            the text mode ri documentation:
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                ri Tree::TreeNode
         | 
| 66 | 
            +
             | 
| 67 | 
            +
            == Example
         | 
| 68 | 
            +
             | 
| 69 | 
            +
             The following code-snippet implements this tree structure:
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                               +------------+
         | 
| 72 | 
            +
                               |    ROOT    |
         | 
| 73 | 
            +
                               +-----+------+
         | 
| 74 | 
            +
                       +-------------+------------+
         | 
| 75 | 
            +
                       |                          |
         | 
| 76 | 
            +
               +-------+-------+          +-------+-------+
         | 
| 77 | 
            +
               |  CHILD 1      |          |  CHILD 2      |
         | 
| 78 | 
            +
               +-------+-------+          +---------------+
         | 
| 79 | 
            +
                       |
         | 
| 80 | 
            +
                       |
         | 
| 81 | 
            +
               +-------+-------+
         | 
| 82 | 
            +
               | GRANDCHILD 1  |
         | 
| 83 | 
            +
               +---------------+
         | 
| 84 | 
            +
             | 
| 85 | 
            +
             require 'tree'
         | 
| 86 | 
            +
             | 
| 87 | 
            +
             myTreeRoot = Tree::TreeNode.new("ROOT", "Root Content")
         | 
| 88 | 
            +
             | 
| 89 | 
            +
             myTreeRoot << Tree::TreeNode.new("CHILD1", "Child1 Content") << Tree::TreeNode.new("GRANDCHILD1", "GrandChild1 Content")
         | 
| 90 | 
            +
             | 
| 91 | 
            +
             myTreeRoot << Tree::TreeNode.new("CHILD2", "Child2 Content")
         | 
| 92 | 
            +
             | 
| 93 | 
            +
             myTreeRoot.printTree
         | 
| 94 | 
            +
             | 
| 95 | 
            +
             child1 = myTreeRoot["CHILD1"]
         | 
| 96 | 
            +
             | 
| 97 | 
            +
             grandChild1 = myTreeRoot["CHILD1"]["GRANDCHILD1"]
         | 
| 98 | 
            +
             | 
| 99 | 
            +
             siblingsOfChild1Array = child1.siblings
         | 
| 100 | 
            +
             | 
| 101 | 
            +
             immediateChildrenArray = myTreeRoot.children
         | 
| 102 | 
            +
             | 
| 103 | 
            +
             # Process all nodes
         | 
| 104 | 
            +
             | 
| 105 | 
            +
             myTreeRoot.each { |node| node.content.reverse }
         | 
| 106 | 
            +
             | 
| 107 | 
            +
             myTreeRoot.remove!(child1) # Remove the child
         | 
| 108 | 
            +
             | 
| 109 | 
            +
            == LICENSE
         | 
| 110 | 
            +
             | 
| 111 | 
            +
            RubyTree is licensed under BSD license.
         | 
| 112 | 
            +
             | 
| 113 | 
            +
            Copyright (c) 2007, Anupam Sengupta
         | 
| 114 | 
            +
             | 
| 115 | 
            +
            All rights reserved.
         | 
| 116 | 
            +
             | 
| 117 | 
            +
            Redistribution and use in source and binary forms, with or without modification,
         | 
| 118 | 
            +
            are permitted provided that the following conditions are met:
         | 
| 119 | 
            +
             | 
| 120 | 
            +
            - Redistributions of source code must retain the above copyright notice, this
         | 
| 121 | 
            +
              list of conditions and the following disclaimer.
         | 
| 122 | 
            +
             | 
| 123 | 
            +
            - Redistributions in binary form must reproduce the above copyright notice, this
         | 
| 124 | 
            +
              list of conditions and the following disclaimer in the documentation and/or
         | 
| 125 | 
            +
              other materials provided with the distribution.
         | 
| 126 | 
            +
             | 
| 127 | 
            +
            - Neither the name of the organization nor the names of its contributors may
         | 
| 128 | 
            +
              be used to endorse or promote products derived from this software without
         | 
| 129 | 
            +
              specific prior written permission.
         | 
| 130 | 
            +
             | 
| 131 | 
            +
              THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
         | 
| 132 | 
            +
            AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
         | 
| 133 | 
            +
            IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
         | 
| 134 | 
            +
            DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
         | 
| 135 | 
            +
            ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
         | 
| 136 | 
            +
            (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
         | 
| 137 | 
            +
            LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
         | 
| 138 | 
            +
            ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
         | 
| 139 | 
            +
            (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
         | 
| 140 | 
            +
            SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
         | 
    
        data/Rakefile
    CHANGED
    
    | @@ -1,3 +1,36 @@ | |
| 1 | 
            +
            # Rakefile
         | 
| 2 | 
            +
            #
         | 
| 3 | 
            +
            # Revision: $Revision: 1.8 $
         | 
| 4 | 
            +
            #
         | 
| 5 | 
            +
            # Copyright (c) 2006, 2007 Anupam Sengupta
         | 
| 6 | 
            +
            #
         | 
| 7 | 
            +
            # All rights reserved.
         | 
| 8 | 
            +
            #
         | 
| 9 | 
            +
            # Redistribution and use in source and binary forms, with or without modification,
         | 
| 10 | 
            +
            # are permitted provided that the following conditions are met:
         | 
| 11 | 
            +
            #
         | 
| 12 | 
            +
            # - Redistributions of source code must retain the above copyright notice, this
         | 
| 13 | 
            +
            #   list of conditions and the following disclaimer.
         | 
| 14 | 
            +
            #
         | 
| 15 | 
            +
            # - Redistributions in binary form must reproduce the above copyright notice, this
         | 
| 16 | 
            +
            #   list of conditions and the following disclaimer in the documentation and/or
         | 
| 17 | 
            +
            #   other materials provided with the distribution.
         | 
| 18 | 
            +
            #
         | 
| 19 | 
            +
            # - Neither the name of the organization nor the names of its contributors may
         | 
| 20 | 
            +
            #   be used to endorse or promote products derived from this software without
         | 
| 21 | 
            +
            #   specific prior written permission.
         | 
| 22 | 
            +
            #
         | 
| 23 | 
            +
            #   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
         | 
| 24 | 
            +
            # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
         | 
| 25 | 
            +
            # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
         | 
| 26 | 
            +
            # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
         | 
| 27 | 
            +
            # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
         | 
| 28 | 
            +
            # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
         | 
| 29 | 
            +
            # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
         | 
| 30 | 
            +
            # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
         | 
| 31 | 
            +
            # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
         | 
| 32 | 
            +
            # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
         | 
| 33 | 
            +
             | 
| 1 34 | 
             
            require 'rubygems'
         | 
| 2 35 | 
             
            require 'rake/clean'
         | 
| 3 36 | 
             
            require 'rake/gempackagetask'
         | 
| @@ -7,7 +40,7 @@ require 'rake/rdoctask' | |
| 7 40 | 
             
            desc "Default Task"
         | 
| 8 41 | 
             
            task :default => :gem
         | 
| 9 42 |  | 
| 10 | 
            -
            PKG_VERSION = '0.2. | 
| 43 | 
            +
            PKG_VERSION = '0.2.4'
         | 
| 11 44 | 
             
            PKG_FILES = FileList[
         | 
| 12 45 | 
             
                            '[A-Z]*',
         | 
| 13 46 | 
             
                            'lib/**/*.rb',
         | 
| @@ -23,13 +56,15 @@ spec = Gem::Specification.new do |s| | |
| 23 56 | 
             
                s.summary = "Ruby implementation of the Tree data structure."
         | 
| 24 57 |  | 
| 25 58 | 
             
                s.description = <<-END
         | 
| 26 | 
            -
                Provides a generic tree data | 
| 27 | 
            -
                store keyed node | 
| 59 | 
            +
                Provides a generic tree data-structure with ability to
         | 
| 60 | 
            +
                store keyed node-elements in the tree. The implementation
         | 
| 28 61 | 
             
                mixes in the Enumerable module.
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                Website:  http://rubytree.rubyforge.org/
         | 
| 29 64 | 
             
                END
         | 
| 30 65 |  | 
| 31 66 | 
             
                s.has_rdoc = true
         | 
| 32 | 
            -
                s.extra_rdoc_files = ['README']
         | 
| 67 | 
            +
                s.extra_rdoc_files = ['README', 'LICENSE', 'ChangeLog']
         | 
| 33 68 | 
             
                s.autorequire = "tree"
         | 
| 34 69 | 
             
                s.files = PKG_FILES.to_a
         | 
| 35 70 | 
             
                s.test_files = Dir.glob('test/test*.rb')
         | 
| @@ -47,7 +82,7 @@ Rake::TestTask.new do |t| | |
| 47 82 | 
             
            end
         | 
| 48 83 |  | 
| 49 84 | 
             
            Rake::RDocTask.new do |rd|
         | 
| 50 | 
            -
                rd.rdoc_files.include("README", "lib/**/*.rb")
         | 
| 85 | 
            +
                rd.rdoc_files.include("README", "LICENSE", "ChangeLog", "lib/**/*.rb")
         | 
| 51 86 | 
             
            end
         | 
| 52 87 |  | 
| 53 88 |  | 
    
        data/TAGS
    ADDED
    
    | @@ -0,0 +1,66 @@ | |
| 1 | 
            +
            
         | 
| 2 | 
            +
            ./lib/tree.rb,1809
         | 
| 3 | 
            +
            module Tree::Tree11,250
         | 
| 4 | 
            +
                class TreeNode::Tree::TreeNode40,1061
         | 
| 5 | 
            +
                    attr_reader :content, :name, :parent::Tree::TreeNode#content43,1112
         | 
| 6 | 
            +
                    attr_reader :content, :name, :parent::Tree::TreeNode#name43,1112
         | 
| 7 | 
            +
                    attr_reader :content, :name, :parent::Tree::TreeNode#parent43,1112
         | 
| 8 | 
            +
                    attr_writer :content::Tree::TreeNode#content44,1157
         | 
| 9 | 
            +
                    def initialize::Tree::TreeNode#Tree::TreeNode.new55,1473
         | 
| 10 | 
            +
                    def to_s::Tree::TreeNode#to_s69,1866
         | 
| 11 | 
            +
                    def parent=::Tree::TreeNode#parent=79,2266
         | 
| 12 | 
            +
                    def <<::Tree::TreeNode#<<87,2532
         | 
| 13 | 
            +
                    def add::Tree::TreeNode#add95,2825
         | 
| 14 | 
            +
                    def remove!::Tree::TreeNode#remove!109,3285
         | 
| 15 | 
            +
                    def removeFromParent!::Tree::TreeNode#removeFromParent!118,3601
         | 
| 16 | 
            +
                    def removeAll!::Tree::TreeNode#removeAll!123,3749
         | 
| 17 | 
            +
                    def hasContent?::Tree::TreeNode#hasContent?133,4013
         | 
| 18 | 
            +
                    def setAsRoot!::Tree::TreeNode#setAsRoot!138,4139
         | 
| 19 | 
            +
                    def isRoot?::Tree::TreeNode#isRoot?144,4327
         | 
| 20 | 
            +
                    def hasChildren?::Tree::TreeNode#hasChildren?149,4461
         | 
| 21 | 
            +
                    def children::Tree::TreeNode#children155,4655
         | 
| 22 | 
            +
                    def each::Tree::TreeNode#each165,4932
         | 
| 23 | 
            +
                    def []::Tree::TreeNode#[]177,5366
         | 
| 24 | 
            +
                    def size::Tree::TreeNode#size189,5712
         | 
| 25 | 
            +
                    def length::Tree::TreeNode#length194,5850
         | 
| 26 | 
            +
                    def printTree::Tree::TreeNode#printTree199,5957
         | 
| 27 | 
            +
                    def root::Tree::TreeNode#root205,6149
         | 
| 28 | 
            +
                    def siblings::Tree::TreeNode#siblings214,6454
         | 
| 29 | 
            +
                    def <=>::Tree::TreeNode#<=>230,6982
         | 
| 30 | 
            +
                    def freezeTree!::Tree::TreeNode#freezeTree!236,7148
         | 
| 31 | 
            +
                    def createDumpRep::Tree::TreeNode#createDumpRep241,7273
         | 
| 32 | 
            +
                    def _dump::Tree::TreeNode#_dump247,7487
         | 
| 33 | 
            +
                    def TreeNode.loadDumpRep::Tree::TreeNode.loadDumpRep253,7639
         | 
| 34 | 
            +
                    def TreeNode._load::Tree::TreeNode._load270,8265
         | 
| 35 | 
            +
            
         | 
| 36 | 
            +
            ./test/person.rb,305
         | 
| 37 | 
            +
            class Person::Person1,0
         | 
| 38 | 
            +
                attr_reader :first, :last
         | 
| 39 | 
            +
                attr_reader :first, :last
         | 
| 40 | 
            +
                attr_writer :first, :last
         | 
| 41 | 
            +
                attr_writer :first, :last
         | 
| 42 | 
            +
                def initialize::Person#Person.new4,80
         | 
| 43 | 
            +
                def to_s::Person#to_s9,182
         | 
| 44 | 
            +
            
         | 
| 45 | 
            +
            ./test/testtree.rb,1164
         | 
| 46 | 
            +
            class TC_TreeTest::TC_TreeTest8,106
         | 
| 47 | 
            +
                def setup::TC_TreeTest#setup10,161
         | 
| 48 | 
            +
                def loadChildren::TC_TreeTest#loadChildren20,503
         | 
| 49 | 
            +
                def teardown::TC_TreeTest#teardown26,615
         | 
| 50 | 
            +
                def test_root_setup::TC_TreeTest#test_root_setup30,668
         | 
| 51 | 
            +
                def test_root::TC_TreeTest#test_root44,1348
         | 
| 52 | 
            +
                def test_siblings::TC_TreeTest#test_siblings52,1591
         | 
| 53 | 
            +
                def test_add::TC_TreeTest#test_add71,2221
         | 
| 54 | 
            +
                def test_remove::TC_TreeTest#test_remove90,2743
         | 
| 55 | 
            +
                def test_removeAll::TC_TreeTest#test_removeAll117,3521
         | 
| 56 | 
            +
                def test_removeFromParent::TC_TreeTest#test_removeFromParent126,3789
         | 
| 57 | 
            +
                def test_children::TC_TreeTest#test_children142,4413
         | 
| 58 | 
            +
                def test_find::TC_TreeTest#test_find167,5289
         | 
| 59 | 
            +
                def test_each::TC_TreeTest#test_each181,5859
         | 
| 60 | 
            +
                def test_parent::TC_TreeTest#test_parent198,6530
         | 
| 61 | 
            +
                def test_indexed_access::TC_TreeTest#test_indexed_access207,6939
         | 
| 62 | 
            +
                def test_printTree::TC_TreeTest#test_printTree215,7233
         | 
| 63 | 
            +
                def test_dump::TC_TreeTest#test_dump221,7320
         | 
| 64 | 
            +
                def test_collect::TC_TreeTest#test_collect237,7901
         | 
| 65 | 
            +
                def test_freezeTree::TC_TreeTest#test_freezeTree246,8152
         | 
| 66 | 
            +
                def test_content::TC_TreeTest#test_content255,8444
         | 
    
        data/lib/tree.rb
    CHANGED
    
    | @@ -1,3 +1,6 @@ | |
| 1 | 
            +
            # tree.rb
         | 
| 2 | 
            +
            #
         | 
| 3 | 
            +
            # Revision: $Revision: 1.6 $
         | 
| 1 4 | 
             
            #
         | 
| 2 5 | 
             
            # = tree.rb - Generic Tree implementation
         | 
| 3 6 | 
             
            #
         | 
| @@ -8,12 +11,59 @@ | |
| 8 11 | 
             
            # Author:: Anupam Sengupta (anupamsg@gmail.com)
         | 
| 9 12 | 
             
            #
         | 
| 10 13 |  | 
| 14 | 
            +
            # Copyright (c) 2006, 2007 Anupam Sengupta
         | 
| 15 | 
            +
            #
         | 
| 16 | 
            +
            # All rights reserved.
         | 
| 17 | 
            +
            #
         | 
| 18 | 
            +
            # Redistribution and use in source and binary forms, with or without modification,
         | 
| 19 | 
            +
            # are permitted provided that the following conditions are met:
         | 
| 20 | 
            +
            #
         | 
| 21 | 
            +
            # - Redistributions of source code must retain the above copyright notice, this
         | 
| 22 | 
            +
            #   list of conditions and the following disclaimer.
         | 
| 23 | 
            +
            #
         | 
| 24 | 
            +
            # - Redistributions in binary form must reproduce the above copyright notice, this
         | 
| 25 | 
            +
            #   list of conditions and the following disclaimer in the documentation and/or
         | 
| 26 | 
            +
            #   other materials provided with the distribution.
         | 
| 27 | 
            +
            #
         | 
| 28 | 
            +
            # - Neither the name of the organization nor the names of its contributors may
         | 
| 29 | 
            +
            #   be used to endorse or promote products derived from this software without
         | 
| 30 | 
            +
            #   specific prior written permission.
         | 
| 31 | 
            +
            #
         | 
| 32 | 
            +
            #   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
         | 
| 33 | 
            +
            # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
         | 
| 34 | 
            +
            # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
         | 
| 35 | 
            +
            # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
         | 
| 36 | 
            +
            # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
         | 
| 37 | 
            +
            # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
         | 
| 38 | 
            +
            # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
         | 
| 39 | 
            +
            # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
         | 
| 40 | 
            +
            # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
         | 
| 41 | 
            +
            # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
         | 
| 42 | 
            +
             | 
| 43 | 
            +
             | 
| 11 44 | 
             
            module Tree
         | 
| 12 45 |  | 
| 13 46 | 
             
                # The Tree node class implementation. Mixes in the Enumerable
         | 
| 14 47 | 
             
                # module.
         | 
| 48 | 
            +
                #
         | 
| 15 49 | 
             
                # == Example
         | 
| 16 50 | 
             
                #
         | 
| 51 | 
            +
                #  The following code-snippet implements this tree structure:
         | 
| 52 | 
            +
                #
         | 
| 53 | 
            +
                #                    +------------+
         | 
| 54 | 
            +
                #                    |    ROOT    |
         | 
| 55 | 
            +
                #                    +-----+------+
         | 
| 56 | 
            +
                #            +-------------+------------+
         | 
| 57 | 
            +
                #            |                          |
         | 
| 58 | 
            +
                #    +-------+-------+          +-------+-------+
         | 
| 59 | 
            +
                #    |  CHILD 1      |          |  CHILD 2      |
         | 
| 60 | 
            +
                #    +-------+-------+          +---------------+
         | 
| 61 | 
            +
                #            |
         | 
| 62 | 
            +
                #            |
         | 
| 63 | 
            +
                #    +-------+-------+
         | 
| 64 | 
            +
                #    | GRANDCHILD 1  |
         | 
| 65 | 
            +
                #    +---------------+
         | 
| 66 | 
            +
                #
         | 
| 17 67 | 
             
                # require 'tree'
         | 
| 18 68 | 
             
                #
         | 
| 19 69 | 
             
                # myTreeRoot = Tree::TreeNode.new("ROOT", "Root Content")
         | 
| @@ -45,17 +95,17 @@ module Tree | |
| 45 95 |  | 
| 46 96 | 
             
                    @@fieldSep = '|'
         | 
| 47 97 | 
             
                    @@recordSep = "\n"
         | 
| 48 | 
            -
             | 
| 98 | 
            +
             | 
| 49 99 | 
             
                    # Constructor which expects the name of the node
         | 
| 50 100 | 
             
                    #
         | 
| 51 | 
            -
                    #  | 
| 101 | 
            +
                    # Name of the node is expected to be unique across the
         | 
| 52 102 | 
             
                    # tree.
         | 
| 53 103 | 
             
                    #
         | 
| 54 104 | 
             
                    # The content can be of any type, and is defaulted to _nil_.
         | 
| 55 105 | 
             
                    def initialize(name, content = nil)
         | 
| 56 | 
            -
             | 
| 106 | 
            +
             | 
| 57 107 | 
             
                            raise "Node name HAS to be provided" if name == nil
         | 
| 58 | 
            -
             | 
| 108 | 
            +
             | 
| 59 109 | 
             
                            @name = name
         | 
| 60 110 | 
             
                            @content = content
         | 
| 61 111 |  | 
| @@ -80,7 +130,7 @@ module Tree | |
| 80 130 | 
             
                        @parent = parent
         | 
| 81 131 | 
             
                    end
         | 
| 82 132 |  | 
| 83 | 
            -
                    # Convenience synonym for Tree#add method. | 
| 133 | 
            +
                    # Convenience synonym for Tree#add method.
         | 
| 84 134 | 
             
                    # This method allows a convenient method to add
         | 
| 85 135 | 
             
                    # children hierarchies in the tree.
         | 
| 86 136 | 
             
                    # E.g. root << child << grand_child
         | 
| @@ -118,7 +168,7 @@ module Tree | |
| 118 168 | 
             
                    def removeFromParent!
         | 
| 119 169 | 
             
                        @parent.remove!(self) unless isRoot?
         | 
| 120 170 | 
             
                    end
         | 
| 121 | 
            -
             | 
| 171 | 
            +
             | 
| 122 172 | 
             
                    # Removes all children from the receiver node.
         | 
| 123 173 | 
             
                    def removeAll!
         | 
| 124 174 | 
             
                        for child in @children
         | 
| @@ -169,14 +219,14 @@ module Tree | |
| 169 219 |  | 
| 170 220 | 
             
                    # Returns the requested node from the set of immediate
         | 
| 171 221 | 
             
                    # children.
         | 
| 172 | 
            -
                    # | 
| 222 | 
            +
                    #
         | 
| 173 223 | 
             
                    # If the key is _numeric_, then the in-sequence array of
         | 
| 174 224 | 
             
                    # children is accessed (see Tree#children).
         | 
| 175 225 | 
             
                    # If the key is not _numeric_, then it is assumed to be
         | 
| 176 226 | 
             
                    # the *name* of the child node to be returned.
         | 
| 177 227 | 
             
                    def [](key)
         | 
| 178 228 | 
             
                        raise "Key needs to be provided" if key == nil
         | 
| 179 | 
            -
             | 
| 229 | 
            +
             | 
| 180 230 | 
             
                        if key.kind_of?(Integer)
         | 
| 181 231 | 
             
                            @children[key]
         | 
| 182 232 | 
             
                        else
         | 
| @@ -201,7 +251,7 @@ module Tree | |
| 201 251 | 
             
                        children {|child| child.printTree(tab + 4)}
         | 
| 202 252 | 
             
                    end
         | 
| 203 253 |  | 
| 204 | 
            -
                    # Returns the root for this  | 
| 254 | 
            +
                    # Returns the root for this tree.
         | 
| 205 255 | 
             
                    def root
         | 
| 206 256 | 
             
                        root = self
         | 
| 207 257 | 
             
                        root = root.parent while !root.isRoot?
         | 
| @@ -215,7 +265,7 @@ module Tree | |
| 215 265 | 
             
                        return nil if isRoot?
         | 
| 216 266 | 
             
                        if block_given?
         | 
| 217 267 | 
             
                            for sibling in parent.children
         | 
| 218 | 
            -
             | 
| 268 | 
            +
                                          yield sibling if sibling != self
         | 
| 219 269 | 
             
                            end
         | 
| 220 270 | 
             
                        else
         | 
| 221 271 | 
             
                            siblings = []
         | 
| @@ -236,20 +286,21 @@ module Tree | |
| 236 286 | 
             
                    def freezeTree!
         | 
| 237 287 | 
             
                        each {|node| node.freeze}
         | 
| 238 288 | 
             
                    end
         | 
| 239 | 
            -
             | 
| 240 | 
            -
                    # Creates a dump representation
         | 
| 289 | 
            +
             | 
| 290 | 
            +
                    # Creates a dump representation and returns the same as a string
         | 
| 241 291 | 
             
                    def createDumpRep
         | 
| 242 292 | 
             
                        strRep = String.new
         | 
| 243 293 | 
             
                        strRep << @name << @@fieldSep << (isRoot? ? @name : @parent.name)
         | 
| 244 294 | 
             
                        strRep << @@fieldSep << Marshal.dump(@content) << @@recordSep
         | 
| 245 295 | 
             
                    end
         | 
| 246 | 
            -
             | 
| 296 | 
            +
             | 
| 247 297 | 
             
                    def _dump(depth)
         | 
| 248 298 | 
             
                        strRep = String.new
         | 
| 249 299 | 
             
                        each {|node| strRep << node.createDumpRep}
         | 
| 250 300 | 
             
                        strRep
         | 
| 251 301 | 
             
                    end
         | 
| 252 | 
            -
             | 
| 302 | 
            +
             | 
| 303 | 
            +
                    # Loads a dump representation of the tree from the specified string
         | 
| 253 304 | 
             
                    def TreeNode.loadDumpRep(str)
         | 
| 254 305 | 
             
                        nodeHash = Hash.new
         | 
| 255 306 | 
             
                        rootNode = nil
         | 
| @@ -266,13 +317,14 @@ module Tree | |
| 266 317 | 
             
                        end
         | 
| 267 318 | 
             
                        rootNode
         | 
| 268 319 | 
             
                    end
         | 
| 269 | 
            -
             | 
| 320 | 
            +
             | 
| 321 | 
            +
                    # Loads a dump representation of the tree from the specified string.
         | 
| 270 322 | 
             
                    def TreeNode._load(str)
         | 
| 271 323 | 
             
                        loadDumpRep(str)
         | 
| 272 324 | 
             
                    end
         | 
| 273 | 
            -
             | 
| 325 | 
            +
             | 
| 274 326 | 
             
                    protected :parent=, :setAsRoot!
         | 
| 275 327 | 
             
                    private_class_method :loadDumpRep
         | 
| 276 | 
            -
             | 
| 328 | 
            +
             | 
| 277 329 | 
             
                end
         | 
| 278 | 
            -
            end
         | 
| 330 | 
            +
            end
         | 
    
        data/test/person.rb
    CHANGED
    
    | @@ -1,3 +1,37 @@ | |
| 1 | 
            +
            # person.rb
         | 
| 2 | 
            +
            #
         | 
| 3 | 
            +
            # Revision: $Revision: 1.4 $
         | 
| 4 | 
            +
            #
         | 
| 5 | 
            +
            # Copyright (c) 2006, 2007 Anupam Sengupta
         | 
| 6 | 
            +
            #
         | 
| 7 | 
            +
            # All rights reserved.
         | 
| 8 | 
            +
            #
         | 
| 9 | 
            +
            # Redistribution and use in source and binary forms, with or without modification,
         | 
| 10 | 
            +
            # are permitted provided that the following conditions are met:
         | 
| 11 | 
            +
            #
         | 
| 12 | 
            +
            # - Redistributions of source code must retain the above copyright notice, this
         | 
| 13 | 
            +
            #   list of conditions and the following disclaimer.
         | 
| 14 | 
            +
            #
         | 
| 15 | 
            +
            # - Redistributions in binary form must reproduce the above copyright notice, this
         | 
| 16 | 
            +
            #   list of conditions and the following disclaimer in the documentation and/or
         | 
| 17 | 
            +
            #   other materials provided with the distribution.
         | 
| 18 | 
            +
            #
         | 
| 19 | 
            +
            # - Neither the name of the organization nor the names of its contributors may
         | 
| 20 | 
            +
            #   be used to endorse or promote products derived from this software without
         | 
| 21 | 
            +
            #   specific prior written permission.
         | 
| 22 | 
            +
            #
         | 
| 23 | 
            +
            #   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
         | 
| 24 | 
            +
            # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
         | 
| 25 | 
            +
            # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
         | 
| 26 | 
            +
            # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
         | 
| 27 | 
            +
            # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
         | 
| 28 | 
            +
            # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
         | 
| 29 | 
            +
            # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
         | 
| 30 | 
            +
            # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
         | 
| 31 | 
            +
            # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
         | 
| 32 | 
            +
            # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            # Define a simple class for testing the RubyTree implementation
         | 
| 1 35 | 
             
            class Person
         | 
| 2 36 | 
             
                attr_reader :first, :last
         | 
| 3 37 | 
             
                attr_writer :first, :last
         | 
| @@ -5,9 +39,9 @@ class Person | |
| 5 39 | 
             
                    @first = first
         | 
| 6 40 | 
             
                    @last = last
         | 
| 7 41 | 
             
                end
         | 
| 8 | 
            -
             | 
| 42 | 
            +
             | 
| 9 43 | 
             
                def to_s
         | 
| 10 44 | 
             
                    "#@first, #@last"
         | 
| 11 45 | 
             
                end
         | 
| 12 | 
            -
             | 
| 46 | 
            +
             | 
| 13 47 | 
             
            end
         | 
    
        data/test/testtree.rb
    CHANGED
    
    | @@ -1,5 +1,38 @@ | |
| 1 1 | 
             
            #!/usr/bin/env ruby
         | 
| 2 2 |  | 
| 3 | 
            +
            # testtree.rb
         | 
| 4 | 
            +
            #
         | 
| 5 | 
            +
            # Revision: $Revision: 1.5 $
         | 
| 6 | 
            +
            #
         | 
| 7 | 
            +
            # Copyright (c) 2006, 2007 Anupam Sengupta
         | 
| 8 | 
            +
            #
         | 
| 9 | 
            +
            # All rights reserved.
         | 
| 10 | 
            +
            #
         | 
| 11 | 
            +
            # Redistribution and use in source and binary forms, with or without modification,
         | 
| 12 | 
            +
            # are permitted provided that the following conditions are met:
         | 
| 13 | 
            +
            #
         | 
| 14 | 
            +
            # - Redistributions of source code must retain the above copyright notice, this
         | 
| 15 | 
            +
            #   list of conditions and the following disclaimer.
         | 
| 16 | 
            +
            #
         | 
| 17 | 
            +
            # - Redistributions in binary form must reproduce the above copyright notice, this
         | 
| 18 | 
            +
            #   list of conditions and the following disclaimer in the documentation and/or
         | 
| 19 | 
            +
            #   other materials provided with the distribution.
         | 
| 20 | 
            +
            #
         | 
| 21 | 
            +
            # - Neither the name of the organization nor the names of its contributors may
         | 
| 22 | 
            +
            #   be used to endorse or promote products derived from this software without
         | 
| 23 | 
            +
            #   specific prior written permission.
         | 
| 24 | 
            +
            #
         | 
| 25 | 
            +
            #   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
         | 
| 26 | 
            +
            # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
         | 
| 27 | 
            +
            # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
         | 
| 28 | 
            +
            # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
         | 
| 29 | 
            +
            # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
         | 
| 30 | 
            +
            # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
         | 
| 31 | 
            +
            # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
         | 
| 32 | 
            +
            # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
         | 
| 33 | 
            +
            # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
         | 
| 34 | 
            +
            # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
         | 
| 35 | 
            +
             | 
| 3 36 | 
             
            require 'test/unit'
         | 
| 4 37 | 
             
            require 'tree'
         | 
| 5 38 | 
             
            require 'person'
         | 
    
        metadata
    CHANGED
    
    | @@ -1,17 +1,17 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 | 
            -
            rubygems_version: 0.9. | 
| 2 | 
            +
            rubygems_version: 0.9.4
         | 
| 3 3 | 
             
            specification_version: 1
         | 
| 4 4 | 
             
            name: rubytree
         | 
| 5 5 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 6 | 
            -
              version: 0.2. | 
| 7 | 
            -
            date: 2007- | 
| 6 | 
            +
              version: 0.2.4
         | 
| 7 | 
            +
            date: 2007-06-23 00:00:00 -07:00
         | 
| 8 8 | 
             
            summary: Ruby implementation of the Tree data structure.
         | 
| 9 9 | 
             
            require_paths: 
         | 
| 10 10 | 
             
            - lib
         | 
| 11 11 | 
             
            email: anupamsg@gmail.com
         | 
| 12 12 | 
             
            homepage: 
         | 
| 13 13 | 
             
            rubyforge_project: 
         | 
| 14 | 
            -
            description: Provides a generic tree data | 
| 14 | 
            +
            description: "Provides a generic tree data-structure with ability to store keyed node-elements in the tree. The implementation mixes in the Enumerable module.  Website:  http://rubytree.rubyforge.org/"
         | 
| 15 15 | 
             
            autorequire: tree
         | 
| 16 16 | 
             
            default_executable: 
         | 
| 17 17 | 
             
            bindir: bin
         | 
| @@ -29,8 +29,11 @@ post_install_message: | |
| 29 29 | 
             
            authors: 
         | 
| 30 30 | 
             
            - Anupam Sengupta
         | 
| 31 31 | 
             
            files: 
         | 
| 32 | 
            +
            - ChangeLog
         | 
| 33 | 
            +
            - LICENSE
         | 
| 32 34 | 
             
            - Rakefile
         | 
| 33 35 | 
             
            - README
         | 
| 36 | 
            +
            - TAGS
         | 
| 34 37 | 
             
            - lib/tree.rb
         | 
| 35 38 | 
             
            - test/person.rb
         | 
| 36 39 | 
             
            - test/testtree.rb
         | 
| @@ -40,6 +43,8 @@ rdoc_options: [] | |
| 40 43 |  | 
| 41 44 | 
             
            extra_rdoc_files: 
         | 
| 42 45 | 
             
            - README
         | 
| 46 | 
            +
            - LICENSE
         | 
| 47 | 
            +
            - ChangeLog
         | 
| 43 48 | 
             
            executables: []
         | 
| 44 49 |  | 
| 45 50 | 
             
            extensions: []
         |