treequel 1.1.1 → 1.2.0pre320
Sign up to get free protection for your applications and to get access to all the features.
- 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]
|