diff options
author | akira <akira@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-01-10 08:00:51 +0000 |
---|---|---|
committer | akira <akira@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-01-10 08:00:51 +0000 |
commit | 8a277783abde4824ab9f92a083dc6221c5fa4098 (patch) | |
tree | 67820073efcecd2ab006fff86b72c4f5020a7682 /lib/uri/ldap.rb | |
parent | d92e9de3b862af630aea7583bd4d45709c5d9085 (diff) |
added uri library (uri-0.9.4)
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1979 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/uri/ldap.rb')
-rw-r--r-- | lib/uri/ldap.rb | 238 |
1 files changed, 238 insertions, 0 deletions
diff --git a/lib/uri/ldap.rb b/lib/uri/ldap.rb new file mode 100644 index 0000000000..441ee69b86 --- /dev/null +++ b/lib/uri/ldap.rb @@ -0,0 +1,238 @@ +# +# $Id$ +# + +require 'uri/generic' + +module URI + +=begin + +== URI::LDAP + +URI::LDAP is copyrighted free software by Takaaki Tateishi and akira yamada. + + Copyright (c) 2001 Takaaki Tateishi <[email protected]> and + akira yamada <[email protected]>. + You can redistribute it and/or modify it under the same term as Ruby. + +=== Super Class + +((<URI::Generic>)) + +=end + + # LDAP URI SCHEMA (described in RFC2255) + # ldap://<host>/<dn>[?<attrs>[?<scope>[?<filter>[?<extensions>]]]] + class LDAP < Generic + + DEFAULT_PORT = 389 + + COMPONENT = [ + :scheme, + :host, :port, + :dn, + :attributes, + :scope, + :filter, + :extensions, + ].freeze + + SCOPE = [ + SCOPE_ONE = 'one', + SCOPE_SUB = 'sub', + SCOPE_BASE = 'base', + ].freeze + +=begin + +=== Class Methods + +--- URI::LDAP::build + +--- URI::LDAP::new + +=end + + def self.build(args) + tmp = Util::make_components_hash(self, args) + + if tmp[:dn] + tmp[:path] = tmp[:dn] + end + + query = [] + [:extensions, :filter, :scope, :attributes].collect do |x| + next if !tmp[x] && query.size == 0 + query.unshift(tmp[x]) + end + + tmp[:query] = query.join('?') + + return super(tmp) + end + + def initialize(*arg) + super(*arg) + + if @fragment + raise InvalidURIError, 'bad LDAP URL' + end + + parse_dn + parse_query + end + + def parse_dn + @dn = @path[1..-1] + end + private :parse_dn + + def parse_query + @attributes = nil + @scope = nil + @filter = nil + @extensions = nil + + if @query + attrs, scope, filter, extensions = @query.split('?') + + @attributes = attrs if attrs && attrs.size > 0 + @scope = scope if scope && scope.size > 0 + @filter = filter if filter && filter.size > 0 + @extensions = extensions if extensions && extensions.size > 0 + end + end + private :parse_query + + def build_path_query + @path = '/' + @dn + + query = [] + [@extensions, @filter, @scope, @attributes].each do |x| + next if !x && query.size == 0 + query.unshift(x) + end + @query = query.join('?') + end + private :build_path_query + +=begin + +=== Instance Methods + +--- URI::LDAP#dn + +--- URI::LDAP#dn=(v) + +=end + + def dn + @dn + end + + def set_dn(val) + @dn = val + build_path_query + end + protected :set_dn + + def dn=(val) + set_dn(val) + end + +=begin + +--- URI::LDAP#attributes + +--- URI::LDAP#attributes=(v) + +=end + + def attributes + @attributes + end + + def set_attributes(val) + @attributes = val + build_path_query + end + protected :set_attributes + + def attributes=(val) + set_attributes(val) + end + +=begin + +--- URI::LDAP#scope + +--- URI::LDAP#scope=(v) + +=end + + def scope + @scope + end + + def set_scope(val) + @scope = val + build_path_query + end + protected :set_scope + + def scope=(val) + set_scope(val) + end + +=begin + +--- URI::LDAP#filter + +--- URI::LDAP#filter=(v) + +=end + + def filter + @filter + end + + def set_filter(val) + @filter = val + build_path_query + end + protected :set_filter + + def filter=(val) + set_filter(val) + end + +=begin + +--- URI::LDAP#extensions + +--- URI::LDAP#extensions=(v) + +=end + + def extensions + @extensions + end + + def set_extensions(val) + @extensions = val + build_path_query + end + protected :set_extensions + + def extensions=(val) + set_extensions(val) + end + end + + def hierarchical? + false + end + + @@schemes['LDAP'] = LDAP +end |