Class: Wobaduser::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/wobaduser/base.rb

Direct Known Subclasses

User

Constant Summary collapse

SearchResult =
ImmutableStruct.new( :success?, :errors, :entries )
ATTR_SV =

ATTR_SV is for single valued attributes only. result is a string. ATTR_MV is for multi valued attributes. result is an array. Concrete values should be set in subclasses. See Wobaduser::User for an example.

{}
ATTR_MV =
{}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Base

Create an new Wobaduser object not to be intended to call directly, but possible. Better to use Wobaduser::User.new or Wobaduser::Group.new. There are to modes: 1) use Wobaduser::LDAP + LDAP-Filter 2) use a retrieved LDAP entry, i.e. used in Wobaduser::Base.search

[:entry] ldap entry [:ldap] instance of Wobaduser::LDAP [:filter] ldap filter (as string, not as Net::LDAP::Filter) [:ldap_options] additional ldap options for search

:entry and (:ldap, :filter) are mutually exclusive



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/wobaduser/base.rb', line 39

def initialize(options = {})
  options.symbolize_keys!
  keys = options.keys
  if keys.include?(:entry) && (keys & [:ldap, :filter, :ldap_options]).any?
    raise ArgumentError, ":entry and one of (:ldap, :filter, :ldap_options) are mutually exclusive!"
  end
  reset_errors
  get_ldap_entry(options)
  unless entry.nil?
    self.class.class_eval do
      generate_single_value_readers
      generate_multi_value_readers
    end
  end
end

Instance Attribute Details

#entryObject (readonly)

Returns the value of attribute entry.



24
25
26
# File 'lib/wobaduser/base.rb', line 24

def entry
  @entry
end

#errorsObject (readonly)

Returns the value of attribute errors.



24
25
26
# File 'lib/wobaduser/base.rb', line 24

def errors
  @errors
end

Class Method Details

.filterObject



65
66
67
# File 'lib/wobaduser/base.rb', line 65

def self.filter
  Net::LDAP::Filter.present('objectClass')
end

.search(options = {}) ⇒ Object



55
56
57
58
59
60
61
62
63
# File 'lib/wobaduser/base.rb', line 55

def self.search(options = {})
  search = search_ldap_entries(options)
  if search.success?
    entries = search.entries.map {|entry| self.new(entry: entry)}
    result = SearchResult.new(success: true, errors: [], entries: entries)
  else
    result = SearchResult.new(success: false, errors: search.errors, entries: [])
  end
end

Instance Method Details

#valid?Boolean

Returns:

  • (Boolean)


69
70
71
# File 'lib/wobaduser/base.rb', line 69

def valid?
  @entry.kind_of? Net::LDAP::Entry
end