lib/mongomapper/associations.rb in fcoury-mongomapper-0.3.5 vs lib/mongomapper/associations.rb in fcoury-mongomapper-0.4.0
- old
+ new
@@ -1,68 +1,63 @@
module MongoMapper
module Associations
module ClassMethods
def belongs_to(association_id, options = {})
- association = create_association(:belongs_to, association_id, options)
-
- ref_id = "#{association_id}_id"
- key ref_id, String
-
- define_method("#{ref_id}=") do |value|
- write_attribute(ref_id, value)
- end
-
- if options[:polymorphic]
- ref_type = "#{association_id}_type"
- key ref_type, String
-
- define_method("#{ref_type}=") do |value|
- write_attribute(ref_type, value)
- end
- end
-
- define_association_methods(association)
-
+ create_association(:belongs_to, association_id, options)
self
end
def many(association_id, options = {})
- association = create_association(:many, association_id, options)
- define_association_methods(association)
-
+ create_association(:many, association_id, options)
self
end
def associations
@associations ||= HashWithIndifferentAccess.new
end
private
- def create_association(type, name, options)
- association = Associations::Base.new(type, name, options)
- associations[association.name] = association
- association
- end
-
- def define_association_methods(association)
- define_method(association.name) do
- get_proxy(association)
+ def create_association(type, name, options)
+ association = Associations::Base.new(type, name, options)
+ associations[association.name] = association
+ define_association_methods(association)
+ define_association_keys(association)
+ association
end
- define_method("#{association.name}=") do |value|
- get_proxy(association).replace(value)
- value
+ def define_association_methods(association)
+ define_method(association.name) do
+ get_proxy(association)
+ end
+
+ define_method("#{association.name}=") do |value|
+ get_proxy(association).replace(value)
+ value
+ end
end
- end
+
+ def define_association_keys(association)
+ if association.many?
+ if association.polymorphic?
+ association.klass.send :key, association.type_key_name, String
+ end
+ else
+ key "#{association.name}_id", String
+
+ if association.polymorphic?
+ key association.type_key_name, String
+ end
+ end
+ end
end
module InstanceMethods
def get_proxy(association)
- proxy = self.instance_variable_get(association.ivar)
- if proxy.nil?
+ unless proxy = self.instance_variable_get(association.ivar)
proxy = association.proxy_class.new(self, association)
self.instance_variable_set(association.ivar, proxy)
end
+
proxy
end
end
end
end