class Acs::Ldap::Pusher

Public Class Methods

new(connector, options = {}) click to toggle source

connector : Acs::Ldap::Connector instance options : directly set a mapper at initialization

# File lib/acs/ldap/pusher.rb, line 5
def initialize(connector, options = {})
  @connector = connector
  @mapper = options[:mapper] || nil
end

Public Instance Methods

connector() click to toggle source
# File lib/acs/ldap/pusher.rb, line 84
def connector
  @connector
end
count() click to toggle source
# File lib/acs/ldap/pusher.rb, line 79
def count
  filter = Net::LDAP::Filter.pres('uid')
  @connector.search({base: base, filter: filter}).data.count
end
create(model, options = {}) click to toggle source
# File lib/acs/ldap/pusher.rb, line 27
def create(model, options = {})
  attributes = @mapper.attributes(model).except!(:uid)
  attributes.merge!(objectClass: @mapper.object_class)

  Acs::Ldap.logger.debug "Pusher#create dn '#{dn(model)}' attributes '#{attributes.inspect}'"

  @connector.add(
    dn(model),
    attributes
  )
end
destroy(model, options = {}) click to toggle source
# File lib/acs/ldap/pusher.rb, line 59
def destroy(model, options = {})
  @connector.delete(dn(model))
end
exist?(model) click to toggle source
# File lib/acs/ldap/pusher.rb, line 67
def exist?(model)
  @connector.search({base: dn(model)}).data.length > 0
end
find_by(key, value) click to toggle source
# File lib/acs/ldap/pusher.rb, line 71
def find_by(key, value)
  @connector.search_by(
    base,
    key,
    value
  )
end
flush() click to toggle source
# File lib/acs/ldap/pusher.rb, line 63
def flush
  @connector.delete_all(ou)
end
index() click to toggle source
# File lib/acs/ldap/pusher.rb, line 22
def index
  filter = Net::LDAP::Filter.pres('uid')
  @connector.search({base: base, filter: filter})
end
mapper=(mapper) click to toggle source
# File lib/acs/ldap/pusher.rb, line 10
def mapper=(mapper)
  @mapper = mapper
end
save(model, options = {}) click to toggle source
# File lib/acs/ldap/pusher.rb, line 14
def save(model, options = {})
  if exist?(model)
    update(model)
  else
    create(model)
  end
end
update(model, options = {}) click to toggle source
# File lib/acs/ldap/pusher.rb, line 39
def update(model, options = {})
  changes = options.fetch(:changes, nil)
  attributes = @mapper.attributes(model).except(:uid)
  operations = []
  attributes.each do |key, value|
    if attributes.nil? or attributes.include?(key)
      if changes.nil?
        operations << [:replace, key.to_s, value]
      else
        operations << [:replace, key.to_s, value] if changes.has_key?(key)
      end
    end
  end

  @connector.update(
    dn(model),
    operations
  )
end

Protected Instance Methods

base() click to toggle source
# File lib/acs/ldap/pusher.rb, line 94
def base
  "ou=#{ou},#{@connector.base}"
end
dn(model) click to toggle source
# File lib/acs/ldap/pusher.rb, line 98
def dn(model)
  "uid=#{@mapper.uid(model)},#{base}"
end
ou() click to toggle source
# File lib/acs/ldap/pusher.rb, line 90
def ou
  @mapper.ou
end