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