mongoid 1.2.8 → 1.2.9

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 (44) hide show
  1. data/Rakefile +1 -1
  2. data/VERSION +1 -1
  3. data/lib/mongoid.rb +2 -3
  4. data/lib/mongoid/associations.rb +5 -3
  5. data/lib/mongoid/associations/belongs_to_related.rb +6 -9
  6. data/lib/mongoid/associations/has_many.rb +2 -0
  7. data/lib/mongoid/associations/has_many_related.rb +10 -0
  8. data/lib/mongoid/attributes.rb +6 -1
  9. data/lib/mongoid/commands.rb +2 -10
  10. data/lib/mongoid/components.rb +11 -12
  11. data/lib/mongoid/contexts/enumerable.rb +21 -11
  12. data/lib/mongoid/contexts/mongo.rb +40 -1
  13. data/lib/mongoid/criteria.rb +3 -29
  14. data/lib/mongoid/criterion/inclusion.rb +2 -1
  15. data/lib/mongoid/document.rb +5 -6
  16. data/lib/mongoid/extensions.rb +10 -0
  17. data/lib/mongoid/extensions/big_decimal/conversions.rb +19 -0
  18. data/lib/mongoid/extensions/binary/conversions.rb +17 -0
  19. data/lib/mongoid/{caching.rb → extras.rb} +26 -3
  20. data/lib/mongoid/field.rb +20 -7
  21. data/lib/mongoid/finders.rb +10 -80
  22. data/mongoid.gemspec +15 -13
  23. data/spec/integration/mongoid/document_spec.rb +1 -1
  24. data/spec/models/person.rb +1 -0
  25. data/spec/unit/mongoid/associations/belongs_to_related_spec.rb +4 -0
  26. data/spec/unit/mongoid/associations/has_many_related_spec.rb +42 -13
  27. data/spec/unit/mongoid/associations/has_many_spec.rb +12 -7
  28. data/spec/unit/mongoid/associations_spec.rb +16 -0
  29. data/spec/unit/mongoid/attributes_spec.rb +23 -0
  30. data/spec/unit/mongoid/commands/destroy_spec.rb +3 -0
  31. data/spec/unit/mongoid/commands_spec.rb +4 -11
  32. data/spec/unit/mongoid/contexts/enumerable_spec.rb +16 -0
  33. data/spec/unit/mongoid/contexts/mongo_spec.rb +96 -0
  34. data/spec/unit/mongoid/criteria_spec.rb +11 -4
  35. data/spec/unit/mongoid/document_spec.rb +11 -0
  36. data/spec/unit/mongoid/extensions/big_decimal/conversions_spec.rb +22 -0
  37. data/spec/unit/mongoid/extensions/binary/conversions_spec.rb +22 -0
  38. data/spec/unit/mongoid/{enslavement_spec.rb → extras_spec.rb} +55 -2
  39. data/spec/unit/mongoid/field_spec.rb +62 -0
  40. data/spec/unit/mongoid/finders_spec.rb +36 -0
  41. metadata +69 -37
  42. data/HISTORY +0 -342
  43. data/lib/mongoid/enslavement.rb +0 -38
  44. data/spec/unit/mongoid/caching_spec.rb +0 -63
@@ -4,6 +4,8 @@ require "mongoid/extensions/array/aliasing"
4
4
  require "mongoid/extensions/array/assimilation"
5
5
  require "mongoid/extensions/array/conversions"
6
6
  require "mongoid/extensions/array/parentization"
7
+ require "mongoid/extensions/big_decimal/conversions"
8
+ require "mongoid/extensions/binary/conversions"
7
9
  require "mongoid/extensions/boolean/conversions"
8
10
  require "mongoid/extensions/date/conversions"
9
11
  require "mongoid/extensions/datetime/conversions"
@@ -29,6 +31,14 @@ class Array #:nodoc
29
31
  include Mongoid::Extensions::Array::Parentization
30
32
  end
31
33
 
34
+ class BigDecimal #:nodoc
35
+ extend Mongoid::Extensions::BigDecimal::Conversions
36
+ end
37
+
38
+ class Binary #:nodoc
39
+ extend Mongoid::Extensions::Binary::Conversions
40
+ end
41
+
32
42
  class Boolean #:nodoc
33
43
  extend Mongoid::Extensions::Boolean::Conversions
34
44
  end
@@ -0,0 +1,19 @@
1
+ # encoding: utf-8
2
+ require "bigdecimal"
3
+
4
+ module Mongoid #:nodoc:
5
+ module Extensions #:nodoc:
6
+ module BigDecimal #:nodoc:
7
+ module Conversions #:nodoc:
8
+ # Get the string as a +BigDecimal+
9
+ def get(value)
10
+ ::BigDecimal.new(value)
11
+ end
12
+ # Set the value in the hash as a string.
13
+ def set(value)
14
+ value.to_s
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,17 @@
1
+ # encoding: utf-8
2
+ module Mongoid #:nodoc:
3
+ module Extensions #:nodoc:
4
+ module Binary #:nodoc:
5
+ module Conversions #:nodoc:
6
+ # Get the value from the db hash.
7
+ def get(value)
8
+ value
9
+ end
10
+ # Set the value in the db hash.
11
+ def set(value)
12
+ value
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,13 +1,14 @@
1
1
  # encoding: utf-8
2
2
  module Mongoid #:nodoc:
3
- module Caching #:nodoc:
3
+ module Extras #:nodoc:
4
4
  def self.included(base)
5
5
  base.class_eval do
6
6
  extend ClassMethods
7
- class_inheritable_accessor :cached
7
+ class_inheritable_accessor :cached, :enslaved
8
8
  self.cached = false
9
+ self.enslaved = false
9
10
 
10
- delegate :cached?, :to => "self.class"
11
+ delegate :cached?, :enslaved?, :to => "self.class"
11
12
  end
12
13
  end
13
14
 
@@ -36,6 +37,28 @@ module Mongoid #:nodoc:
36
37
  def cached?
37
38
  self.cached == true
38
39
  end
40
+
41
+ # Set whether or not this documents read operations should delegate to
42
+ # the slave database by default.
43
+ #
44
+ # Example:
45
+ #
46
+ # class Person
47
+ # include Mongoid::Document
48
+ # enslave
49
+ # end
50
+ def enslave
51
+ self.enslaved = true
52
+ end
53
+
54
+ # Determines if the class is enslaved or not.
55
+ #
56
+ # Returns:
57
+ #
58
+ # True if enslaved, false if not.
59
+ def enslaved?
60
+ self.enslaved == true
61
+ end
39
62
  end
40
63
  end
41
64
  end
@@ -1,11 +1,25 @@
1
1
  # encoding: utf-8
2
2
  module Mongoid #:nodoc:
3
3
  class Field
4
+ attr_reader :name, :type
4
5
 
5
- attr_reader \
6
- :default,
7
- :name,
8
- :type
6
+ # Determine if the field is able to be accessible via a mass update.
7
+ #
8
+ # Returns:
9
+ #
10
+ # true if accessible, false if not.
11
+ def accessible?
12
+ !!@accessible
13
+ end
14
+
15
+ # Get the default value for the field.
16
+ #
17
+ # Returns:
18
+ #
19
+ # The primitive value or a copy of the default.
20
+ def default
21
+ (@default.is_a?(Array) || @default.is_a?(Hash)) ? @default.dup : @default
22
+ end
9
23
 
10
24
  # Create the new field with a name and optional additional options. Valid
11
25
  # options are :default
@@ -19,9 +33,9 @@ module Mongoid #:nodoc:
19
33
  #
20
34
  # <tt>Field.new(:score, :default => 0)</tt>
21
35
  def initialize(name, options = {})
22
- @name = name
23
- @default = options[:default]
36
+ @name, @default = name, options[:default]
24
37
  @type = options[:type] || String
38
+ @accessible = options.has_key?(:accessible) ? options[:accessible] : true
25
39
  end
26
40
 
27
41
  # Used for setting an object in the attributes hash. If nil is provided the
@@ -34,6 +48,5 @@ module Mongoid #:nodoc:
34
48
  def get(object)
35
49
  type.get(object)
36
50
  end
37
-
38
51
  end
39
52
  end
@@ -1,6 +1,16 @@
1
1
  # encoding: utf-8
2
2
  module Mongoid #:nodoc:
3
3
  module Finders #:nodoc:
4
+
5
+ # Delegate to the criteria methods that are natural for creating a new
6
+ # criteria.
7
+ [ :all_in, :any_in, :excludes, :limit, :max, :min,
8
+ :not_in, :only, :order_by, :skip, :sum, :where ].each do |name|
9
+ define_method(name) do |*args|
10
+ criteria.send(name, *args)
11
+ end
12
+ end
13
+
4
14
  # Find +Documents+ given the conditions.
5
15
  #
6
16
  # Options:
@@ -100,36 +110,6 @@ module Mongoid #:nodoc:
100
110
  find(:last, *args)
101
111
  end
102
112
 
103
- # Convenience method for returning the max value of a field.
104
- #
105
- # Options:
106
- #
107
- # field: The field to use when calculating the max.
108
- #
109
- # Example:
110
- #
111
- # <tt>Person.max(:age)</tt>
112
- #
113
- # Returns: <tt>Float</tt> max value.
114
- def max(field)
115
- criteria.max(field)
116
- end
117
-
118
- # Convenience method for returning the min value of a field.
119
- #
120
- # Options:
121
- #
122
- # field: The field to use when calculating the min.
123
- #
124
- # Example:
125
- #
126
- # <tt>Person.min(:age)</tt>
127
- #
128
- # Returns: <tt>Float</tt> min value.
129
- def min(field)
130
- criteria.min(field)
131
- end
132
-
133
113
  # Find all documents in paginated fashion given the supplied arguments.
134
114
  # If no parameters are passed just default to offset 0 and limit 20.
135
115
  #
@@ -147,56 +127,6 @@ module Mongoid #:nodoc:
147
127
  Criteria.translate(self, params).paginate
148
128
  end
149
129
 
150
- # Entry point for creating a new criteria from a Document. This will
151
- # instantiate a new +Criteria+ object with the supplied select criterion
152
- # already added to it.
153
- #
154
- # Options:
155
- #
156
- # args: A list of field names to retrict the returned fields to.
157
- #
158
- # Example:
159
- #
160
- # <tt>Person.only(:field1, :field2, :field3)</tt>
161
- #
162
- # Returns: <tt>Criteria</tt>
163
- def only(*args)
164
- criteria.only(*args)
165
- end
166
-
167
- # Convenience method for returning the sum of a specified field for all
168
- # documents in the database.
169
- #
170
- # Options:
171
- #
172
- # field: The field to use when calculating the sum.
173
- #
174
- # Example:
175
- #
176
- # <tt>Person.sum(:age)</tt>
177
- #
178
- # Returns: <tt>Float</tt> of the sum.
179
- def sum(field)
180
- criteria.sum(field)
181
- end
182
-
183
- # Entry point for creating a new criteria from a Document. This will
184
- # instantiate a new +Criteria+ object with the supplied select criterion
185
- # already added to it.
186
- #
187
- # Options:
188
- #
189
- # selector: A where criteria to initialize.
190
- #
191
- # Example:
192
- #
193
- # <tt>Person.where(:field1 => "Value")</tt>
194
- #
195
- # Returns: <tt>Criteria</tt>
196
- def where(selector = nil)
197
- criteria.where(selector)
198
- end
199
-
200
130
  protected
201
131
  # Find the first object or create/initialize it.
202
132
  def find_or(method, attrs = {})
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{mongoid}
8
- s.version = "1.2.8"
8
+ s.version = "1.2.9"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Durran Jordan"]
12
- s.date = %q{2010-02-25}
12
+ s.date = %q{2010-03-09}
13
13
  s.email = %q{durran@gmail.com}
14
14
  s.extra_rdoc_files = [
15
15
  "README.rdoc"
@@ -17,7 +17,6 @@ Gem::Specification.new do |s|
17
17
  s.files = [
18
18
  ".gitignore",
19
19
  ".watchr",
20
- "HISTORY",
21
20
  "MIT_LICENSE",
22
21
  "README.rdoc",
23
22
  "Rakefile",
@@ -35,7 +34,6 @@ Gem::Specification.new do |s|
35
34
  "lib/mongoid/associations/options.rb",
36
35
  "lib/mongoid/associations/proxy.rb",
37
36
  "lib/mongoid/attributes.rb",
38
- "lib/mongoid/caching.rb",
39
37
  "lib/mongoid/callbacks.rb",
40
38
  "lib/mongoid/collection.rb",
41
39
  "lib/mongoid/collections/cyclic_iterator.rb",
@@ -65,7 +63,6 @@ Gem::Specification.new do |s|
65
63
  "lib/mongoid/criterion/optional.rb",
66
64
  "lib/mongoid/cursor.rb",
67
65
  "lib/mongoid/document.rb",
68
- "lib/mongoid/enslavement.rb",
69
66
  "lib/mongoid/errors.rb",
70
67
  "lib/mongoid/extensions.rb",
71
68
  "lib/mongoid/extensions/array/accessors.rb",
@@ -73,6 +70,8 @@ Gem::Specification.new do |s|
73
70
  "lib/mongoid/extensions/array/assimilation.rb",
74
71
  "lib/mongoid/extensions/array/conversions.rb",
75
72
  "lib/mongoid/extensions/array/parentization.rb",
73
+ "lib/mongoid/extensions/big_decimal/conversions.rb",
74
+ "lib/mongoid/extensions/binary/conversions.rb",
76
75
  "lib/mongoid/extensions/boolean/conversions.rb",
77
76
  "lib/mongoid/extensions/date/conversions.rb",
78
77
  "lib/mongoid/extensions/datetime/conversions.rb",
@@ -90,6 +89,7 @@ Gem::Specification.new do |s|
90
89
  "lib/mongoid/extensions/string/inflections.rb",
91
90
  "lib/mongoid/extensions/symbol/inflections.rb",
92
91
  "lib/mongoid/extensions/time/conversions.rb",
92
+ "lib/mongoid/extras.rb",
93
93
  "lib/mongoid/factory.rb",
94
94
  "lib/mongoid/field.rb",
95
95
  "lib/mongoid/fields.rb",
@@ -158,7 +158,6 @@ Gem::Specification.new do |s|
158
158
  "spec/unit/mongoid/associations/options_spec.rb",
159
159
  "spec/unit/mongoid/associations_spec.rb",
160
160
  "spec/unit/mongoid/attributes_spec.rb",
161
- "spec/unit/mongoid/caching_spec.rb",
162
161
  "spec/unit/mongoid/callbacks_spec.rb",
163
162
  "spec/unit/mongoid/collection_spec.rb",
164
163
  "spec/unit/mongoid/collections/cyclic_iterator_spec.rb",
@@ -183,12 +182,13 @@ Gem::Specification.new do |s|
183
182
  "spec/unit/mongoid/criterion/optional_spec.rb",
184
183
  "spec/unit/mongoid/cursor_spec.rb",
185
184
  "spec/unit/mongoid/document_spec.rb",
186
- "spec/unit/mongoid/enslavement_spec.rb",
187
185
  "spec/unit/mongoid/errors_spec.rb",
188
186
  "spec/unit/mongoid/extensions/array/accessors_spec.rb",
189
187
  "spec/unit/mongoid/extensions/array/assimilation_spec.rb",
190
188
  "spec/unit/mongoid/extensions/array/conversions_spec.rb",
191
189
  "spec/unit/mongoid/extensions/array/parentization_spec.rb",
190
+ "spec/unit/mongoid/extensions/big_decimal/conversions_spec.rb",
191
+ "spec/unit/mongoid/extensions/binary/conversions_spec.rb",
192
192
  "spec/unit/mongoid/extensions/boolean/conversions_spec.rb",
193
193
  "spec/unit/mongoid/extensions/date/conversions_spec.rb",
194
194
  "spec/unit/mongoid/extensions/datetime/conversions_spec.rb",
@@ -206,6 +206,7 @@ Gem::Specification.new do |s|
206
206
  "spec/unit/mongoid/extensions/string/inflections_spec.rb",
207
207
  "spec/unit/mongoid/extensions/symbol/inflections_spec.rb",
208
208
  "spec/unit/mongoid/extensions/time/conversions_spec.rb",
209
+ "spec/unit/mongoid/extras_spec.rb",
209
210
  "spec/unit/mongoid/factory_spec.rb",
210
211
  "spec/unit/mongoid/field_spec.rb",
211
212
  "spec/unit/mongoid/fields_spec.rb",
@@ -235,7 +236,7 @@ Gem::Specification.new do |s|
235
236
  s.homepage = %q{http://mongoid.org}
236
237
  s.rdoc_options = ["--charset=UTF-8"]
237
238
  s.require_paths = ["lib"]
238
- s.rubygems_version = %q{1.3.5}
239
+ s.rubygems_version = %q{1.3.6}
239
240
  s.summary = %q{ODM framework for MongoDB}
240
241
  s.test_files = [
241
242
  "spec/integration/mongoid/associations_spec.rb",
@@ -278,7 +279,6 @@ Gem::Specification.new do |s|
278
279
  "spec/unit/mongoid/associations/options_spec.rb",
279
280
  "spec/unit/mongoid/associations_spec.rb",
280
281
  "spec/unit/mongoid/attributes_spec.rb",
281
- "spec/unit/mongoid/caching_spec.rb",
282
282
  "spec/unit/mongoid/callbacks_spec.rb",
283
283
  "spec/unit/mongoid/collection_spec.rb",
284
284
  "spec/unit/mongoid/collections/cyclic_iterator_spec.rb",
@@ -303,12 +303,13 @@ Gem::Specification.new do |s|
303
303
  "spec/unit/mongoid/criterion/optional_spec.rb",
304
304
  "spec/unit/mongoid/cursor_spec.rb",
305
305
  "spec/unit/mongoid/document_spec.rb",
306
- "spec/unit/mongoid/enslavement_spec.rb",
307
306
  "spec/unit/mongoid/errors_spec.rb",
308
307
  "spec/unit/mongoid/extensions/array/accessors_spec.rb",
309
308
  "spec/unit/mongoid/extensions/array/assimilation_spec.rb",
310
309
  "spec/unit/mongoid/extensions/array/conversions_spec.rb",
311
310
  "spec/unit/mongoid/extensions/array/parentization_spec.rb",
311
+ "spec/unit/mongoid/extensions/big_decimal/conversions_spec.rb",
312
+ "spec/unit/mongoid/extensions/binary/conversions_spec.rb",
312
313
  "spec/unit/mongoid/extensions/boolean/conversions_spec.rb",
313
314
  "spec/unit/mongoid/extensions/date/conversions_spec.rb",
314
315
  "spec/unit/mongoid/extensions/datetime/conversions_spec.rb",
@@ -326,6 +327,7 @@ Gem::Specification.new do |s|
326
327
  "spec/unit/mongoid/extensions/string/inflections_spec.rb",
327
328
  "spec/unit/mongoid/extensions/symbol/inflections_spec.rb",
328
329
  "spec/unit/mongoid/extensions/time/conversions_spec.rb",
330
+ "spec/unit/mongoid/extras_spec.rb",
329
331
  "spec/unit/mongoid/factory_spec.rb",
330
332
  "spec/unit/mongoid/field_spec.rb",
331
333
  "spec/unit/mongoid/fields_spec.rb",
@@ -361,14 +363,14 @@ Gem::Specification.new do |s|
361
363
  s.add_runtime_dependency(%q<activesupport>, ["<= 2.3.5"])
362
364
  s.add_runtime_dependency(%q<mongo>, [">= 0.18.3"])
363
365
  s.add_runtime_dependency(%q<durran-validatable>, [">= 2.0.1"])
364
- s.add_runtime_dependency(%q<will_paginate>, ["< 3.0.pre"])
366
+ s.add_runtime_dependency(%q<will_paginate>, ["< 2.9"])
365
367
  s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
366
368
  s.add_development_dependency(%q<mocha>, [">= 0.9.8"])
367
369
  else
368
370
  s.add_dependency(%q<activesupport>, ["<= 2.3.5"])
369
371
  s.add_dependency(%q<mongo>, [">= 0.18.3"])
370
372
  s.add_dependency(%q<durran-validatable>, [">= 2.0.1"])
371
- s.add_dependency(%q<will_paginate>, ["< 3.0.pre"])
373
+ s.add_dependency(%q<will_paginate>, ["< 2.9"])
372
374
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
373
375
  s.add_dependency(%q<mocha>, [">= 0.9.8"])
374
376
  end
@@ -376,7 +378,7 @@ Gem::Specification.new do |s|
376
378
  s.add_dependency(%q<activesupport>, ["<= 2.3.5"])
377
379
  s.add_dependency(%q<mongo>, [">= 0.18.3"])
378
380
  s.add_dependency(%q<durran-validatable>, [">= 2.0.1"])
379
- s.add_dependency(%q<will_paginate>, ["< 3.0.pre"])
381
+ s.add_dependency(%q<will_paginate>, ["< 2.9"])
380
382
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
381
383
  s.add_dependency(%q<mocha>, [">= 0.9.8"])
382
384
  end
@@ -244,7 +244,7 @@ describe Mongoid::Document do
244
244
 
245
245
  before do
246
246
  5.times do |num|
247
- Person.create(:title => "Sir", :age => num)
247
+ Person.create(:title => "Sir", :age => num, :ssn => num)
248
248
  end
249
249
  end
250
250
 
@@ -15,6 +15,7 @@ class Person
15
15
  field :score, :type => Integer
16
16
  field :blood_alcohol_content, :type => Float, :default => lambda{ 0.0 }
17
17
  field :ssn
18
+ field :owner_id, :accessible => false, :type => Integer
18
19
 
19
20
  index :age
20
21
  index :addresses
@@ -134,6 +134,10 @@ describe Mongoid::Associations::BelongsToRelated do
134
134
  Mongoid::Associations::BelongsToRelated.update(nil, @child, @options).should be_nil
135
135
  end
136
136
 
137
+ it "removes the association" do
138
+ Mongoid::Associations::BelongsToRelated.update(nil, @child, @options)
139
+ @child.person.should be_nil
140
+ end
137
141
  end
138
142
 
139
143
  end
@@ -45,16 +45,36 @@ describe Mongoid::Associations::HasManyRelated do
45
45
 
46
46
  context "when parent document has not been saved" do
47
47
 
48
- before do
49
- @parent = stub(:id => "1", :new_record? => true, :class => Person)
50
- Post.expects(:all).returns([])
51
- @association = Mongoid::Associations::HasManyRelated.new(@parent, options)
48
+ context "when appending a non mongoid object" do
49
+
50
+ before do
51
+ @parent = stub(:id => "1", :new_record? => true, :class => Person)
52
+ Post.expects(:all).returns([])
53
+ @association = Mongoid::Associations::HasManyRelated.new(@parent, options)
54
+ end
55
+
56
+ it "appends the child document" do
57
+ @child.expects(:person_id=).with(@parent.id)
58
+ @association << @child
59
+ @association.size.should == 1
60
+ end
52
61
  end
53
62
 
54
- it "appends the child document" do
55
- @child.expects(:person_id=).with(@parent.id)
56
- @association << @child
57
- @association.size.should == 1
63
+ context "when appending a mongoid document" do
64
+
65
+ before do
66
+ @criteria = mock
67
+ @parent = stub(:id => "1", :new_record? => true, :class => Person)
68
+ Post.expects(:all).returns(@criteria)
69
+ @association = Mongoid::Associations::HasManyRelated.new(@parent, options)
70
+ end
71
+
72
+ it "appends the child document" do
73
+ @criteria.expects(:entries).returns([])
74
+ @child.expects(:person_id=).with(@parent.id)
75
+ @association << @child
76
+ @association.size.should == 1
77
+ end
58
78
  end
59
79
 
60
80
  end
@@ -81,8 +101,10 @@ describe Mongoid::Associations::HasManyRelated do
81
101
  describe "#build" do
82
102
 
83
103
  before do
84
- @parent = stub(:id => "5", :class => Person)
85
- Post.expects(:all).returns([])
104
+ @criteria = mock
105
+ @criteria.expects(:entries).returns([])
106
+ @parent = stub(:id => "5", :class => Person, :new_record? => true)
107
+ Post.expects(:all).returns(@criteria)
86
108
  @association = Mongoid::Associations::HasManyRelated.new(@parent, options)
87
109
  end
88
110
 
@@ -169,18 +191,25 @@ describe Mongoid::Associations::HasManyRelated do
169
191
  describe "#create" do
170
192
 
171
193
  before do
172
- @parent = stub(:id => "5", :class => Person)
194
+ @post = mock
195
+ @parent = stub(:id => "5", :class => Person, :new_record? => true)
173
196
  Post.expects(:all).returns([])
174
- Mongoid::Commands::Save.expects(:execute)
175
197
  @association = Mongoid::Associations::HasManyRelated.new(@parent, options)
198
+ Post.expects(:instantiate).returns(@post)
176
199
  end
177
200
 
178
201
  it "builds and saves the new object" do
202
+ @post.expects(:run_callbacks).with(:before_create)
203
+ @post.expects(:save).returns(true)
204
+ @post.expects(:run_callbacks).with(:after_create)
179
205
  @association.create(:title => "Sassy")
180
206
  end
181
207
 
182
208
  it "returns the new object" do
183
- @association.create(:title => "Sassy").should be_a_kind_of(Post)
209
+ @post.expects(:run_callbacks).with(:before_create)
210
+ @post.expects(:save).returns(true)
211
+ @post.expects(:run_callbacks).with(:after_create)
212
+ @association.create(:title => "Sassy").should == @post
184
213
  end
185
214
 
186
215
  end