File: belongs_to_many.rb

package info (click to toggle)
ruby-activeldap 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye
  • size: 1,588 kB
  • sloc: ruby: 18,143; sh: 12; makefile: 5
file content (62 lines) | stat: -rw-r--r-- 2,017 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
require 'active_ldap/association/collection'

module ActiveLdap
  module Association
    class BelongsToMany < Collection
      private
      def normalize_entry(entry)
        _foreign_class = foreign_class
        entry = _foreign_class.find(entry) unless entry.is_a?(_foreign_class)
        entry
      end

      def insert_entry(entry)
        old_value = entry[@options[:many], true]
        primary_key_name = @options[:primary_key_name]
        if primary_key_name == "dn"
          old_value = dn_values_to_string_values(old_value)
        end
        current_value = @owner[primary_key_name, true]
        current_value = dn_values_to_string_values(current_value)
        new_value = old_value + current_value
        new_value = new_value.uniq.sort
        if old_value != new_value
          entry[@options[:many]] = new_value
          entry.save
        end
      end

      def delete_entries(entries)
        _foreign_class = foreign_class
        entries.each do |entry|
          entry = _foreign_class.find(entry) unless entry.is_a?(_foreign_class)
          old_value = entry[@options[:many], true]
          primary_key_name = @options[:primary_key_name]
          if primary_key_name == "dn"
            old_value = dn_values_to_string_values(old_value)
          end
          current_value = @owner[primary_key_name, true]
          current_value = dn_values_to_string_values(current_value)
          new_value = old_value - current_value
          new_value = new_value.uniq.sort
          if old_value != new_value
            entry[@options[:many]] = new_value
            entry.save
          end
        end
      end

      def find_target
        values = @owner[@options[:primary_key_name], true].compact
        return [] if values.empty?

        key = @options[:many]
        components = values.collect do |value|
          [key, value]
        end
        options = find_options(:filter => [:or, *components])
        foreign_class.find(:all, options)
      end
    end
  end
end