treequel 1.1.1 → 1.2.0pre320
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.tar.gz.sig +0 -0
 - data/ChangeLog +49 -1
 - data/README.md +65 -0
 - data/Rakefile +24 -19
 - data/bin/treequel +20 -3
 - data/lib/treequel.rb +3 -3
 - data/lib/treequel/branch.rb +21 -7
 - data/lib/treequel/branchset.rb +10 -0
 - data/lib/treequel/model.rb +12 -2
 - data/lib/treequel/schema.rb +1 -1
 - data/rake/documentation.rb +9 -2
 - data/rake/hg.rb +16 -3
 - data/rake/manual.rb +1 -1
 - data/rake/packaging.rb +1 -1
 - data/rake/publishing.rb +158 -95
 - data/rake/testing.rb +52 -88
 - data/spec/lib/constants.rb +1 -0
 - data/spec/lib/control_behavior.rb +7 -5
 - data/spec/lib/helpers.rb +40 -17
 - data/spec/lib/matchers.rb +2 -0
 - data/spec/treequel/branch_spec.rb +44 -21
 - data/spec/treequel/branchcollection_spec.rb +4 -3
 - data/spec/treequel/branchset_spec.rb +42 -31
 - data/spec/treequel/control_spec.rb +2 -1
 - data/spec/treequel/controls/contentsync_spec.rb +2 -1
 - data/spec/treequel/controls/pagedresults_spec.rb +4 -7
 - data/spec/treequel/controls/sortedresults_spec.rb +4 -7
 - data/spec/treequel/directory_spec.rb +11 -12
 - data/spec/treequel/filter_spec.rb +7 -14
 - data/spec/treequel/mixins_spec.rb +4 -9
 - data/spec/treequel/model/objectclass_spec.rb +2 -1
 - data/spec/treequel/model_spec.rb +16 -35
 - data/spec/treequel/monkeypatches_spec.rb +12 -1
 - data/spec/treequel/schema/attributetype_spec.rb +2 -1
 - data/spec/treequel/schema/ldapsyntax_spec.rb +2 -1
 - data/spec/treequel/schema/matchingrule_spec.rb +2 -1
 - data/spec/treequel/schema/matchingruleuse_spec.rb +2 -1
 - data/spec/treequel/schema/objectclass_spec.rb +2 -1
 - data/spec/treequel/schema/table_spec.rb +2 -1
 - data/spec/treequel/schema_spec.rb +2 -1
 - data/spec/treequel_spec.rb +10 -2
 - metadata +16 -17
 - metadata.gz.sig +0 -0
 - data/README +0 -66
 
    
        data.tar.gz.sig
    CHANGED
    
    | 
         Binary file 
     | 
    
        data/ChangeLog
    CHANGED
    
    | 
         @@ -1,4 +1,52 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
             
     | 
| 
      
 1 
     | 
    
         
            +
            320[tip]   ccdee2d78e68   2010-11-24 18:21 -0800   ged
         
     | 
| 
      
 2 
     | 
    
         
            +
              Updated build system.
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            319   47697f2ebc27   2010-11-24 18:18 -0800   ged
         
     | 
| 
      
 5 
     | 
    
         
            +
              Added hash-key conversion so Branches can be constructed with Symbol-key hashargs.
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            318   44f8be0662c4   2010-11-18 15:43 -0800   ged
         
     | 
| 
      
 8 
     | 
    
         
            +
              Adding 'Treequel::Branchset#from' mutator for changing the base DN.
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            317:316,315   72dd41272f6f   2010-11-11 12:46 -0600   ged
         
     | 
| 
      
 11 
     | 
    
         
            +
              Merging with 316:33a7dcde80a1
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            316:313   9f9460125077   2010-11-11 10:59 -0600   ged
         
     | 
| 
      
 14 
     | 
    
         
            +
              Spec fixes for RSpec 2.0
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            315   33a7dcde80a1   2010-11-09 13:00 -0800   ged
         
     | 
| 
      
 17 
     | 
    
         
            +
              Readding subrepo
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            314   fc9ae9f5b034   2010-11-09 12:53 -0800   ged
         
     | 
| 
      
 20 
     | 
    
         
            +
              Fixing subrepo corruption caused by rollback
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            313:312,311   c1b750e4e9fc   2010-11-09 12:09 -0800   ged
         
     | 
| 
      
 23 
     | 
    
         
            +
              Merged with 310:cc7c63ff15a0
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            312:310   380662d385e0   2010-11-09 12:08 -0800   ged
         
     | 
| 
      
 26 
     | 
    
         
            +
              stub! -> stub; added more debugging to try to track down the model test failure
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            311:309   cc7c63ff15a0   2010-11-03 07:50 -0700   ged
         
     | 
| 
      
 29 
     | 
    
         
            +
              Converting the README to Markdown
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            310   7f20ab74d6b1   2010-11-08 12:53 -0800   ged
         
     | 
| 
      
 32 
     | 
    
         
            +
              Fixed treequel shell's cp to support relative and absolute DNs
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            309   26c3853695ea   2010-10-22 17:47 -0700   ged
         
     | 
| 
      
 35 
     | 
    
         
            +
              Converted to RSpec 2.0
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
            308   98b6847de872   2010-10-22 14:58 -0700   ged
         
     | 
| 
      
 38 
     | 
    
         
            +
              Updating build system; add requirement for Ruby 1.8.7
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            307   7f70394868e2   2010-09-21 08:49 -0700   ged
         
     | 
| 
      
 41 
     | 
    
         
            +
              Added tag 1.1.1 for changeset e52c71f4e4ca
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
            306[1.1.1]   e52c71f4e4ca   2010-09-21 08:49 -0700   ged
         
     | 
| 
      
 44 
     | 
    
         
            +
              Added signature for changeset c6d26ab6a7a4
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
            305   c6d26ab6a7a4   2010-09-21 08:48 -0700   ged
         
     | 
| 
      
 47 
     | 
    
         
            +
              Critical bugfix.
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
            304   92c28b14730a   2010-09-20 13:51 -0700   ged
         
     | 
| 
       2 
50 
     | 
    
         
             
              Added tag 1.1.0 for changeset b415e0fce774
         
     | 
| 
       3 
51 
     | 
    
         | 
| 
       4 
52 
     | 
    
         
             
            303[1.1.0]   b415e0fce774   2010-09-20 13:51 -0700   ged
         
     | 
    
        data/README.md
    ADDED
    
    | 
         @@ -0,0 +1,65 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Treequel - an honest LDAP library
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            Treequel is an LDAP toolkit for Ruby. It is intended to allow quick, easy
         
     | 
| 
      
 4 
     | 
    
         
            +
            access to LDAP directories in a manner consistent with LDAP's hierarchical,
         
     | 
| 
      
 5 
     | 
    
         
            +
            free-form nature. 
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            It's inspired by and modeled after [Sequel](http://sequel.rubyforge.org/), a
         
     | 
| 
      
 8 
     | 
    
         
            +
            kick-ass database library.
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            ## Examples
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            Here are a few short examples to whet your appetite:
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                # Connect to the directory at the specified URL
         
     | 
| 
      
 16 
     | 
    
         
            +
                dir = Treequel.directory( 'ldap://ldap.company.com/dc=company,dc=com' )
         
     | 
| 
      
 17 
     | 
    
         
            +
                
         
     | 
| 
      
 18 
     | 
    
         
            +
                # Get a list of email addresses of every person in the directory (as
         
     | 
| 
      
 19 
     | 
    
         
            +
                # long as people are under ou=people)
         
     | 
| 
      
 20 
     | 
    
         
            +
                dir.ou( :people ).filter( :mail ).map( :mail ).flatten
         
     | 
| 
      
 21 
     | 
    
         
            +
                
         
     | 
| 
      
 22 
     | 
    
         
            +
                # Get a list of all IP addresses for all hosts in any ou=hosts group
         
     | 
| 
      
 23 
     | 
    
         
            +
                # in the whole directory:
         
     | 
| 
      
 24 
     | 
    
         
            +
                dir.filter( :ou => :hosts ).collection.filter( :ipHostNumber ).
         
     | 
| 
      
 25 
     | 
    
         
            +
                  map( :ipHostNumber ).flatten
         
     | 
| 
      
 26 
     | 
    
         
            +
                
         
     | 
| 
      
 27 
     | 
    
         
            +
                # Get all people in the directory in the form of a hash of names 
         
     | 
| 
      
 28 
     | 
    
         
            +
                # keyed by email addresses
         
     | 
| 
      
 29 
     | 
    
         
            +
                dir.ou( :people ).filter( :mail ).to_hash( :mail, :cn )
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            More elaborate examples of real-world usage can be found 
         
     | 
| 
      
 32 
     | 
    
         
            +
            [in the examples/ directory][examples] in the distribution.
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
            ## Contributing
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
            You can check out the current development source [with Mercurial][hgrepo], or
         
     | 
| 
      
 38 
     | 
    
         
            +
            if you prefer Git, via the project's [Github mirror][gitmirror].
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            You can submit bug reports, suggestions, and read more about future plans at
         
     | 
| 
      
 41 
     | 
    
         
            +
            [the project page][projectpage].
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
            ## License
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
            See the included LICENSE file for licensing details.
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
            ## Authors
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
            * Michael Granger
         
     | 
| 
      
 52 
     | 
    
         
            +
            * Mahlon E. Smith
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
            ## Contributors
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
            A special thanks to Ben Bleything, who was part of the initial brainstorm that
         
     | 
| 
      
 58 
     | 
    
         
            +
            led to the creation of this library.
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
            [examples]:http://deveiate.org/projects/Treequel/browser/examples
         
     | 
| 
      
 62 
     | 
    
         
            +
            [hgrepo]:http://repo.deveiate.org/Treequel
         
     | 
| 
      
 63 
     | 
    
         
            +
            [gitmirror]:https://github.com/ged/treequel
         
     | 
| 
      
 64 
     | 
    
         
            +
            [projectpage]:http://deveiate.org/projects/Treequel
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
    
        data/Rakefile
    CHANGED
    
    | 
         @@ -171,9 +171,9 @@ include RakefileHelpers 
     | 
|
| 
       171 
171 
     | 
    
         
             
            # Set the build ID if the mercurial executable is available
         
     | 
| 
       172 
172 
     | 
    
         
             
            if hg = which( 'hg' )
         
     | 
| 
       173 
173 
     | 
    
         
             
            	id = `#{hg} id -n`.chomp
         
     | 
| 
       174 
     | 
    
         
            -
            	PKG_BUILD =  
     | 
| 
      
 174 
     | 
    
         
            +
            	PKG_BUILD = (id.chomp[ /^[[:xdigit:]]+/ ] || '1')
         
     | 
| 
       175 
175 
     | 
    
         
             
            else
         
     | 
| 
       176 
     | 
    
         
            -
            	PKG_BUILD = ' 
     | 
| 
      
 176 
     | 
    
         
            +
            	PKG_BUILD = '0'
         
     | 
| 
       177 
177 
     | 
    
         
             
            end
         
     | 
| 
       178 
178 
     | 
    
         
             
            SNAPSHOT_PKG_NAME = "#{PKG_FILE_NAME}.#{PKG_BUILD}"
         
     | 
| 
       179 
179 
     | 
    
         
             
            SNAPSHOT_GEM_NAME = "#{SNAPSHOT_PKG_NAME}.gem"
         
     | 
| 
         @@ -190,7 +190,6 @@ RDOC_OPTIONS = [ 
     | 
|
| 
       190 
190 
     | 
    
         
             
              ]
         
     | 
| 
       191 
191 
     | 
    
         
             
            YARD_OPTIONS = [
         
     | 
| 
       192 
192 
     | 
    
         
             
            	'--use-cache',
         
     | 
| 
       193 
     | 
    
         
            -
            	'--no-private',
         
     | 
| 
       194 
193 
     | 
    
         
             
            	'--protected',
         
     | 
| 
       195 
194 
     | 
    
         
             
            	'-r', README_FILE,
         
     | 
| 
       196 
195 
     | 
    
         
             
            	'--exclude', 'extconf\\.rb',
         
     | 
| 
         @@ -210,27 +209,29 @@ PROJECT_DOCDIR = "#{PROJECT_PUBDIR}/#{PKG_NAME}" 
     | 
|
| 
       210 
209 
     | 
    
         
             
            PROJECT_SCPPUBURL = "#{PROJECT_HOST}:#{PROJECT_PUBDIR}"
         
     | 
| 
       211 
210 
     | 
    
         
             
            PROJECT_SCPDOCURL = "#{PROJECT_HOST}:#{PROJECT_DOCDIR}"
         
     | 
| 
       212 
211 
     | 
    
         | 
| 
      
 212 
     | 
    
         
            +
            GEM_PUBHOST = 'rubygems.org'
         
     | 
| 
      
 213 
     | 
    
         
            +
             
     | 
| 
       213 
214 
     | 
    
         
             
            # Gem dependencies: gemname => version
         
     | 
| 
       214 
215 
     | 
    
         
             
            DEPENDENCIES = {
         
     | 
| 
       215 
     | 
    
         
            -
            	'ruby-ldap' => ' 
     | 
| 
      
 216 
     | 
    
         
            +
            	'ruby-ldap' => '~> 0.9.9',
         
     | 
| 
       216 
217 
     | 
    
         
             
            }
         
     | 
| 
       217 
218 
     | 
    
         | 
| 
       218 
219 
     | 
    
         
             
            # Developer Gem dependencies: gemname => version
         
     | 
| 
       219 
220 
     | 
    
         
             
            DEVELOPMENT_DEPENDENCIES = {
         
     | 
| 
       220 
     | 
    
         
            -
            	'rake' 
     | 
| 
       221 
     | 
    
         
            -
            	'rcodetools' 
     | 
| 
       222 
     | 
    
         
            -
            	'rcov' 
     | 
| 
       223 
     | 
    
         
            -
            	' 
     | 
| 
       224 
     | 
    
         
            -
            	'RedCloth' 
     | 
| 
       225 
     | 
    
         
            -
            	'rspec' 
     | 
| 
       226 
     | 
    
         
            -
            	'ruby-termios' 
     | 
| 
       227 
     | 
    
         
            -
            	'text-format' 
     | 
| 
       228 
     | 
    
         
            -
            	'tmail' 
     | 
| 
       229 
     | 
    
         
            -
            	' 
     | 
| 
       230 
     | 
    
         
            -
            	' 
     | 
| 
       231 
     | 
    
         
            -
            	' 
     | 
| 
       232 
     | 
    
         
            -
            	' 
     | 
| 
       233 
     | 
    
         
            -
            	'ruby-terminfo' => ' 
     | 
| 
      
 221 
     | 
    
         
            +
            	'rake'          => '~> 0.8.7',
         
     | 
| 
      
 222 
     | 
    
         
            +
            	'rcodetools'    => '~> 0.7.0.0',
         
     | 
| 
      
 223 
     | 
    
         
            +
            	'rcov'          => '~> 0.8.1.2.0',
         
     | 
| 
      
 224 
     | 
    
         
            +
            	'yard'          => '~> 0.6.1',
         
     | 
| 
      
 225 
     | 
    
         
            +
            	'RedCloth'      => '~> 4.2.3',
         
     | 
| 
      
 226 
     | 
    
         
            +
            	'rspec'         => '~> 2.0.1',
         
     | 
| 
      
 227 
     | 
    
         
            +
            	'ruby-termios'  => '~> 0.9.6',
         
     | 
| 
      
 228 
     | 
    
         
            +
            	'text-format'   => '~> 1.0.0',
         
     | 
| 
      
 229 
     | 
    
         
            +
            	'tmail'         => '~> 1.2.3.1',
         
     | 
| 
      
 230 
     | 
    
         
            +
            	'columnize' => '~> 0.3.1',
         
     | 
| 
      
 231 
     | 
    
         
            +
            	'diff-lcs' => '~> 1.1.2',
         
     | 
| 
      
 232 
     | 
    
         
            +
            	'ruby-termios' => '~> 0.9.6',
         
     | 
| 
      
 233 
     | 
    
         
            +
            	'rspec' => '~> 2.0.1',
         
     | 
| 
      
 234 
     | 
    
         
            +
            	'ruby-terminfo' => '~> 0.1.1',
         
     | 
| 
       234 
235 
     | 
    
         
             
            }
         
     | 
| 
       235 
236 
     | 
    
         | 
| 
       236 
237 
     | 
    
         
             
            # Non-gem requirements: packagename => version
         
     | 
| 
         @@ -258,9 +259,10 @@ GEMSPEC   = Gem::Specification.new do |gem| 
     | 
|
| 
       258 
259 
     | 
    
         
             
            		"    - diff-lcs",
         
     | 
| 
       259 
260 
     | 
    
         
             
            	  ].join( "\n" )
         
     | 
| 
       260 
261 
     | 
    
         | 
| 
       261 
     | 
    
         
            -
            	gem.authors           = "Michael Granger, Mahlon E. Smith"
         
     | 
| 
      
 262 
     | 
    
         
            +
            	gem.authors           = ["Michael Granger", "Mahlon E. Smith"]
         
     | 
| 
       262 
263 
     | 
    
         
             
            	gem.email             = ["mahlon@martini.nu", "ged@FaerieMUD.org"]
         
     | 
| 
       263 
264 
     | 
    
         
             
            	gem.homepage          = 'http://deveiate.org/projects/Treequel'
         
     | 
| 
      
 265 
     | 
    
         
            +
            	gem.licenses          = ["BSD"]
         
     | 
| 
       264 
266 
     | 
    
         | 
| 
       265 
267 
     | 
    
         
             
            	gem.has_rdoc          = true
         
     | 
| 
       266 
268 
     | 
    
         
             
            	gem.rdoc_options      = RDOC_OPTIONS
         
     | 
| 
         @@ -282,6 +284,9 @@ GEMSPEC   = Gem::Specification.new do |gem| 
     | 
|
| 
       282 
284 
     | 
    
         
             
            	gem.signing_key       = '/Volumes/Keys/ged-private_gem_key.pem'
         
     | 
| 
       283 
285 
     | 
    
         
             
            	gem.cert_chain        = [File.expand_path('~/.gem/ged-public_gem_cert.pem')]
         
     | 
| 
       284 
286 
     | 
    
         | 
| 
      
 287 
     | 
    
         
            +
             
     | 
| 
      
 288 
     | 
    
         
            +
            	gem.required_ruby_version = '>=1.8.7'
         
     | 
| 
      
 289 
     | 
    
         
            +
             
     | 
| 
       285 
290 
     | 
    
         
             
            	DEPENDENCIES.each do |name, version|
         
     | 
| 
       286 
291 
     | 
    
         
             
            		version = '>= 0' if version.length.zero?
         
     | 
| 
       287 
292 
     | 
    
         
             
            		gem.add_runtime_dependency( name, version )
         
     | 
    
        data/bin/treequel
    CHANGED
    
    | 
         @@ -690,10 +690,27 @@ class Treequel::Shell 
     | 
|
| 
       690 
690 
     | 
    
         | 
| 
       691 
691 
     | 
    
         
             
            	### Copy an entry
         
     | 
| 
       692 
692 
     | 
    
         
             
            	def cp_command( options, rdn, newrdn )
         
     | 
| 
       693 
     | 
    
         
            -
            		 
     | 
| 
       694 
     | 
    
         
            -
             
     | 
| 
      
 693 
     | 
    
         
            +
            		base_dn = @currbranch.directory.base_dn
         
     | 
| 
      
 694 
     | 
    
         
            +
             
     | 
| 
      
 695 
     | 
    
         
            +
            		# If the RDN includes the base, it's a DN
         
     | 
| 
      
 696 
     | 
    
         
            +
            		branch = if rdn =~ /,#{base_dn}$/i
         
     | 
| 
      
 697 
     | 
    
         
            +
            				Treequel::Branch.new( @currbranch.directory, rdn )
         
     | 
| 
      
 698 
     | 
    
         
            +
            			else
         
     | 
| 
      
 699 
     | 
    
         
            +
            				@currbranch.get_child( rdn )
         
     | 
| 
      
 700 
     | 
    
         
            +
            			end
         
     | 
| 
      
 701 
     | 
    
         
            +
             
     | 
| 
      
 702 
     | 
    
         
            +
            		# The source should already exist
         
     | 
| 
      
 703 
     | 
    
         
            +
            		raise "#{branch.dn}: no such entry" unless branch.exists?
         
     | 
| 
      
 704 
     | 
    
         
            +
             
     | 
| 
      
 705 
     | 
    
         
            +
            		# Same for the other RDN...
         
     | 
| 
      
 706 
     | 
    
         
            +
            		newbranch = if newrdn =~ /,#{base_dn}$/i
         
     | 
| 
      
 707 
     | 
    
         
            +
            				Treequel::Branch.new( @currbranch.directory, newrdn )
         
     | 
| 
      
 708 
     | 
    
         
            +
            			else
         
     | 
| 
      
 709 
     | 
    
         
            +
            				@currbranch.get_child( newrdn )
         
     | 
| 
      
 710 
     | 
    
         
            +
            			end
         
     | 
| 
       695 
711 
     | 
    
         | 
| 
       696 
     | 
    
         
            -
            		 
     | 
| 
      
 712 
     | 
    
         
            +
            		# But it *shouldn't* exist already
         
     | 
| 
      
 713 
     | 
    
         
            +
            		raise "#{newbranch.dn}: already exists" if newbranch.exists?
         
     | 
| 
       697 
714 
     | 
    
         | 
| 
       698 
715 
     | 
    
         
             
            		attributes = branch.entry.merge( :dn => newbranch.dn )
         
     | 
| 
       699 
716 
     | 
    
         
             
            		newbranch.create( attributes )
         
     | 
    
        data/lib/treequel.rb
    CHANGED
    
    | 
         @@ -25,7 +25,7 @@ end 
     | 
|
| 
       25 
25 
     | 
    
         | 
| 
       26 
26 
     | 
    
         
             
            # A library for interacting with LDAP modelled after Sequel.
         
     | 
| 
       27 
27 
     | 
    
         
             
            #
         
     | 
| 
       28 
     | 
    
         
            -
            # @version 1. 
     | 
| 
      
 28 
     | 
    
         
            +
            # @version 1.2.0
         
     | 
| 
       29 
29 
     | 
    
         
             
            # 
         
     | 
| 
       30 
30 
     | 
    
         
             
            # @example
         
     | 
| 
       31 
31 
     | 
    
         
             
            #   # Connect to the directory at the specified URL
         
     | 
| 
         @@ -53,10 +53,10 @@ end 
     | 
|
| 
       53 
53 
     | 
    
         
             
            module Treequel
         
     | 
| 
       54 
54 
     | 
    
         | 
| 
       55 
55 
     | 
    
         
             
            	# Library version
         
     | 
| 
       56 
     | 
    
         
            -
            	VERSION = '1. 
     | 
| 
      
 56 
     | 
    
         
            +
            	VERSION = '1.2.0'
         
     | 
| 
       57 
57 
     | 
    
         | 
| 
       58 
58 
     | 
    
         
             
            	# VCS revision
         
     | 
| 
       59 
     | 
    
         
            -
            	REVISION = %q$Revision:  
     | 
| 
      
 59 
     | 
    
         
            +
            	REVISION = %q$Revision: 44f8be0662c4 $
         
     | 
| 
       60 
60 
     | 
    
         | 
| 
       61 
61 
     | 
    
         
             
            	# Common paths for ldap.conf
         
     | 
| 
       62 
62 
     | 
    
         
             
            	COMMON_LDAP_CONF_PATHS = %w[
         
     | 
    
        data/lib/treequel/branch.rb
    CHANGED
    
    | 
         @@ -17,7 +17,8 @@ class Treequel::Branch 
     | 
|
| 
       17 
17 
     | 
    
         
             
            	include Comparable,
         
     | 
| 
       18 
18 
     | 
    
         
             
            	        Treequel::Loggable,
         
     | 
| 
       19 
19 
     | 
    
         
             
            	        Treequel::Constants,
         
     | 
| 
       20 
     | 
    
         
            -
            	        Treequel::Constants::Patterns
         
     | 
| 
      
 20 
     | 
    
         
            +
            	        Treequel::Constants::Patterns,
         
     | 
| 
      
 21 
     | 
    
         
            +
            	        Treequel::HashUtilities
         
     | 
| 
       21 
22 
     | 
    
         | 
| 
       22 
23 
     | 
    
         
             
            	extend Treequel::Delegation,
         
     | 
| 
       23 
24 
     | 
    
         
             
            	       Treequel::AttributeDeclarations
         
     | 
| 
         @@ -52,6 +53,7 @@ class Treequel::Branch 
     | 
|
| 
       52 
53 
     | 
    
         
             
            	### 
         
     | 
| 
       53 
54 
     | 
    
         
             
            	### @return [Treequel::Branch]  The new branch object.
         
     | 
| 
       54 
55 
     | 
    
         
             
            	def self::new_from_entry( entry, directory )
         
     | 
| 
      
 56 
     | 
    
         
            +
            		entry = Treequel::HashUtilities.stringify_keys( entry )
         
     | 
| 
       55 
57 
     | 
    
         
             
            		return self.new( directory, entry['dn'].first, entry )
         
     | 
| 
       56 
58 
     | 
    
         
             
            	end
         
     | 
| 
       57 
59 
     | 
    
         | 
| 
         @@ -76,7 +78,7 @@ class Treequel::Branch 
     | 
|
| 
       76 
78 
     | 
    
         | 
| 
       77 
79 
     | 
    
         
             
            		@directory = directory
         
     | 
| 
       78 
80 
     | 
    
         
             
            		@dn        = dn
         
     | 
| 
       79 
     | 
    
         
            -
            		@entry     = entry
         
     | 
| 
      
 81 
     | 
    
         
            +
            		@entry     = entry ? stringify_keys( entry ) : nil
         
     | 
| 
       80 
82 
     | 
    
         
             
            		@values    = {}
         
     | 
| 
       81 
83 
     | 
    
         | 
| 
       82 
84 
     | 
    
         
             
            		@include_operational_attrs = self.class.include_operational_attrs?
         
     | 
| 
         @@ -287,11 +289,13 @@ class Treequel::Branch 
     | 
|
| 
       287 
289 
     | 
    
         
             
            		attrsym = attrname.to_sym
         
     | 
| 
       288 
290 
     | 
    
         | 
| 
       289 
291 
     | 
    
         
             
            		unless @values.key?( attrsym )
         
     | 
| 
      
 292 
     | 
    
         
            +
            			self.log.debug "  value for %p is NOT cached." % [ attrsym ]
         
     | 
| 
       290 
293 
     | 
    
         
             
            			value = self.get_converted_object( attrsym )
         
     | 
| 
      
 294 
     | 
    
         
            +
            			self.log.debug "  converted value is: %p" % [ value ]
         
     | 
| 
       291 
295 
     | 
    
         
             
            			value.freeze if value.respond_to?( :freeze )
         
     | 
| 
       292 
296 
     | 
    
         
             
            			@values[ attrsym ] = value
         
     | 
| 
       293 
297 
     | 
    
         
             
            		else
         
     | 
| 
       294 
     | 
    
         
            -
            			self.log.debug "  value is cached."
         
     | 
| 
      
 298 
     | 
    
         
            +
            			self.log.debug "  value for %p is cached." % [ attrname ]
         
     | 
| 
       295 
299 
     | 
    
         
             
            		end
         
     | 
| 
       296 
300 
     | 
    
         | 
| 
       297 
301 
     | 
    
         
             
            		return @values[ attrsym ]
         
     | 
| 
         @@ -474,11 +478,13 @@ class Treequel::Branch 
     | 
|
| 
       474 
478 
     | 
    
         
             
            	### @param [Array<String, Symbol>] additional_classes 
         
     | 
| 
       475 
479 
     | 
    
         
             
            	### @return [Array<Treequel::Schema::ObjectClass>]
         
     | 
| 
       476 
480 
     | 
    
         
             
            	def object_classes( *additional_classes )
         
     | 
| 
      
 481 
     | 
    
         
            +
            		self.log.debug "Fetching object classes for %s" % [ self.dn ]
         
     | 
| 
       477 
482 
     | 
    
         
             
            		schema = self.directory.schema
         
     | 
| 
       478 
483 
     | 
    
         | 
| 
       479 
484 
     | 
    
         
             
            		oc_oids = self[:objectClass] || []
         
     | 
| 
      
 485 
     | 
    
         
            +
            		self.log.debug "  objectClass OIDs are: %p" % [ oc_oids ]
         
     | 
| 
       480 
486 
     | 
    
         
             
            		oc_oids |= additional_classes.collect {|str| str.to_sym }
         
     | 
| 
       481 
     | 
    
         
            -
            		oc_oids <<  
     | 
| 
      
 487 
     | 
    
         
            +
            		oc_oids << :top if oc_oids.empty?
         
     | 
| 
       482 
488 
     | 
    
         | 
| 
       483 
489 
     | 
    
         
             
            		oclasses = []
         
     | 
| 
       484 
490 
     | 
    
         
             
            		oc_oids.each do |oid|
         
     | 
| 
         @@ -487,6 +493,7 @@ class Treequel::Branch 
     | 
|
| 
       487 
493 
     | 
    
         
             
            			oclasses << oc
         
     | 
| 
       488 
494 
     | 
    
         
             
            		end
         
     | 
| 
       489 
495 
     | 
    
         | 
| 
      
 496 
     | 
    
         
            +
            		self.log.debug "  found %d objectClasses: %p" % [  oclasses.length, oclasses ]
         
     | 
| 
       490 
497 
     | 
    
         
             
            		return oclasses.uniq
         
     | 
| 
       491 
498 
     | 
    
         
             
            	end
         
     | 
| 
       492 
499 
     | 
    
         | 
| 
         @@ -517,7 +524,8 @@ class Treequel::Branch 
     | 
|
| 
       517 
524 
     | 
    
         
             
            	def must_attribute_types( *additional_object_classes )
         
     | 
| 
       518 
525 
     | 
    
         
             
            		types = []
         
     | 
| 
       519 
526 
     | 
    
         
             
            		oclasses = self.object_classes( *additional_object_classes )
         
     | 
| 
       520 
     | 
    
         
            -
            		self.log.debug "Gathering MUST attribute types for objectClasses: %p" % 
     | 
| 
      
 527 
     | 
    
         
            +
            		self.log.debug "Gathering MUST attribute types for objectClasses: %p" %
         
     | 
| 
      
 528 
     | 
    
         
            +
            		 	[ oclasses.map(&:name) ]
         
     | 
| 
       521 
529 
     | 
    
         | 
| 
       522 
530 
     | 
    
         
             
            		oclasses.each do |oc|
         
     | 
| 
       523 
531 
     | 
    
         
             
            			self.log.debug "  adding %p from %p" % [ oc.must, oc ]
         
     | 
| 
         @@ -734,13 +742,19 @@ class Treequel::Branch 
     | 
|
| 
       734 
742 
     | 
    
         | 
| 
       735 
743 
     | 
    
         
             
            	### Fetch the entry from the Branch's directory.
         
     | 
| 
       736 
744 
     | 
    
         
             
            	def lookup_entry
         
     | 
| 
      
 745 
     | 
    
         
            +
            		self.log.debug "Looking up entry for %s" % [ self.dn ]
         
     | 
| 
      
 746 
     | 
    
         
            +
            		entry = nil
         
     | 
| 
      
 747 
     | 
    
         
            +
             
     | 
| 
       737 
748 
     | 
    
         
             
            		if self.include_operational_attrs?
         
     | 
| 
       738 
749 
     | 
    
         
             
            			self.log.debug "  including operational attributes."
         
     | 
| 
       739 
     | 
    
         
            -
            			 
     | 
| 
      
 750 
     | 
    
         
            +
            			entry = self.directory.get_extended_entry( self )
         
     | 
| 
       740 
751 
     | 
    
         
             
            		else
         
     | 
| 
       741 
752 
     | 
    
         
             
            			self.log.debug "  not including operational attributes."
         
     | 
| 
       742 
     | 
    
         
            -
            			 
     | 
| 
      
 753 
     | 
    
         
            +
            			entry = self.directory.get_entry( self )
         
     | 
| 
       743 
754 
     | 
    
         
             
            		end
         
     | 
| 
      
 755 
     | 
    
         
            +
             
     | 
| 
      
 756 
     | 
    
         
            +
            		self.log.debug "  entry is: %p" % [ entry ]
         
     | 
| 
      
 757 
     | 
    
         
            +
            		return entry
         
     | 
| 
       744 
758 
     | 
    
         
             
            	end
         
     | 
| 
       745 
759 
     | 
    
         | 
| 
       746 
760 
     | 
    
         | 
    
        data/lib/treequel/branchset.rb
    CHANGED
    
    | 
         @@ -399,6 +399,16 @@ class Treequel::Branchset 
     | 
|
| 
       399 
399 
     | 
    
         
             
            	end
         
     | 
| 
       400 
400 
     | 
    
         | 
| 
       401 
401 
     | 
    
         | 
| 
      
 402 
     | 
    
         
            +
            	### Return a clone of the receiving Branchset that will perform its search from
         
     | 
| 
      
 403 
     | 
    
         
            +
            	### +other_dn+ instead of its own.
         
     | 
| 
      
 404 
     | 
    
         
            +
            	### @param [String, #dn]  other_dn  the new base DN of the search
         
     | 
| 
      
 405 
     | 
    
         
            +
            	def from( other_dn )
         
     | 
| 
      
 406 
     | 
    
         
            +
            		newset = self.clone
         
     | 
| 
      
 407 
     | 
    
         
            +
            		other_dn = other_dn.dn if other_dn.respond_to?( :dn )
         
     | 
| 
      
 408 
     | 
    
         
            +
            		newset.branch = newset.branch.class.new( self.branch.directory, other_dn )
         
     | 
| 
      
 409 
     | 
    
         
            +
            		return newset
         
     | 
| 
      
 410 
     | 
    
         
            +
            	end
         
     | 
| 
      
 411 
     | 
    
         
            +
             
     | 
| 
       402 
412 
     | 
    
         
             
            end # class Treequel::Branchset
         
     | 
| 
       403 
413 
     | 
    
         | 
| 
       404 
414 
     | 
    
         | 
    
        data/lib/treequel/model.rb
    CHANGED
    
    | 
         @@ -162,7 +162,7 @@ class Treequel::Model < Treequel::Branch 
     | 
|
| 
       162 
162 
     | 
    
         
             
            	### @param [Symbol,String] sym  the name of the method to test for
         
     | 
| 
       163 
163 
     | 
    
         
             
            	### @return [Boolean]
         
     | 
| 
       164 
164 
     | 
    
         
             
            	def respond_to?( sym, include_priv=false )
         
     | 
| 
       165 
     | 
    
         
            -
            		return super if caller(1).first =~ %r{/spec/} &&
         
     | 
| 
      
 165 
     | 
    
         
            +
            		return super if caller(1).first =~ %r{/r?spec/} &&
         
     | 
| 
       166 
166 
     | 
    
         
             
            			caller(1).first !~ /respond_to/ # RSpec workaround
         
     | 
| 
       167 
167 
     | 
    
         
             
            		return true if super
         
     | 
| 
       168 
168 
     | 
    
         
             
            		plainsym, _ = attribute_from_method( sym )
         
     | 
| 
         @@ -213,26 +213,34 @@ class Treequel::Model < Treequel::Branch 
     | 
|
| 
       213 
213 
     | 
    
         | 
| 
       214 
214 
     | 
    
         
             
            	### Proxy method -- Handle calls to missing methods by searching for an attribute.
         
     | 
| 
       215 
215 
     | 
    
         
             
            	def method_missing( sym, *args )
         
     | 
| 
      
 216 
     | 
    
         
            +
            		self.log.debug "Dynamic dispatch to %p with args: %p" % [ sym, args ]
         
     | 
| 
       216 
217 
     | 
    
         | 
| 
       217 
218 
     | 
    
         
             
            		# First, if the entry hasn't yet been loaded, try loading it to make sure the 
         
     | 
| 
       218 
219 
     | 
    
         
             
            		# object is already extended with any applicable objectClass mixins. If that ends
         
     | 
| 
       219 
220 
     | 
    
         
             
            		# up defining the method in question, call it.
         
     | 
| 
       220 
221 
     | 
    
         
             
            		if !@entry && self.entry
         
     | 
| 
      
 222 
     | 
    
         
            +
            			self.log.debug "  entry wasn't loaded, looking for methods added by loading it..."
         
     | 
| 
       221 
223 
     | 
    
         
             
            			meth = begin
         
     | 
| 
       222 
224 
     | 
    
         
             
            				self.method( sym )
         
     | 
| 
       223 
     | 
    
         
            -
            			rescue NoMethodError, NameError
         
     | 
| 
      
 225 
     | 
    
         
            +
            			rescue NoMethodError, NameError => err
         
     | 
| 
      
 226 
     | 
    
         
            +
            				self.log.debug "  it still didn't define %p: %s: %s" %
         
     | 
| 
      
 227 
     | 
    
         
            +
            					[ sym, err.class.name, err.message ]
         
     | 
| 
       224 
228 
     | 
    
         
             
            				nil
         
     | 
| 
       225 
229 
     | 
    
         
             
            			end
         
     | 
| 
       226 
230 
     | 
    
         
             
            			return meth.call( *args ) if meth
         
     | 
| 
       227 
231 
     | 
    
         
             
            		end
         
     | 
| 
       228 
232 
     | 
    
         | 
| 
      
 233 
     | 
    
         
            +
            		self.log.debug "  checking to see if it's a traversal call"
         
     | 
| 
       229 
234 
     | 
    
         
             
            		# Next, super to rdn-traversal if it looks like a reader but has arguments
         
     | 
| 
       230 
235 
     | 
    
         
             
            		plainsym, methodtype = attribute_from_method( sym )
         
     | 
| 
      
 236 
     | 
    
         
            +
            		self.log.debug "    method look like a %p" % [ methodtype ]
         
     | 
| 
       231 
237 
     | 
    
         
             
            		return super if methodtype == :reader && !args.empty?
         
     | 
| 
      
 238 
     | 
    
         
            +
            		self.log.debug "  ...but it doesn't have any arguments. Finding attr type."
         
     | 
| 
       232 
239 
     | 
    
         | 
| 
       233 
240 
     | 
    
         
             
            		# Now make a method body for a new method based on what attributeType it is if 
         
     | 
| 
       234 
241 
     | 
    
         
             
            		# it's a valid attribute
         
     | 
| 
       235 
242 
     | 
    
         
             
            		attrtype = self.find_attribute_type( plainsym ) or return super
         
     | 
| 
      
 243 
     | 
    
         
            +
            		self.log.debug "  attrtype is: %p" % [ attrtype ]
         
     | 
| 
       236 
244 
     | 
    
         
             
            		methodbody = case methodtype
         
     | 
| 
       237 
245 
     | 
    
         
             
            			when :writer
         
     | 
| 
       238 
246 
     | 
    
         
             
            				self.make_writer( attrtype )
         
     | 
| 
         @@ -310,6 +318,8 @@ class Treequel::Model < Treequel::Branch 
     | 
|
| 
       310 
318 
     | 
    
         
             
            		if entry = super
         
     | 
| 
       311 
319 
     | 
    
         
             
            			self.log.debug "  applying mixins to %p" % [ entry ]
         
     | 
| 
       312 
320 
     | 
    
         
             
            			self.apply_applicable_mixins( self.dn, entry )
         
     | 
| 
      
 321 
     | 
    
         
            +
            		else
         
     | 
| 
      
 322 
     | 
    
         
            +
            			self.log.debug "  failed to fetch the entry."
         
     | 
| 
       313 
323 
     | 
    
         
             
            		end
         
     | 
| 
       314 
324 
     | 
    
         
             
            		return entry
         
     | 
| 
       315 
325 
     | 
    
         
             
            	end
         
     | 
    
        data/lib/treequel/schema.rb
    CHANGED
    
    | 
         @@ -214,7 +214,7 @@ class Treequel::Schema 
     | 
|
| 
       214 
214 
     | 
    
         
             
            	def inspect
         
     | 
| 
       215 
215 
     | 
    
         
             
            		ivar_descs = self.instance_variables.sort.collect do |ivar|
         
     | 
| 
       216 
216 
     | 
    
         
             
            			len = self.instance_variable_get( ivar ).length
         
     | 
| 
       217 
     | 
    
         
            -
            			"%d %s" % [ len, ivar.gsub(/_/, ' ')[1..-1] ]
         
     | 
| 
      
 217 
     | 
    
         
            +
            			"%d %s" % [ len, ivar.to_s.gsub(/_/, ' ')[1..-1] ]
         
     | 
| 
       218 
218 
     | 
    
         
             
            		end
         
     | 
| 
       219 
219 
     | 
    
         
             
            		return %{#<%s:0x%0x %s>} % [
         
     | 
| 
       220 
220 
     | 
    
         
             
            			self.class.name,
         
     | 
    
        data/rake/documentation.rb
    CHANGED
    
    | 
         @@ -54,7 +54,7 @@ begin 
     | 
|
| 
       54 
54 
     | 
    
         
             
            	class YARD::RegistryStore; include YardGlobals; end
         
     | 
| 
       55 
55 
     | 
    
         
             
            	class YARD::Docstring; include YardGlobals; end
         
     | 
| 
       56 
56 
     | 
    
         
             
            	module YARD::Templates::Helpers::ModuleHelper; include YardGlobals; end
         
     | 
| 
       57 
     | 
    
         
            -
            	module YARD:: 
     | 
| 
      
 57 
     | 
    
         
            +
            	module YARD::Templates::Helpers::HtmlHelper; include YardGlobals; end
         
     | 
| 
       58 
58 
     | 
    
         | 
| 
       59 
59 
     | 
    
         
             
            	if vvec(RUBY_VERSION) >= vvec("1.9.1")
         
     | 
| 
       60 
60 
     | 
    
         
             
            		# Monkeypatched to allow more than two '#' characters at the beginning
         
     | 
| 
         @@ -63,8 +63,15 @@ begin 
     | 
|
| 
       63 
63 
     | 
    
         
             
            		require 'yard/parser/ruby/ruby_parser'
         
     | 
| 
       64 
64 
     | 
    
         
             
            		class YARD::Parser::Ruby::RipperParser < Ripper
         
     | 
| 
       65 
65 
     | 
    
         
             
            			def on_comment(comment)
         
     | 
| 
       66 
     | 
    
         
            -
            				$stderr.puts "Adding comment: %p" % [ comment ]
         
     | 
| 
       67 
66 
     | 
    
         
             
            				visit_ns_token(:comment, comment)
         
     | 
| 
      
 67 
     | 
    
         
            +
            				case comment
         
     | 
| 
      
 68 
     | 
    
         
            +
            				when /\A# @group\s+(.+)\s*\Z/
         
     | 
| 
      
 69 
     | 
    
         
            +
            					@groups.unshift [lineno, $1]
         
     | 
| 
      
 70 
     | 
    
         
            +
            					return
         
     | 
| 
      
 71 
     | 
    
         
            +
            				when /\A# @endgroup\s*\Z/
         
     | 
| 
      
 72 
     | 
    
         
            +
            					@groups.unshift [lineno, nil]
         
     | 
| 
      
 73 
     | 
    
         
            +
            					return
         
     | 
| 
      
 74 
     | 
    
         
            +
            				end
         
     | 
| 
       68 
75 
     | 
    
         | 
| 
       69 
76 
     | 
    
         
             
            				comment = comment.gsub(/^\#+\s{0,1}/, '').chomp
         
     | 
| 
       70 
77 
     | 
    
         
             
            				append_comment = @comments[lineno - 1]
         
     |