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
|
require 'active_ldap/association/proxy'
module ActiveLdap
module Association
class BelongsTo < Proxy
def replace(entry)
if entry.nil?
@target = @owner[@options[:foreign_key_name]] = nil
else
@target = (Proxy === entry ? entry.target : entry)
infect_connection(@target)
unless entry.new_entry?
@owner[@options[:foreign_key_name]] = entry[primary_key]
end
@updated = true
end
loaded
entry
end
def updated?
@updated
end
private
def have_foreign_key?
not @owner[@options[:foreign_key_name]].nil?
end
def find_target
value = @owner[@options[:foreign_key_name]]
raise EntryNotFound if value.nil?
key = primary_key
if key == "dn"
result = foreign_class.find(value, find_options)
else
filter = {key => value}
options = find_options(:filter => filter, :limit => 1)
result = foreign_class.find(:all, options).first
end
raise EntryNotFound if result.nil?
result
end
end
end
end
|