mongo_mapper-unstable 2010.3.8 → 2010.06.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. data/README.rdoc +4 -8
  2. data/bin/mmconsole +1 -1
  3. data/examples/keys.rb +37 -0
  4. data/examples/plugins.rb +41 -0
  5. data/examples/querying.rb +35 -0
  6. data/examples/scopes.rb +52 -0
  7. data/lib/mongo_mapper/connection.rb +83 -0
  8. data/lib/mongo_mapper/document.rb +11 -329
  9. data/lib/mongo_mapper/embedded_document.rb +9 -38
  10. data/lib/mongo_mapper/exceptions.rb +30 -0
  11. data/lib/mongo_mapper/extensions/array.rb +19 -0
  12. data/lib/mongo_mapper/extensions/binary.rb +22 -0
  13. data/lib/mongo_mapper/extensions/boolean.rb +44 -0
  14. data/lib/mongo_mapper/extensions/date.rb +25 -0
  15. data/lib/mongo_mapper/extensions/float.rb +14 -0
  16. data/lib/mongo_mapper/extensions/hash.rb +14 -0
  17. data/lib/mongo_mapper/extensions/integer.rb +19 -0
  18. data/lib/mongo_mapper/extensions/kernel.rb +9 -0
  19. data/lib/mongo_mapper/extensions/nil_class.rb +18 -0
  20. data/lib/mongo_mapper/extensions/object.rb +27 -0
  21. data/lib/mongo_mapper/extensions/object_id.rb +30 -0
  22. data/lib/mongo_mapper/extensions/set.rb +20 -0
  23. data/lib/mongo_mapper/extensions/string.rb +18 -0
  24. data/lib/mongo_mapper/extensions/time.rb +29 -0
  25. data/lib/mongo_mapper/plugins/accessible.rb +44 -0
  26. data/lib/mongo_mapper/plugins/associations/base.rb +7 -6
  27. data/lib/mongo_mapper/plugins/associations/belongs_to_polymorphic_proxy.rb +5 -6
  28. data/lib/mongo_mapper/plugins/associations/belongs_to_proxy.rb +5 -6
  29. data/lib/mongo_mapper/plugins/associations/collection.rb +1 -0
  30. data/lib/mongo_mapper/plugins/associations/embedded_collection.rb +2 -1
  31. data/lib/mongo_mapper/plugins/associations/in_array_proxy.rb +25 -39
  32. data/lib/mongo_mapper/plugins/associations/many_documents_as_proxy.rb +4 -4
  33. data/lib/mongo_mapper/plugins/associations/many_documents_proxy.rb +36 -46
  34. data/lib/mongo_mapper/plugins/associations/many_embedded_polymorphic_proxy.rb +1 -0
  35. data/lib/mongo_mapper/plugins/associations/many_embedded_proxy.rb +5 -4
  36. data/lib/mongo_mapper/plugins/associations/many_polymorphic_proxy.rb +1 -0
  37. data/lib/mongo_mapper/plugins/associations/one_embedded_proxy.rb +40 -0
  38. data/lib/mongo_mapper/plugins/associations/one_proxy.rb +7 -7
  39. data/lib/mongo_mapper/plugins/associations/proxy.rb +16 -8
  40. data/lib/mongo_mapper/plugins/associations.rb +14 -22
  41. data/lib/mongo_mapper/plugins/caching.rb +21 -0
  42. data/lib/mongo_mapper/plugins/callbacks.rb +17 -5
  43. data/lib/mongo_mapper/plugins/clone.rb +10 -4
  44. data/lib/mongo_mapper/plugins/descendants.rb +3 -2
  45. data/lib/mongo_mapper/plugins/dirty.rb +1 -0
  46. data/lib/mongo_mapper/plugins/document.rb +41 -0
  47. data/lib/mongo_mapper/{support/find.rb → plugins/dynamic_querying/dynamic_finder.rb} +3 -36
  48. data/lib/mongo_mapper/plugins/dynamic_querying.rb +43 -0
  49. data/lib/mongo_mapper/plugins/embedded_document.rb +49 -0
  50. data/lib/mongo_mapper/plugins/equality.rb +4 -10
  51. data/lib/mongo_mapper/plugins/identity_map.rb +29 -23
  52. data/lib/mongo_mapper/plugins/indexes.rb +12 -0
  53. data/lib/mongo_mapper/plugins/inspect.rb +1 -0
  54. data/lib/mongo_mapper/plugins/keys/key.rb +55 -0
  55. data/lib/mongo_mapper/plugins/keys.rb +85 -110
  56. data/lib/mongo_mapper/plugins/logger.rb +1 -0
  57. data/lib/mongo_mapper/plugins/modifiers.rb +41 -16
  58. data/lib/mongo_mapper/plugins/pagination.rb +5 -15
  59. data/lib/mongo_mapper/plugins/persistence.rb +69 -0
  60. data/lib/mongo_mapper/plugins/protected.rb +9 -1
  61. data/lib/mongo_mapper/plugins/querying/decorator.rb +46 -0
  62. data/lib/mongo_mapper/plugins/querying/plucky_methods.rb +15 -0
  63. data/lib/mongo_mapper/plugins/querying.rb +176 -0
  64. data/lib/mongo_mapper/plugins/rails.rb +6 -1
  65. data/lib/mongo_mapper/plugins/safe.rb +28 -0
  66. data/lib/mongo_mapper/plugins/sci.rb +32 -0
  67. data/lib/mongo_mapper/plugins/scopes.rb +21 -0
  68. data/lib/mongo_mapper/plugins/serialization.rb +5 -4
  69. data/lib/mongo_mapper/plugins/timestamps.rb +2 -1
  70. data/lib/mongo_mapper/plugins/userstamps.rb +1 -0
  71. data/lib/mongo_mapper/plugins/validations.rb +9 -5
  72. data/lib/mongo_mapper/plugins.rb +1 -20
  73. data/lib/mongo_mapper/support/descendant_appends.rb +5 -6
  74. data/lib/mongo_mapper/version.rb +4 -0
  75. data/lib/mongo_mapper.rb +71 -128
  76. data/test/{NOTE_ON_TESTING → _NOTE_ON_TESTING} +0 -0
  77. data/test/functional/associations/test_belongs_to_polymorphic_proxy.rb +5 -5
  78. data/test/functional/associations/test_belongs_to_proxy.rb +13 -21
  79. data/test/functional/associations/test_in_array_proxy.rb +7 -9
  80. data/test/functional/associations/test_many_documents_as_proxy.rb +5 -5
  81. data/test/functional/associations/test_many_documents_proxy.rb +186 -64
  82. data/test/functional/associations/test_many_embedded_polymorphic_proxy.rb +22 -22
  83. data/test/functional/associations/test_many_embedded_proxy.rb +32 -32
  84. data/test/functional/associations/test_many_polymorphic_proxy.rb +47 -47
  85. data/test/functional/associations/test_one_embedded_proxy.rb +67 -0
  86. data/test/functional/associations/test_one_proxy.rb +70 -49
  87. data/test/functional/test_accessible.rb +168 -0
  88. data/test/functional/test_associations.rb +11 -11
  89. data/test/functional/test_binary.rb +5 -5
  90. data/test/functional/test_caching.rb +76 -0
  91. data/test/functional/test_callbacks.rb +104 -34
  92. data/test/functional/test_dirty.rb +16 -16
  93. data/test/functional/test_document.rb +12 -924
  94. data/test/functional/test_dynamic_querying.rb +75 -0
  95. data/test/functional/test_embedded_document.rb +88 -8
  96. data/test/functional/test_identity_map.rb +41 -43
  97. data/test/functional/{test_indexing.rb → test_indexes.rb} +3 -5
  98. data/test/functional/test_logger.rb +1 -1
  99. data/test/functional/test_modifiers.rb +275 -181
  100. data/test/functional/test_pagination.rb +13 -15
  101. data/test/functional/test_protected.rb +25 -11
  102. data/test/functional/test_querying.rb +873 -0
  103. data/test/functional/test_safe.rb +76 -0
  104. data/test/functional/test_sci.rb +230 -0
  105. data/test/functional/test_scopes.rb +171 -0
  106. data/test/functional/test_string_id_compatibility.rb +11 -11
  107. data/test/functional/test_timestamps.rb +0 -2
  108. data/test/functional/test_userstamps.rb +0 -1
  109. data/test/functional/test_validations.rb +44 -31
  110. data/test/models.rb +18 -17
  111. data/test/{active_model_lint_test.rb → test_active_model_lint.rb} +3 -1
  112. data/test/test_helper.rb +59 -16
  113. data/test/unit/associations/test_base.rb +47 -42
  114. data/test/unit/associations/test_proxy.rb +15 -15
  115. data/test/unit/serializers/test_json_serializer.rb +29 -29
  116. data/test/unit/test_clone.rb +69 -0
  117. data/test/unit/test_descendant_appends.rb +3 -3
  118. data/test/unit/test_document.rb +49 -67
  119. data/test/unit/test_dynamic_finder.rb +53 -51
  120. data/test/unit/test_embedded_document.rb +19 -38
  121. data/test/unit/{test_support.rb → test_extensions.rb} +136 -122
  122. data/test/unit/test_key.rb +185 -0
  123. data/test/unit/test_keys.rb +29 -147
  124. data/test/unit/test_mongo_mapper.rb +3 -48
  125. data/test/unit/test_pagination.rb +1 -150
  126. data/test/unit/test_rails.rb +77 -19
  127. data/test/unit/test_rails_compatibility.rb +12 -12
  128. data/test/unit/test_serialization.rb +5 -5
  129. data/test/unit/test_time_zones.rb +9 -9
  130. data/test/unit/test_validations.rb +46 -46
  131. metadata +157 -155
  132. data/.gitignore +0 -10
  133. data/Rakefile +0 -55
  134. data/VERSION +0 -1
  135. data/lib/mongo_mapper/plugins/pagination/proxy.rb +0 -72
  136. data/lib/mongo_mapper/query.rb +0 -130
  137. data/lib/mongo_mapper/support.rb +0 -215
  138. data/mongo_mapper.gemspec +0 -196
  139. data/performance/read_write.rb +0 -52
  140. data/specs.watchr +0 -51
  141. data/test/support/custom_matchers.rb +0 -55
  142. data/test/support/timing.rb +0 -16
  143. data/test/unit/test_query.rb +0 -340
@@ -1,60 +1,31 @@
1
+ # encoding: UTF-8
1
2
  module MongoMapper
2
3
  module EmbeddedDocument
3
4
  extend Support::DescendantAppends
4
5
 
5
6
  def self.included(model)
6
7
  model.class_eval do
7
- include InstanceMethods
8
- extend ClassMethods
9
8
  extend Plugins
10
9
 
10
+ plugin Plugins::EmbeddedDocument
11
11
  plugin Plugins::Associations
12
+ plugin Plugins::Caching
12
13
  plugin Plugins::Clone
13
14
  plugin Plugins::Descendants
14
15
  plugin Plugins::Equality
15
16
  plugin Plugins::Inspect
16
17
  plugin Plugins::Keys
17
18
  plugin Plugins::Logger
19
+ plugin Plugins::Persistence
20
+ plugin Plugins::Accessible
18
21
  plugin Plugins::Protected
19
22
  plugin Plugins::Rails
23
+ plugin Plugins::Sci
20
24
  plugin Plugins::Serialization
21
25
  plugin Plugins::Validations
22
-
23
- attr_reader :_root_document, :_parent_document
26
+ plugin Plugins::Callbacks
24
27
  end
25
-
26
28
  super
27
29
  end
28
-
29
- module ClassMethods
30
- def embeddable?
31
- true
32
- end
33
-
34
- def embedded_in(owner_name)
35
- define_method(owner_name) { _parent_document }
36
- end
37
- end
38
-
39
- module InstanceMethods
40
- def save(options={})
41
- if result = _root_document.try(:save, options)
42
- @new = false
43
- end
44
- result
45
- end
46
-
47
- def save!(options={})
48
- if result = _root_document.try(:save!, options)
49
- @new = false
50
- end
51
- result
52
- end
53
-
54
- def _parent_document=(value)
55
- @_root_document = value._root_document
56
- @_parent_document = value
57
- end
58
- end # InstanceMethods
59
- end # EmbeddedDocument
60
- end # MongoMapper
30
+ end
31
+ end
@@ -0,0 +1,30 @@
1
+ # encoding: UTF-8
2
+ module MongoMapper
3
+ # generic MM error
4
+ class Error < StandardError; end
5
+
6
+ # raised when key expected to exist but not found
7
+ class KeyNotFound < Error; end
8
+
9
+ # raised when document expected but not found
10
+ class DocumentNotFound < Error; end
11
+
12
+ # raised when trying to connect using uri with incorrect scheme
13
+ class InvalidScheme < Error; end
14
+
15
+ # raised when trying to do something not supported, mostly for edocs
16
+ class NotSupported < Error; end
17
+
18
+ # raised when document not valid and using !
19
+ class DocumentNotValid < Error
20
+ def initialize(document)
21
+ super("Validation failed: #{document.errors.full_messages.join(", ")}")
22
+ end
23
+ end
24
+
25
+ class AccessibleOrProtected < Error
26
+ def initialize(name)
27
+ super("Declare either attr_protected or attr_accessible for #{name}, but not both.")
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,19 @@
1
+ # encoding: UTF-8
2
+ module MongoMapper
3
+ module Extensions
4
+ module Array
5
+ def to_mongo(value)
6
+ value = value.respond_to?(:lines) ? value.lines : value
7
+ value.to_a
8
+ end
9
+
10
+ def from_mongo(value)
11
+ value || []
12
+ end
13
+ end
14
+ end
15
+ end
16
+
17
+ class Array
18
+ extend MongoMapper::Extensions::Array
19
+ end
@@ -0,0 +1,22 @@
1
+ # encoding: UTF-8
2
+ module MongoMapper
3
+ module Extensions
4
+ module Binary
5
+ def to_mongo(value)
6
+ if value.is_a?(::BSON::Binary)
7
+ value
8
+ else
9
+ value.nil? ? nil : ::BSON::Binary.new(value)
10
+ end
11
+ end
12
+
13
+ def from_mongo(value)
14
+ value
15
+ end
16
+ end
17
+ end
18
+ end
19
+
20
+ class Binary
21
+ extend MongoMapper::Extensions::Binary
22
+ end
@@ -0,0 +1,44 @@
1
+ # encoding: UTF-8
2
+ module MongoMapper
3
+ module Extensions
4
+ module Boolean
5
+ Mapping = {
6
+ true => true,
7
+ 'true' => true,
8
+ 'TRUE' => true,
9
+ 'True' => true,
10
+ 't' => true,
11
+ 'T' => true,
12
+ '1' => true,
13
+ 1 => true,
14
+ 1.0 => true,
15
+ false => false,
16
+ 'false' => false,
17
+ 'FALSE' => false,
18
+ 'False' => false,
19
+ 'f' => false,
20
+ 'F' => false,
21
+ '0' => false,
22
+ 0 => false,
23
+ 0.0 => false,
24
+ nil => nil
25
+ }
26
+
27
+ def to_mongo(value)
28
+ if value.is_a?(Boolean)
29
+ value
30
+ else
31
+ Mapping[value]
32
+ end
33
+ end
34
+
35
+ def from_mongo(value)
36
+ value.nil? ? nil : !!value
37
+ end
38
+ end
39
+ end
40
+ end
41
+
42
+ class Boolean
43
+ extend MongoMapper::Extensions::Boolean
44
+ end
@@ -0,0 +1,25 @@
1
+ # encoding: UTF-8
2
+ module MongoMapper
3
+ module Extensions
4
+ module Date
5
+ def to_mongo(value)
6
+ if value.nil? || value == ''
7
+ nil
8
+ else
9
+ date = value.is_a?(::Date) || value.is_a?(::Time) ? value : ::Date.parse(value.to_s)
10
+ ::Time.utc(date.year, date.month, date.day)
11
+ end
12
+ rescue
13
+ nil
14
+ end
15
+
16
+ def from_mongo(value)
17
+ value.to_date if value.present?
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+ class Date
24
+ extend MongoMapper::Extensions::Date
25
+ end
@@ -0,0 +1,14 @@
1
+ # encoding: UTF-8
2
+ module MongoMapper
3
+ module Extensions
4
+ module Float
5
+ def to_mongo(value)
6
+ value.nil? ? nil : value.to_f
7
+ end
8
+ end
9
+ end
10
+ end
11
+
12
+ class Float
13
+ extend MongoMapper::Extensions::Float
14
+ end
@@ -0,0 +1,14 @@
1
+ # encoding: UTF-8
2
+ module MongoMapper
3
+ module Extensions
4
+ module Hash
5
+ def from_mongo(value)
6
+ HashWithIndifferentAccess.new(value || {})
7
+ end
8
+ end
9
+ end
10
+ end
11
+
12
+ class Hash
13
+ extend MongoMapper::Extensions::Hash
14
+ end
@@ -0,0 +1,19 @@
1
+ # encoding: UTF-8
2
+ module MongoMapper
3
+ module Extensions
4
+ module Integer
5
+ def to_mongo(value)
6
+ value_to_i = value.to_i
7
+ if value_to_i == 0 && value != value_to_i
8
+ value.to_s =~ /^(0x|0b)?0+/ ? 0 : nil
9
+ else
10
+ value_to_i
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+
17
+ class Integer
18
+ extend MongoMapper::Extensions::Integer
19
+ end
@@ -0,0 +1,9 @@
1
+ # encoding: UTF-8
2
+ module Kernel
3
+ # Returns the object's singleton class.
4
+ def singleton_class
5
+ class << self
6
+ self
7
+ end
8
+ end unless respond_to?(:singleton_class) # exists in 1.9.2
9
+ end
@@ -0,0 +1,18 @@
1
+ # encoding: UTF-8
2
+ module MongoMapper
3
+ module Extensions
4
+ module NilClass
5
+ def to_mongo(value)
6
+ value
7
+ end
8
+
9
+ def from_mongo(value)
10
+ value
11
+ end
12
+ end
13
+ end
14
+ end
15
+
16
+ class NilClass
17
+ include MongoMapper::Extensions::NilClass
18
+ end
@@ -0,0 +1,27 @@
1
+ # encoding: UTF-8
2
+ module MongoMapper
3
+ module Extensions
4
+ module Object
5
+ module ClassMethods
6
+ def to_mongo(value)
7
+ value
8
+ end
9
+
10
+ def from_mongo(value)
11
+ value
12
+ end
13
+ end
14
+
15
+ module InstanceMethods
16
+ def to_mongo
17
+ self.class.to_mongo(self)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ class Object
25
+ extend MongoMapper::Extensions::Object::ClassMethods
26
+ include MongoMapper::Extensions::Object::InstanceMethods
27
+ end
@@ -0,0 +1,30 @@
1
+ # encoding: UTF-8
2
+ module MongoMapper
3
+ module Extensions
4
+ module ObjectId
5
+ def to_mongo(value)
6
+ Plucky.to_object_id(value)
7
+ end
8
+
9
+ def from_mongo(value)
10
+ value
11
+ end
12
+ end
13
+ end
14
+ end
15
+
16
+ class ObjectId
17
+ extend MongoMapper::Extensions::ObjectId
18
+ end
19
+
20
+ class BSON::ObjectID
21
+ alias_method :original_to_json, :to_json
22
+
23
+ def as_json(options=nil)
24
+ to_s
25
+ end
26
+
27
+ def to_json(options = nil)
28
+ as_json.to_json
29
+ end
30
+ end
@@ -0,0 +1,20 @@
1
+ # encoding: UTF-8
2
+ require 'set'
3
+
4
+ module MongoMapper
5
+ module Extensions
6
+ module Set
7
+ def to_mongo(value)
8
+ value.to_a
9
+ end
10
+
11
+ def from_mongo(value)
12
+ (value || []).to_set
13
+ end
14
+ end
15
+ end
16
+ end
17
+
18
+ class Set
19
+ extend MongoMapper::Extensions::Set
20
+ end
@@ -0,0 +1,18 @@
1
+ # encoding: UTF-8
2
+ module MongoMapper
3
+ module Extensions
4
+ module String
5
+ def to_mongo(value)
6
+ value.nil? ? nil : value.to_s
7
+ end
8
+
9
+ def from_mongo(value)
10
+ value.nil? ? nil : value.to_s
11
+ end
12
+ end
13
+ end
14
+ end
15
+
16
+ class String
17
+ extend MongoMapper::Extensions::String
18
+ end
@@ -0,0 +1,29 @@
1
+ # encoding: UTF-8
2
+ module MongoMapper
3
+ module Extensions
4
+ module Time
5
+ def to_mongo(value)
6
+ if value.nil? || value == ''
7
+ nil
8
+ else
9
+ time_class = ::Time.try(:zone).present? ? ::Time.zone : ::Time
10
+ time = value.is_a?(::Time) ? value : time_class.parse(value.to_s)
11
+ # strip milliseconds as Ruby does micro and bson does milli and rounding rounded wrong
12
+ at(time.to_i).utc if time
13
+ end
14
+ end
15
+
16
+ def from_mongo(value)
17
+ if ::Time.try(:zone).present? && value.present?
18
+ value.in_time_zone(::Time.zone)
19
+ else
20
+ value
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+
27
+ class Time
28
+ extend MongoMapper::Extensions::Time
29
+ end
@@ -0,0 +1,44 @@
1
+ module MongoMapper
2
+ module Plugins
3
+ module Accessible
4
+ module ClassMethods
5
+ def attr_accessible(*attrs)
6
+ raise AccessibleOrProtected.new(name) if try(:protected_attributes?)
7
+ self.write_inheritable_attribute(:attr_accessible, Set.new(attrs) + (accessible_attributes || []))
8
+ end
9
+
10
+ def accessible_attributes?
11
+ !accessible_attributes.nil?
12
+ end
13
+
14
+ def accessible_attributes
15
+ self.read_inheritable_attribute(:attr_accessible)
16
+ end
17
+ end
18
+
19
+ module InstanceMethods
20
+ def assign(attrs={})
21
+ super(filter_inaccessible_attrs(attrs))
22
+ end
23
+
24
+ def update_attributes(attrs={})
25
+ super(filter_inaccessible_attrs(attrs))
26
+ end
27
+
28
+ def update_attributes!(attrs={})
29
+ super(filter_inaccessible_attrs(attrs))
30
+ end
31
+
32
+ def accessible_attributes
33
+ self.class.accessible_attributes
34
+ end
35
+
36
+ protected
37
+ def filter_inaccessible_attrs(attrs)
38
+ return attrs if accessible_attributes.blank? || attrs.blank?
39
+ attrs.dup.delete_if { |key, val| !accessible_attributes.include?(key.to_sym) }
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  module MongoMapper
2
3
  module Plugins
3
4
  module Associations
@@ -16,8 +17,8 @@ module MongoMapper
16
17
 
17
18
  def class_name
18
19
  return @class_name if defined?(@class_name)
19
-
20
- @class_name =
20
+
21
+ @class_name =
21
22
  if cn = options[:class_name]
22
23
  cn
23
24
  elsif many?
@@ -56,7 +57,7 @@ module MongoMapper
56
57
  end
57
58
 
58
59
  def embeddable?
59
- many? && klass.embeddable?
60
+ (one? || many?) && klass.embeddable?
60
61
  end
61
62
 
62
63
  def type_key_name
@@ -78,8 +79,8 @@ module MongoMapper
78
79
  # hate this, need to revisit
79
80
  def proxy_class
80
81
  return @proxy_class if defined?(@proxy_class)
81
-
82
- @proxy_class =
82
+
83
+ @proxy_class =
83
84
  if many?
84
85
  if klass.embeddable?
85
86
  polymorphic? ? ManyEmbeddedPolymorphicProxy : ManyEmbeddedProxy
@@ -95,7 +96,7 @@ module MongoMapper
95
96
  end
96
97
  end
97
98
  elsif one?
98
- OneProxy
99
+ klass.embeddable? ? OneEmbeddedProxy : OneProxy
99
100
  else
100
101
  polymorphic? ? BelongsToPolymorphicProxy : BelongsToProxy
101
102
  end
@@ -1,24 +1,23 @@
1
+ # encoding: UTF-8
1
2
  module MongoMapper
2
3
  module Plugins
3
4
  module Associations
4
5
  class BelongsToPolymorphicProxy < Proxy
5
- undef_method :object_id
6
-
7
6
  def replace(doc)
8
7
  if doc
9
8
  doc.save if doc.new?
10
9
  id, type = doc.id, doc.class.name
11
10
  end
12
11
 
13
- owner[association.foreign_key] = id
14
- owner[association.type_key_name] = type
12
+ proxy_owner[association.foreign_key] = id
13
+ proxy_owner[association.type_key_name] = type
15
14
  reset
16
15
  end
17
16
 
18
17
  protected
19
18
  def find_target
20
- return nil if association_class.nil? || owner[association.foreign_key].nil?
21
- association_class.find_by_id(owner[association.foreign_key])
19
+ return nil if association_class.nil? || proxy_owner[association.foreign_key].nil?
20
+ association_class.find_by_id(proxy_owner[association.foreign_key])
22
21
  end
23
22
 
24
23
  def association_class
@@ -1,23 +1,22 @@
1
+ # encoding: UTF-8
1
2
  module MongoMapper
2
3
  module Plugins
3
4
  module Associations
4
5
  class BelongsToProxy < Proxy
5
- undef_method :object_id
6
-
7
6
  def replace(doc)
8
7
  if doc
9
8
  doc.save if doc.new?
10
9
  id = doc.id
11
10
  end
12
11
 
13
- owner[association.foreign_key] = id
14
- reset
12
+ proxy_owner[association.foreign_key] = id
13
+ reload
15
14
  end
16
15
 
17
16
  protected
18
17
  def find_target
19
- return nil if owner[association.foreign_key].nil?
20
- klass.find_by_id(owner[association.foreign_key])
18
+ return nil if proxy_owner[association.foreign_key].nil?
19
+ klass.find_by_id(proxy_owner[association.foreign_key])
21
20
  end
22
21
  end
23
22
  end
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  module MongoMapper
2
3
  module Plugins
3
4
  module Associations
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  module MongoMapper
2
3
  module Plugins
3
4
  module Associations
@@ -31,7 +32,7 @@ module MongoMapper
31
32
 
32
33
  private
33
34
  def assign_references(*docs)
34
- docs.each { |doc| doc._parent_document = owner }
35
+ docs.each { |doc| doc._parent_document = proxy_owner }
35
36
  end
36
37
  end
37
38
  end