mongoid-pre 2.0.0.beta1

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 (246) hide show
  1. data/.gitignore +6 -0
  2. data/.watchr +24 -0
  3. data/MIT_LICENSE +20 -0
  4. data/README.rdoc +49 -0
  5. data/Rakefile +52 -0
  6. data/VERSION +1 -0
  7. data/caliper.yml +4 -0
  8. data/lib/mongoid.rb +135 -0
  9. data/lib/mongoid/associations.rb +263 -0
  10. data/lib/mongoid/associations/belongs_to_related.rb +59 -0
  11. data/lib/mongoid/associations/embedded_in.rb +64 -0
  12. data/lib/mongoid/associations/embeds_many.rb +193 -0
  13. data/lib/mongoid/associations/embeds_one.rb +95 -0
  14. data/lib/mongoid/associations/has_many_related.rb +133 -0
  15. data/lib/mongoid/associations/has_one_related.rb +81 -0
  16. data/lib/mongoid/associations/meta_data.rb +28 -0
  17. data/lib/mongoid/associations/options.rb +52 -0
  18. data/lib/mongoid/associations/proxy.rb +31 -0
  19. data/lib/mongoid/attributes.rb +185 -0
  20. data/lib/mongoid/callbacks.rb +18 -0
  21. data/lib/mongoid/collection.rb +119 -0
  22. data/lib/mongoid/collections/cyclic_iterator.rb +34 -0
  23. data/lib/mongoid/collections/master.rb +28 -0
  24. data/lib/mongoid/collections/mimic.rb +46 -0
  25. data/lib/mongoid/collections/operations.rb +41 -0
  26. data/lib/mongoid/collections/slaves.rb +44 -0
  27. data/lib/mongoid/commands.rb +161 -0
  28. data/lib/mongoid/commands/create.rb +19 -0
  29. data/lib/mongoid/commands/delete.rb +16 -0
  30. data/lib/mongoid/commands/delete_all.rb +25 -0
  31. data/lib/mongoid/commands/deletion.rb +18 -0
  32. data/lib/mongoid/commands/destroy.rb +17 -0
  33. data/lib/mongoid/commands/destroy_all.rb +25 -0
  34. data/lib/mongoid/commands/save.rb +30 -0
  35. data/lib/mongoid/components.rb +31 -0
  36. data/lib/mongoid/config.rb +86 -0
  37. data/lib/mongoid/contexts.rb +25 -0
  38. data/lib/mongoid/contexts/enumerable.rb +151 -0
  39. data/lib/mongoid/contexts/ids.rb +25 -0
  40. data/lib/mongoid/contexts/mongo.rb +285 -0
  41. data/lib/mongoid/contexts/paging.rb +42 -0
  42. data/lib/mongoid/criteria.rb +239 -0
  43. data/lib/mongoid/criterion/complex.rb +21 -0
  44. data/lib/mongoid/criterion/exclusion.rb +65 -0
  45. data/lib/mongoid/criterion/inclusion.rb +93 -0
  46. data/lib/mongoid/criterion/optional.rb +136 -0
  47. data/lib/mongoid/cursor.rb +82 -0
  48. data/lib/mongoid/deprecation.rb +22 -0
  49. data/lib/mongoid/dirty.rb +203 -0
  50. data/lib/mongoid/document.rb +306 -0
  51. data/lib/mongoid/errors.rb +77 -0
  52. data/lib/mongoid/extensions.rb +99 -0
  53. data/lib/mongoid/extensions/array/accessors.rb +17 -0
  54. data/lib/mongoid/extensions/array/aliasing.rb +4 -0
  55. data/lib/mongoid/extensions/array/assimilation.rb +26 -0
  56. data/lib/mongoid/extensions/array/conversions.rb +27 -0
  57. data/lib/mongoid/extensions/array/parentization.rb +13 -0
  58. data/lib/mongoid/extensions/big_decimal/conversions.rb +19 -0
  59. data/lib/mongoid/extensions/binary/conversions.rb +17 -0
  60. data/lib/mongoid/extensions/boolean/conversions.rb +16 -0
  61. data/lib/mongoid/extensions/date/conversions.rb +15 -0
  62. data/lib/mongoid/extensions/datetime/conversions.rb +17 -0
  63. data/lib/mongoid/extensions/float/conversions.rb +16 -0
  64. data/lib/mongoid/extensions/hash/accessors.rb +38 -0
  65. data/lib/mongoid/extensions/hash/assimilation.rb +30 -0
  66. data/lib/mongoid/extensions/hash/conversions.rb +15 -0
  67. data/lib/mongoid/extensions/hash/criteria_helpers.rb +20 -0
  68. data/lib/mongoid/extensions/hash/scoping.rb +12 -0
  69. data/lib/mongoid/extensions/integer/conversions.rb +16 -0
  70. data/lib/mongoid/extensions/nil/assimilation.rb +13 -0
  71. data/lib/mongoid/extensions/object/conversions.rb +27 -0
  72. data/lib/mongoid/extensions/objectid/conversions.rb +15 -0
  73. data/lib/mongoid/extensions/proc/scoping.rb +12 -0
  74. data/lib/mongoid/extensions/string/conversions.rb +15 -0
  75. data/lib/mongoid/extensions/string/inflections.rb +97 -0
  76. data/lib/mongoid/extensions/symbol/inflections.rb +36 -0
  77. data/lib/mongoid/extensions/time/conversions.rb +18 -0
  78. data/lib/mongoid/extras.rb +61 -0
  79. data/lib/mongoid/factory.rb +19 -0
  80. data/lib/mongoid/field.rb +52 -0
  81. data/lib/mongoid/fields.rb +62 -0
  82. data/lib/mongoid/finders.rb +136 -0
  83. data/lib/mongoid/identity.rb +39 -0
  84. data/lib/mongoid/indexes.rb +27 -0
  85. data/lib/mongoid/javascript.rb +21 -0
  86. data/lib/mongoid/javascript/functions.yml +37 -0
  87. data/lib/mongoid/matchers.rb +36 -0
  88. data/lib/mongoid/matchers/all.rb +11 -0
  89. data/lib/mongoid/matchers/default.rb +26 -0
  90. data/lib/mongoid/matchers/exists.rb +13 -0
  91. data/lib/mongoid/matchers/gt.rb +11 -0
  92. data/lib/mongoid/matchers/gte.rb +11 -0
  93. data/lib/mongoid/matchers/in.rb +11 -0
  94. data/lib/mongoid/matchers/lt.rb +11 -0
  95. data/lib/mongoid/matchers/lte.rb +11 -0
  96. data/lib/mongoid/matchers/ne.rb +11 -0
  97. data/lib/mongoid/matchers/nin.rb +11 -0
  98. data/lib/mongoid/matchers/size.rb +11 -0
  99. data/lib/mongoid/memoization.rb +27 -0
  100. data/lib/mongoid/named_scope.rb +42 -0
  101. data/lib/mongoid/observable.rb +30 -0
  102. data/lib/mongoid/paths.rb +54 -0
  103. data/lib/mongoid/persistence.rb +27 -0
  104. data/lib/mongoid/persistence/command.rb +20 -0
  105. data/lib/mongoid/persistence/insert.rb +71 -0
  106. data/lib/mongoid/persistence/update.rb +78 -0
  107. data/lib/mongoid/scope.rb +75 -0
  108. data/lib/mongoid/state.rb +32 -0
  109. data/lib/mongoid/timestamps.rb +27 -0
  110. data/lib/mongoid/validations.rb +51 -0
  111. data/lib/mongoid/validations/associated.rb +32 -0
  112. data/lib/mongoid/validations/locale/en.yml +4 -0
  113. data/lib/mongoid/validations/uniqueness.rb +22 -0
  114. data/lib/mongoid/versioning.rb +26 -0
  115. data/mongoid.gemspec +413 -0
  116. data/perf/benchmark.rb +77 -0
  117. data/spec/integration/mongoid/associations_spec.rb +340 -0
  118. data/spec/integration/mongoid/attributes_spec.rb +22 -0
  119. data/spec/integration/mongoid/commands_spec.rb +230 -0
  120. data/spec/integration/mongoid/contexts/enumerable_spec.rb +33 -0
  121. data/spec/integration/mongoid/criteria_spec.rb +272 -0
  122. data/spec/integration/mongoid/dirty_spec.rb +70 -0
  123. data/spec/integration/mongoid/document_spec.rb +650 -0
  124. data/spec/integration/mongoid/extensions_spec.rb +22 -0
  125. data/spec/integration/mongoid/finders_spec.rb +119 -0
  126. data/spec/integration/mongoid/inheritance_spec.rb +137 -0
  127. data/spec/integration/mongoid/named_scope_spec.rb +46 -0
  128. data/spec/integration/mongoid/persistence/update_spec.rb +46 -0
  129. data/spec/models/address.rb +39 -0
  130. data/spec/models/animal.rb +6 -0
  131. data/spec/models/callbacks.rb +18 -0
  132. data/spec/models/comment.rb +8 -0
  133. data/spec/models/country_code.rb +6 -0
  134. data/spec/models/employer.rb +5 -0
  135. data/spec/models/game.rb +7 -0
  136. data/spec/models/inheritance.rb +56 -0
  137. data/spec/models/location.rb +5 -0
  138. data/spec/models/mixed_drink.rb +4 -0
  139. data/spec/models/name.rb +13 -0
  140. data/spec/models/namespacing.rb +11 -0
  141. data/spec/models/patient.rb +6 -0
  142. data/spec/models/person.rb +99 -0
  143. data/spec/models/pet.rb +7 -0
  144. data/spec/models/pet_owner.rb +6 -0
  145. data/spec/models/phone.rb +7 -0
  146. data/spec/models/post.rb +15 -0
  147. data/spec/models/translation.rb +5 -0
  148. data/spec/models/vet_visit.rb +5 -0
  149. data/spec/spec.opts +3 -0
  150. data/spec/spec_helper.rb +31 -0
  151. data/spec/unit/mongoid/associations/belongs_to_related_spec.rb +145 -0
  152. data/spec/unit/mongoid/associations/embedded_in_spec.rb +193 -0
  153. data/spec/unit/mongoid/associations/embeds_many_spec.rb +516 -0
  154. data/spec/unit/mongoid/associations/embeds_one_spec.rb +282 -0
  155. data/spec/unit/mongoid/associations/has_many_related_spec.rb +418 -0
  156. data/spec/unit/mongoid/associations/has_one_related_spec.rb +179 -0
  157. data/spec/unit/mongoid/associations/meta_data_spec.rb +88 -0
  158. data/spec/unit/mongoid/associations/options_spec.rb +192 -0
  159. data/spec/unit/mongoid/associations_spec.rb +595 -0
  160. data/spec/unit/mongoid/attributes_spec.rb +507 -0
  161. data/spec/unit/mongoid/callbacks_spec.rb +55 -0
  162. data/spec/unit/mongoid/collection_spec.rb +187 -0
  163. data/spec/unit/mongoid/collections/cyclic_iterator_spec.rb +75 -0
  164. data/spec/unit/mongoid/collections/master_spec.rb +41 -0
  165. data/spec/unit/mongoid/collections/mimic_spec.rb +43 -0
  166. data/spec/unit/mongoid/collections/slaves_spec.rb +81 -0
  167. data/spec/unit/mongoid/commands/create_spec.rb +31 -0
  168. data/spec/unit/mongoid/commands/delete_all_spec.rb +59 -0
  169. data/spec/unit/mongoid/commands/delete_spec.rb +38 -0
  170. data/spec/unit/mongoid/commands/destroy_all_spec.rb +21 -0
  171. data/spec/unit/mongoid/commands/destroy_spec.rb +51 -0
  172. data/spec/unit/mongoid/commands/save_spec.rb +107 -0
  173. data/spec/unit/mongoid/commands_spec.rb +270 -0
  174. data/spec/unit/mongoid/config_spec.rb +176 -0
  175. data/spec/unit/mongoid/contexts/enumerable_spec.rb +421 -0
  176. data/spec/unit/mongoid/contexts/mongo_spec.rb +682 -0
  177. data/spec/unit/mongoid/contexts_spec.rb +25 -0
  178. data/spec/unit/mongoid/criteria_spec.rb +824 -0
  179. data/spec/unit/mongoid/criterion/complex_spec.rb +19 -0
  180. data/spec/unit/mongoid/criterion/exclusion_spec.rb +91 -0
  181. data/spec/unit/mongoid/criterion/inclusion_spec.rb +219 -0
  182. data/spec/unit/mongoid/criterion/optional_spec.rb +319 -0
  183. data/spec/unit/mongoid/cursor_spec.rb +74 -0
  184. data/spec/unit/mongoid/deprecation_spec.rb +24 -0
  185. data/spec/unit/mongoid/dirty_spec.rb +286 -0
  186. data/spec/unit/mongoid/document_spec.rb +818 -0
  187. data/spec/unit/mongoid/errors_spec.rb +103 -0
  188. data/spec/unit/mongoid/extensions/array/accessors_spec.rb +50 -0
  189. data/spec/unit/mongoid/extensions/array/assimilation_spec.rb +24 -0
  190. data/spec/unit/mongoid/extensions/array/conversions_spec.rb +35 -0
  191. data/spec/unit/mongoid/extensions/array/parentization_spec.rb +20 -0
  192. data/spec/unit/mongoid/extensions/big_decimal/conversions_spec.rb +22 -0
  193. data/spec/unit/mongoid/extensions/binary/conversions_spec.rb +22 -0
  194. data/spec/unit/mongoid/extensions/boolean/conversions_spec.rb +49 -0
  195. data/spec/unit/mongoid/extensions/date/conversions_spec.rb +102 -0
  196. data/spec/unit/mongoid/extensions/datetime/conversions_spec.rb +67 -0
  197. data/spec/unit/mongoid/extensions/float/conversions_spec.rb +61 -0
  198. data/spec/unit/mongoid/extensions/hash/accessors_spec.rb +184 -0
  199. data/spec/unit/mongoid/extensions/hash/assimilation_spec.rb +46 -0
  200. data/spec/unit/mongoid/extensions/hash/conversions_spec.rb +21 -0
  201. data/spec/unit/mongoid/extensions/hash/criteria_helpers_spec.rb +17 -0
  202. data/spec/unit/mongoid/extensions/hash/scoping_spec.rb +14 -0
  203. data/spec/unit/mongoid/extensions/integer/conversions_spec.rb +61 -0
  204. data/spec/unit/mongoid/extensions/nil/assimilation_spec.rb +24 -0
  205. data/spec/unit/mongoid/extensions/object/conversions_spec.rb +57 -0
  206. data/spec/unit/mongoid/extensions/proc/scoping_spec.rb +34 -0
  207. data/spec/unit/mongoid/extensions/string/conversions_spec.rb +17 -0
  208. data/spec/unit/mongoid/extensions/string/inflections_spec.rb +208 -0
  209. data/spec/unit/mongoid/extensions/symbol/inflections_spec.rb +91 -0
  210. data/spec/unit/mongoid/extensions/time/conversions_spec.rb +70 -0
  211. data/spec/unit/mongoid/extras_spec.rb +102 -0
  212. data/spec/unit/mongoid/factory_spec.rb +31 -0
  213. data/spec/unit/mongoid/field_spec.rb +143 -0
  214. data/spec/unit/mongoid/fields_spec.rb +181 -0
  215. data/spec/unit/mongoid/finders_spec.rb +404 -0
  216. data/spec/unit/mongoid/identity_spec.rb +109 -0
  217. data/spec/unit/mongoid/indexes_spec.rb +93 -0
  218. data/spec/unit/mongoid/javascript_spec.rb +48 -0
  219. data/spec/unit/mongoid/matchers/all_spec.rb +27 -0
  220. data/spec/unit/mongoid/matchers/default_spec.rb +27 -0
  221. data/spec/unit/mongoid/matchers/exists_spec.rb +56 -0
  222. data/spec/unit/mongoid/matchers/gt_spec.rb +39 -0
  223. data/spec/unit/mongoid/matchers/gte_spec.rb +49 -0
  224. data/spec/unit/mongoid/matchers/in_spec.rb +27 -0
  225. data/spec/unit/mongoid/matchers/lt_spec.rb +39 -0
  226. data/spec/unit/mongoid/matchers/lte_spec.rb +49 -0
  227. data/spec/unit/mongoid/matchers/ne_spec.rb +27 -0
  228. data/spec/unit/mongoid/matchers/nin_spec.rb +27 -0
  229. data/spec/unit/mongoid/matchers/size_spec.rb +27 -0
  230. data/spec/unit/mongoid/matchers_spec.rb +329 -0
  231. data/spec/unit/mongoid/memoization_spec.rb +75 -0
  232. data/spec/unit/mongoid/named_scope_spec.rb +123 -0
  233. data/spec/unit/mongoid/observable_spec.rb +46 -0
  234. data/spec/unit/mongoid/paths_spec.rb +124 -0
  235. data/spec/unit/mongoid/persistence/insert_spec.rb +175 -0
  236. data/spec/unit/mongoid/persistence/update_spec.rb +148 -0
  237. data/spec/unit/mongoid/persistence_spec.rb +40 -0
  238. data/spec/unit/mongoid/scope_spec.rb +240 -0
  239. data/spec/unit/mongoid/state_spec.rb +83 -0
  240. data/spec/unit/mongoid/timestamps_spec.rb +25 -0
  241. data/spec/unit/mongoid/validations/associated_spec.rb +103 -0
  242. data/spec/unit/mongoid/validations/uniqueness_spec.rb +47 -0
  243. data/spec/unit/mongoid/validations_spec.rb +190 -0
  244. data/spec/unit/mongoid/versioning_spec.rb +41 -0
  245. data/spec/unit/mongoid_spec.rb +46 -0
  246. metadata +476 -0
@@ -0,0 +1,6 @@
1
+ class CountryCode
2
+ include Mongoid::Document
3
+ field :code, :type => Integer
4
+ key :code
5
+ embedded_in :phone_number, :inverse_of => :country_codes
6
+ end
@@ -0,0 +1,5 @@
1
+ class Employer
2
+ def id
3
+ "1"
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ class Game
2
+ include Mongoid::Document
3
+ field :high_score, :default => 500
4
+ field :score, :type => Integer, :default => 0
5
+ belongs_to_related :person
6
+ enslave and cache
7
+ end
@@ -0,0 +1,56 @@
1
+ class Canvas
2
+ include Mongoid::Document
3
+ field :name
4
+ embeds_many :shapes
5
+ embeds_one :writer
6
+
7
+ def render
8
+ shapes.each { |shape| render }
9
+ end
10
+ end
11
+
12
+ class Browser < Canvas
13
+ field :version, :type => Integer
14
+ def render; end
15
+ end
16
+
17
+ class Firefox < Browser
18
+ field :user_agent
19
+ def render; end
20
+ end
21
+
22
+ class Shape
23
+ include Mongoid::Document
24
+ field :x, :type => Integer, :default => 0
25
+ field :y, :type => Integer, :default => 0
26
+
27
+ embedded_in :canvas, :inverse_of => :shapes
28
+
29
+ def render; end
30
+ end
31
+
32
+ class Square < Shape
33
+ field :width, :type => Integer, :default => 0
34
+ field :height, :type => Integer, :default => 0
35
+ end
36
+
37
+ class Circle < Shape
38
+ field :radius, :type => Integer, :default => 0
39
+ end
40
+
41
+ class Writer
42
+ include Mongoid::Document
43
+ field :speed, :type => Integer, :default => 0
44
+
45
+ embedded_in :canvas, :inverse_of => :writer
46
+
47
+ def write; end
48
+ end
49
+
50
+ class HtmlWriter < Writer
51
+ def write; end
52
+ end
53
+
54
+ class PdfWriter < Writer
55
+ def write; end
56
+ end
@@ -0,0 +1,5 @@
1
+ class Location
2
+ include Mongoid::Document
3
+ field :name
4
+ embedded_in :address, :inverse_of => :locations
5
+ end
@@ -0,0 +1,4 @@
1
+ class MixedDrink
2
+ include Mongoid::Document
3
+ field :name
4
+ end
@@ -0,0 +1,13 @@
1
+ class Name
2
+ include Mongoid::Document
3
+ field :first_name
4
+ field :last_name
5
+ field :parent_title
6
+ key :first_name, :last_name
7
+ embeds_many :translations
8
+ embedded_in :person, :inverse_of => :name
9
+
10
+ def set_parent=(set = false)
11
+ self.parent_title = person.title if set
12
+ end
13
+ end
@@ -0,0 +1,11 @@
1
+ module Medical
2
+ class Patient
3
+ include Mongoid::Document
4
+ field :name
5
+ embeds_many :prescriptions, :class_name => "Medical::Prescription"
6
+ end
7
+ class Prescription
8
+ include Mongoid::Document
9
+ field :name
10
+ end
11
+ end
@@ -0,0 +1,6 @@
1
+ class Patient
2
+ include Mongoid::Document
3
+ field :title
4
+ store_in :inpatient
5
+ embeds_many :addresses
6
+ end
@@ -0,0 +1,99 @@
1
+ class Person
2
+ include Mongoid::Document
3
+ include Mongoid::Timestamps
4
+
5
+ field :title
6
+ field :terms, :type => Boolean
7
+ field :pets, :type => Boolean, :default => false
8
+ field :age, :type => Integer, :default => 100
9
+ field :dob, :type => Date
10
+ field :mixed_drink, :type => MixedDrink
11
+ field :employer_id
12
+ field :lunch_time, :type => Time
13
+ field :aliases, :type => Array
14
+ field :map, :type => Hash
15
+ field :score, :type => Integer
16
+ field :blood_alcohol_content, :type => Float, :default => lambda{ 0.0 }
17
+ field :ssn
18
+ field :owner_id, :accessible => false, :type => Integer
19
+
20
+ index :age
21
+ index :addresses
22
+ index :dob
23
+ index :name
24
+ index :title
25
+ index :ssn, :unique => true
26
+
27
+ attr_reader :rescored
28
+
29
+ embeds_many :addresses do
30
+ def extension
31
+ "Testing"
32
+ end
33
+ def find_by_street(street)
34
+ @target.select { |doc| doc.street == street }
35
+ end
36
+ end
37
+
38
+ embeds_many :phone_numbers, :class_name => "Phone"
39
+
40
+ embeds_one :name do
41
+ def extension
42
+ "Testing"
43
+ end
44
+ def dawkins?
45
+ first_name == "Richard" && last_name == "Dawkins"
46
+ end
47
+ end
48
+
49
+ embeds_one :pet, :class_name => "Animal"
50
+
51
+ accepts_nested_attributes_for :addresses, :reject_if => lambda { |attrs| attrs["street"].blank? }
52
+ accepts_nested_attributes_for :name
53
+
54
+ has_one_related :game do
55
+ def extension
56
+ "Testing"
57
+ end
58
+ end
59
+
60
+ has_many_related :posts do
61
+ def extension
62
+ "Testing"
63
+ end
64
+ end
65
+
66
+ def score_with_rescoring=(score)
67
+ @rescored = score.to_i + 20
68
+ self.score_without_rescoring = score
69
+ end
70
+
71
+ alias_method_chain :score=, :rescoring
72
+
73
+ def update_addresses
74
+ addresses.each do |address|
75
+ address.street = "Updated Address"
76
+ end
77
+ end
78
+
79
+ def employer=(emp)
80
+ self.employer_id = emp.id
81
+ end
82
+
83
+ class << self
84
+ def accepted
85
+ criteria.where(:terms => true)
86
+ end
87
+ def knight
88
+ criteria.where(:title => "Sir")
89
+ end
90
+ def old
91
+ criteria.where(:age => { "$gt" => 50 })
92
+ end
93
+ end
94
+
95
+ end
96
+
97
+ class Doctor < Person
98
+ field :specialty
99
+ end
@@ -0,0 +1,7 @@
1
+ class Pet
2
+ include Mongoid::Document
3
+ field :name
4
+ field :weight, :type => Float, :default => 0.0
5
+ embeds_many :vet_visits
6
+ embedded_in :pet_owner, :inverse_of => :pet
7
+ end
@@ -0,0 +1,6 @@
1
+ class PetOwner
2
+ include Mongoid::Document
3
+ field :title
4
+ embeds_one :pet
5
+ embeds_one :address
6
+ end
@@ -0,0 +1,7 @@
1
+ class Phone
2
+ include Mongoid::Document
3
+ field :number
4
+ key :number
5
+ embeds_one :country_code
6
+ embedded_in :person, :inverse_of => :phone_numbers
7
+ end
@@ -0,0 +1,15 @@
1
+ class Post
2
+ include Mongoid::Document
3
+ include Mongoid::Versioning
4
+ include Mongoid::Timestamps
5
+ field :title
6
+ belongs_to_related :person
7
+
8
+ named_scope :recent, where(:created_at => { "$lt" => Time.now, "$gt" => 30.days.ago })
9
+
10
+ class << self
11
+ def old
12
+ where(:created_at => { "$lt" => 30.days.ago })
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,5 @@
1
+ class Translation
2
+ include Mongoid::Document
3
+ field :language
4
+ embedded_in :name, :inverse_of => :translations
5
+ end
@@ -0,0 +1,5 @@
1
+ class VetVisit
2
+ include Mongoid::Document
3
+ field :date, :type => Date
4
+ embedded_in :pet, :inverse_of => :vet_visits
5
+ end
@@ -0,0 +1,3 @@
1
+ --colour
2
+ --format nested
3
+ --drb
@@ -0,0 +1,31 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
3
+
4
+ MODELS = File.join(File.dirname(__FILE__), "models")
5
+ $LOAD_PATH.unshift(MODELS)
6
+
7
+ require 'rubygems'
8
+
9
+ gem "mocha", ">= 0.9.8"
10
+
11
+ require "mongoid"
12
+ require "mocha"
13
+ require "spec"
14
+
15
+ Mongoid.configure do |config|
16
+ name = "mongoid_test"
17
+ host = "localhost"
18
+ config.master = Mongo::Connection.new.db(name)
19
+ # config.slaves = [
20
+ # Mongo::Connection.new(host, 27018, :slave_ok => true).db(name)
21
+ # ]
22
+ end
23
+
24
+ Dir[ File.join(MODELS, "*.rb") ].sort.each { |file| require File.basename(file) }
25
+
26
+ Spec::Runner.configure do |config|
27
+ config.mock_with :mocha
28
+ config.after :suite do
29
+ Mongoid.master.collections.each(&:drop)
30
+ end
31
+ end
@@ -0,0 +1,145 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Associations::BelongsToRelated do
4
+
5
+ describe ".initialize" do
6
+
7
+ context "when related id has been set" do
8
+
9
+ before do
10
+ @document = stub(:person_id => "5")
11
+ @options = Mongoid::Associations::Options.new(:name => :person)
12
+ @related = stub
13
+ end
14
+
15
+ it "finds the object by id" do
16
+ Person.expects(:find).with(@document.person_id).returns(@related)
17
+ association = Mongoid::Associations::BelongsToRelated.new(@document, "5", @options)
18
+ association.should == @related
19
+ end
20
+
21
+ end
22
+
23
+ context "when options have an extension" do
24
+
25
+ before do
26
+ @document = stub(:person_id => "5")
27
+ @block = Proc.new {
28
+ def extension
29
+ "Testing"
30
+ end
31
+ }
32
+ @options = Mongoid::Associations::Options.new(:name => :person, :extend => @block)
33
+ @related = stub
34
+ Person.expects(:find).with(@document.person_id).returns(@related)
35
+ @association = Mongoid::Associations::BelongsToRelated.new(@document, "5", @options)
36
+ end
37
+
38
+ it "adds the extension module" do
39
+ @association.extension.should == "Testing"
40
+ end
41
+
42
+ end
43
+
44
+ end
45
+
46
+ describe ".instantiate" do
47
+
48
+ context "when foreign key is not nil" do
49
+
50
+ before do
51
+ @document = stub(:person_id => "5")
52
+ @options = Mongoid::Associations::Options.new(:name => :person)
53
+ end
54
+
55
+ it "delegates to new" do
56
+ Mongoid::Associations::BelongsToRelated.expects(:new).with(@document, "5", @options, nil)
57
+ Mongoid::Associations::BelongsToRelated.instantiate(@document, @options)
58
+ end
59
+
60
+ end
61
+
62
+ context "when foreign key is nil" do
63
+
64
+ before do
65
+ @document = stub(:person_id => nil)
66
+ @options = Mongoid::Associations::Options.new(:name => :person)
67
+ end
68
+
69
+ it "returns nil" do
70
+ Mongoid::Associations::BelongsToRelated.instantiate(@document, @options).should be_nil
71
+ end
72
+
73
+ end
74
+
75
+ end
76
+
77
+ describe "#method_missing" do
78
+
79
+ before do
80
+ @person = Person.new(:title => "Mr")
81
+ @document = stub(:person_id => "5")
82
+ @options = Mongoid::Associations::Options.new(:name => :person)
83
+ Person.expects(:find).with(@document.person_id).returns(@person)
84
+ @association = Mongoid::Associations::BelongsToRelated.new(@document, "5", @options)
85
+ end
86
+
87
+ context "when getting values" do
88
+
89
+ it "delegates to the document" do
90
+ @association.title.should == "Mr"
91
+ end
92
+
93
+ end
94
+
95
+ context "when setting values" do
96
+
97
+ it "delegates to the document" do
98
+ @association.title = "Sir"
99
+ @association.title.should == "Sir"
100
+ end
101
+
102
+ end
103
+
104
+ end
105
+
106
+ describe ".macro" do
107
+
108
+ it "returns :belongs_to_related" do
109
+ Mongoid::Associations::BelongsToRelated.macro.should == :belongs_to_related
110
+ end
111
+
112
+ end
113
+
114
+ describe ".update" do
115
+
116
+ before do
117
+ @related = stub(:id => "5")
118
+ @child = Game.new
119
+ @options = Mongoid::Associations::Options.new(:name => :person)
120
+ @association = Mongoid::Associations::BelongsToRelated.update(@related, @child, @options)
121
+ end
122
+
123
+ it "sets the related object id on the parent" do
124
+ @child.person_id.should == "5"
125
+ end
126
+
127
+ it "returns the proxy" do
128
+ @association.target.should == @related
129
+ end
130
+
131
+ context "when target is nil" do
132
+
133
+ it "returns nil" do
134
+ Mongoid::Associations::BelongsToRelated.update(nil, @child, @options).should be_nil
135
+ end
136
+
137
+ it "removes the association" do
138
+ Mongoid::Associations::BelongsToRelated.update(nil, @child, @options)
139
+ @child.person.should be_nil
140
+ end
141
+ end
142
+
143
+ end
144
+
145
+ end