Sha256: 14451a51ddf9e240d43f6dac6ceeffb2c358852a96ae4278b6a80eb55c387ff7

Contents?: true

Size: 1.57 KB

Versions: 1

Compression:

Stored size: 1.57 KB

Contents

require 'active_ldap/association/collection'

module ActiveLdap
  module Association
    class HasManyWrap < Collection
      private
      def insert_entry(entry)
        old_value = @owner[@options[:wrap], true]
        new_value = (old_value + entry[primary_key, true]).uniq.sort
        if old_value != new_value
          @owner[@options[:wrap]] = new_value
          @owner.save
        end
      end

      def delete_entries(entries)
        old_value = @owner[@options[:wrap], true]
        new_value = old_value - entries.collect {|entry| entry[primary_key]}
        new_value = new_value.uniq.sort
        if old_value != new_value
          @owner[@options[:wrap]] = new_value
          @owner.save
        end
      end

      def find_target
        foreign_base_key = primary_key
        requested_targets = @owner[@options[:wrap], true]

        components = requested_targets.collect do |value|
          key = val = nil
          if foreign_base_key == "dn"
            key, val = value.split(",")[0].split("=") unless value.empty?
          else
            key, val = foreign_base_key, value
          end
          [key, val]
        end.reject do |key, val|
          key.nil? or val.nil?
        end
        return [] if components.empty?

        klass = foreign_class
        found_targets = {}
        klass.find(:all, :filter => [:or, *components]).each do |target|
          found_targets[target.send(foreign_base_key)] ||= target
        end

        requested_targets.collect do |name|
          found_targets[name] || klass.new(name)
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ruby-activeldap-0.8.2 lib/active_ldap/association/has_many_wrap.rb