Sha256: b8d9541c1330ab27c8ad7454018faa80edb9ff2dbe6275fa556dfcf96a420d41

Contents?: true

Size: 1.43 KB

Versions: 2

Compression:

Stored size: 1.43 KB

Contents

require 'active_ldap/association/collection'

module ActiveLdap
  module Association
    class HasMany < Collection
      private
      def insert_entry(entry)
        entry[primary_key] = @owner[@options[:foreign_key_name]]
        entry.save
      end

      def find_target
        foreign_base_key = primary_key
        filter = @owner[@options[:foreign_key_name], true].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.collect do |key, val|
          "(#{key}=#{val})"
        end.join
        foreign_class.find(:all, :filter => "(|#{filter})")
      end

      def delete_entries(entries)
        key = primary_key
        dn_attribute = foreign_class.dn_attribute
        filter = @owner[@options[:foreign_key_name], true].reject do |value|
          value.nil?
        end.collect do |value|
          "(#{key}=#{value})"
        end.join
        filter = "(&#{filter})"
        entry_filter = entries.collect do |entry|
          "(#{dn_attribute}=#{entry.id})"
        end.join
        entry_filter = "(|#{entry_filter})"
        foreign_class.update_all({primary_key => []},
                                 "(&#{filter}#{entry_filter})")
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ruby-activeldap-0.8.1 lib/active_ldap/association/has_many.rb
ruby-activeldap-0.8.0 lib/active_ldap/association/has_many.rb