File: has_many_wrap.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 (75 lines) | stat: -rw-r--r-- 2,189 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
63
64
65
66
67
68
69
70
71
72
73
74
75
require 'active_ldap/association/collection'
require 'active_ldap/association/has_many_utils'

module ActiveLdap
  module Association
    class HasManyWrap < Collection
      include HasManyUtils

      private
      def insert_entry(entry)
        old_value = @owner[@options[:wrap], true]
        _foreign_key = foreign_key
        if _foreign_key == "dn"
          old_value = dn_values_to_string_values(old_value)
        end
        current_value = entry[_foreign_key, true]
        current_value = dn_values_to_string_values(current_value)
        new_value = (old_value + current_value).uniq.sort
        if old_value != new_value
          @owner[@options[:wrap]] = new_value
          @owner.save unless @owner.new_entry?
        end
      end

      def delete_entries(entries)
        old_value = @owner[@options[:wrap], true]
        _foreign_key = foreign_key
        if _foreign_key == "dn"
          old_value = dn_values_to_string_values(old_value)
        end
        current_value = entries.collect {|entry| entry[_foreign_key]}
        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
          @owner[@options[:wrap]] = new_value
          @owner.save unless @owner.new_entry?
        end
      end

      def find_target
        targets, requested_targets = collect_targets(@options[:wrap], true)
        return [] if targets.nil?

        found_targets = {}
        _foreign_key = foreign_key
        targets.each do |target|
          found_targets[target[_foreign_key]] ||= target
        end

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

      def foreign_key
        @options[:primary_key_name] || foreign_class.dn_attribute
      end

      def add_entries(*entries)
        result = true
        load_target

        flatten_deeper(entries).each do |entry|
          infect_connection(entry)
          insert_entry(entry) or result = false
          @target << entry
        end

        result && self
      end
    end
  end
end