Class: ActiveLdap::DistinguishedName

Inherits:
Object
  • Object
show all
Includes:
GetTextSupport
Defined in:
lib/active_ldap/distinguished_name.rb

Defined Under Namespace

Classes: Parser

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*rdns) ⇒ DistinguishedName

Returns a new instance of DistinguishedName



171
172
173
174
175
176
177
178
179
# File 'lib/active_ldap/distinguished_name.rb', line 171

def initialize(*rdns)
  @rdns = rdns.collect do |rdn|
    if rdn.is_a?(Array) and rdn.size == 2
      {rdn[0] => rdn[1]}
    else
      rdn
    end
  end
end

Instance Attribute Details

#rdnsObject (readonly)

Returns the value of attribute rdns



170
171
172
# File 'lib/active_ldap/distinguished_name.rb', line 170

def rdns
  @rdns
end

Class Method Details

.escape_value(value) ⇒ Object



161
162
163
164
165
166
167
# File 'lib/active_ldap/distinguished_name.rb', line 161

def escape_value(value)
  if /(\A | \z)/.match(value)
    '"' + value.gsub(/([\\\"])/, '\\\\\1') + '"'
  else
    value.gsub(/([,=\+<>#;\\\"])/, '\\\\\1')
  end
end

.parse(source) ⇒ Object



157
158
159
# File 'lib/active_ldap/distinguished_name.rb', line 157

def parse(source)
  Parser.new(source).parse
end

Instance Method Details

#+(other) ⇒ Object



185
186
187
# File 'lib/active_ldap/distinguished_name.rb', line 185

def +(other)
  self.class.new(*(@rdns + other.rdns))
end

#-(other) ⇒ Object



189
190
191
192
193
194
195
196
197
198
199
200
# File 'lib/active_ldap/distinguished_name.rb', line 189

def -(other)
  rdns = @rdns.dup
  normalized_rdns = normalize(@rdns)
  normalize(other.rdns).reverse_each do |rdn|
    if rdn == normalized_rdns.pop
      rdns.pop
    else
      raise ArgumentError, _("%s isn't sub DN of %s") % [other, self]
    end
  end
  self.class.new(*rdns)
end

#<<(rdn) ⇒ Object



202
203
204
205
# File 'lib/active_ldap/distinguished_name.rb', line 202

def <<(rdn)
  @rdns << rdn
  self
end

#<=>(other) ⇒ Object



216
217
218
219
220
221
# File 'lib/active_ldap/distinguished_name.rb', line 216

def <=>(other)
  other = DN.parse(other) if other.is_a?(String)
  return nil unless other.is_a?(self.class)
  normalize_for_comparing(@rdns) <=>
    normalize_for_comparing(other.rdns)
end

#==(other) ⇒ Object



223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
# File 'lib/active_ldap/distinguished_name.rb', line 223

def ==(other)
  case other
  when self.class
    normalize(@rdns) == normalize(other.rdns)
  when String
    parsed_other = nil
    begin
      parsed_other = self.class.parse(other)
    rescue DistinguishedNameInvalid
      return false
    end
    self == parsed_other
  else
    false
  end
end

#blank?Boolean

Returns:

  • (Boolean)


181
182
183
# File 'lib/active_ldap/distinguished_name.rb', line 181

def blank?
  @rdns.blank?
end

#eql?(other) ⇒ Boolean

Returns:

  • (Boolean)


240
241
242
243
# File 'lib/active_ldap/distinguished_name.rb', line 240

def eql?(other)
  other.is_a?(self.class) and
    normalize(@rdns).to_s.eql?(normalize(other.rdns).to_s)
end

#hashObject



245
246
247
# File 'lib/active_ldap/distinguished_name.rb', line 245

def hash
  normalize(@rdns).to_s.hash
end

#parentObject



211
212
213
214
# File 'lib/active_ldap/distinguished_name.rb', line 211

def parent
  return nil if @rdns.size <= 1
  self.class.new(*@rdns[1..-1])
end

#to_human_readable_formatObject



264
265
266
# File 'lib/active_ldap/distinguished_name.rb', line 264

def to_human_readable_format
  to_s.inspect
end

#to_sObject



249
250
251
252
253
254
255
256
257
258
# File 'lib/active_ldap/distinguished_name.rb', line 249

def to_s
  klass = self.class
  @rdns.collect do |rdn|
    rdn.sort_by do |type, value|
      type.upcase
    end.collect do |type, value|
      "#{type}=#{klass.escape_value(value)}"
    end.join("+")
  end.join(",")
end

#to_strObject

for backward compatibility



260
261
262
# File 'lib/active_ldap/distinguished_name.rb', line 260

def to_str # for backward compatibility
  to_s
end

#unshift(rdn) ⇒ Object



207
208
209
# File 'lib/active_ldap/distinguished_name.rb', line 207

def unshift(rdn)
  @rdns.unshift(rdn)
end