lib/active_ldap/associations.rb in activeldap-1.0.9 vs lib/active_ldap/associations.rb in activeldap-1.1.0
- old
+ new
@@ -35,11 +35,13 @@
# |:class_name|.
#
# Example:
# belongs_to :groups, :class_name => "Group",
# :many => "memberUid" # Group#memberUid
- # # :foreign_key => "uid" # User#uid
+ # # :primary_key => "uid" # User#uid
+ # ## deprecated since 1.1.0. Use :primary_key instead.
+ # ## :foreign_key => "uid" # User#uid
# # dn attribute value is used by default
# belongs_to :primary_group, :class_name => "Group",
# :foreign_key => "gidNumber", # User#gidNumber
# :primary_key => "gidNumber" # Group#gidNumber
#
@@ -59,11 +61,18 @@
:many => many,
:extend => options[:extend],
}
if opts[:many]
association_class = Association::BelongsToMany
- opts[:foreign_key_name] ||= dn_attribute
+ foreign_key_name = opts[:foreign_key_name]
+ if foreign_key_name
+ message = _(":foreign_key belongs_to(:many) option is " \
+ "deprecated since 1.1.0. Use :primary_key instead.")
+ ActiveSupport::Deprecation.warn(message)
+ opts[:primary_key_name] ||= foreign_key_name
+ end
+ opts[:primary_key_name] ||= dn_attribute
else
association_class = Association::BelongsTo
opts[:foreign_key_name] ||= "#{association_id}_id"
before_save(<<-EOC)
@@ -90,19 +99,23 @@
# This discards any calls which result in entries that
# don't exist in LDAP!
#
# Example:
# has_many :primary_members, :class_name => "User",
- # :primary_key => "gidNumber", # User#gidNumber
- # :foreign_key => "gidNumber" # Group#gidNumber
+ # :primary_key => "gidNumber", # Group#gidNumber
+ # :foreign_key => "gidNumber" # User#gidNumber
+ # ## deprecated since 1.1.0. Those options
+ # ## are inverted.
+ # # :primary_key => "gidNumber", # User#gidNumber
+ # # :foreign_key => "gidNumber" # Group#gidNumber
# has_many :members, :class_name => "User",
# :wrap => "memberUid" # Group#memberUid
def has_many(association_id, options = {})
validate_has_many_options(options)
klass = options[:class]
klass ||= (options[:class_name] || association_id.to_s).classify
- foreign_key = options[:foreign_key] || "#{association_id}_id"
+ foreign_key = options[:foreign_key]
primary_key = options[:primary_key]
set_associated_class(association_id, klass)
opts = {
:association_id => association_id,
@@ -110,12 +123,23 @@
:primary_key_name => primary_key,
:wrap => options[:wrap],
:extend => options[:extend],
}
if opts[:wrap]
+ opts[:foreign_key_name] ||= "#{association_id}_id"
association_class = Association::HasManyWrap
else
association_class = Association::HasMany
+ primary_key_name = opts[:primary_key_name]
+ foreign_key_name = opts[:foreign_key_name]
+ if primary_key_name != foreign_key_name and
+ !new.have_attribute?(primary_key_name)
+ message = _(":primary_key and :foreign_key has_many options are " \
+ "inverted their mean since 1.1.0. Please invert them.")
+ ActiveSupport::Deprecation.warn(message)
+ opts[:foreign_key_name] = primary_key_name
+ opts[:primary_key_name] = foreign_key_name
+ end
end
association_accessor(association_id) do |target|
association_class.new(target, opts)
end