mongoid 0.7.0 → 0.7.1
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.
- data/VERSION +1 -1
- data/lib/mongoid/associations.rb +1 -1
- data/lib/mongoid/associations/belongs_to.rb +5 -2
- data/lib/mongoid/associations/has_many.rb +6 -1
- data/lib/mongoid/associations/has_one.rb +6 -1
- data/lib/mongoid/attributes.rb +5 -5
- data/lib/mongoid/criteria.rb +3 -3
- data/lib/mongoid/document.rb +22 -2
- data/lib/mongoid/extensions.rb +0 -2
- data/mongoid.gemspec +2 -5
- data/spec/integration/mongoid/document_spec.rb +2 -2
- data/spec/spec_helper.rb +12 -1
- data/spec/unit/mongoid/associations/has_many_spec.rb +2 -2
- data/spec/unit/mongoid/attributes_spec.rb +14 -0
- data/spec/unit/mongoid/document_spec.rb +31 -4
- data/spec/unit/mongoid/extensions/array/parentization_spec.rb +1 -3
- metadata +2 -5
- data/lib/mongoid/extensions/object/parentization.rb +0 -14
- data/spec/unit/mongoid/extensions/object/parentization_spec.rb +0 -19
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.7.
|
1
|
+
0.7.1
|
data/lib/mongoid/associations.rb
CHANGED
@@ -21,7 +21,7 @@ module Mongoid # :nodoc:
|
|
21
21
|
|
22
22
|
module ClassMethods
|
23
23
|
def associations
|
24
|
-
@associations ||=
|
24
|
+
@associations ||= {}.with_indifferent_access
|
25
25
|
end
|
26
26
|
# Adds the association back to the parent document. This macro is
|
27
27
|
# necessary to set the references from the child back to the parent
|
@@ -28,8 +28,11 @@ module Mongoid #:nodoc:
|
|
28
28
|
def update(parent, child, name, options = {})
|
29
29
|
name = child.class.name.demodulize.downcase
|
30
30
|
has_one = parent.associations[name]
|
31
|
-
|
32
|
-
|
31
|
+
if has_one
|
32
|
+
child.parentize(parent, name)
|
33
|
+
else
|
34
|
+
child.parentize(parent, name.tableize)
|
35
|
+
end
|
33
36
|
child.notify
|
34
37
|
parent
|
35
38
|
end
|
@@ -66,7 +66,7 @@ module Mongoid #:nodoc:
|
|
66
66
|
@klass = class_name ? class_name.constantize : @association_name.to_s.classify.constantize
|
67
67
|
attributes = document.attributes[@association_name]
|
68
68
|
@documents = attributes ? attributes.collect do |attribute|
|
69
|
-
child = @klass.
|
69
|
+
child = @klass.instantiate(attribute)
|
70
70
|
child.parentize(@parent, @association_name)
|
71
71
|
child
|
72
72
|
end : []
|
@@ -79,7 +79,12 @@ module Mongoid #:nodoc:
|
|
79
79
|
# and setting up the parentization.
|
80
80
|
def update(children, parent, name, options = {})
|
81
81
|
parent.attributes.delete(name)
|
82
|
+
class_name = options[:class_name]
|
83
|
+
klass = class_name ? class_name.constantize : name.to_s.classify.constantize
|
82
84
|
children.each do |child|
|
85
|
+
unless child.respond_to?(:parentize)
|
86
|
+
child = klass.new(child)
|
87
|
+
end
|
83
88
|
child.parentize(parent, name)
|
84
89
|
child.notify
|
85
90
|
end
|
@@ -15,7 +15,7 @@ module Mongoid #:nodoc:
|
|
15
15
|
class_name = options[:class_name]
|
16
16
|
klass = class_name ? class_name.constantize : name.to_s.camelize.constantize
|
17
17
|
attributes = document.attributes[name]
|
18
|
-
@document = klass.
|
18
|
+
@document = klass.instantiate(attributes || {})
|
19
19
|
@document.parentize(document, name)
|
20
20
|
decorate!
|
21
21
|
end
|
@@ -24,6 +24,11 @@ module Mongoid #:nodoc:
|
|
24
24
|
# Perform an update of the relationship of the parent and child. This
|
25
25
|
# is initialized by setting the has_one to the supplied child.
|
26
26
|
def update(child, parent, name, options = {})
|
27
|
+
unless child.respond_to?(:parentize)
|
28
|
+
class_name = options[:class_name]
|
29
|
+
klass = class_name ? class_name.constantize : name.to_s.camelize.constantize
|
30
|
+
child = klass.new(child)
|
31
|
+
end
|
27
32
|
child.parentize(parent, name)
|
28
33
|
child.notify
|
29
34
|
child
|
data/lib/mongoid/attributes.rb
CHANGED
@@ -2,10 +2,10 @@ module Mongoid #:nodoc:
|
|
2
2
|
module Attributes #:nodoc:
|
3
3
|
# Process the provided attributes casting them to their proper values if a
|
4
4
|
# field exists for them on the +Document+.
|
5
|
-
def process(params)
|
6
|
-
@attributes =
|
5
|
+
def process(params = nil)
|
6
|
+
@attributes = (params || {}).with_indifferent_access
|
7
7
|
process_fields
|
8
|
-
|
8
|
+
process_attributes
|
9
9
|
end
|
10
10
|
|
11
11
|
protected
|
@@ -16,9 +16,9 @@ module Mongoid #:nodoc:
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
def
|
19
|
+
def process_attributes
|
20
20
|
@attributes.each_pair do |key, value|
|
21
|
-
|
21
|
+
send("#{key}=", value)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
data/lib/mongoid/criteria.rb
CHANGED
@@ -102,10 +102,10 @@ module Mongoid #:nodoc:
|
|
102
102
|
@klass = klass if klass
|
103
103
|
if type == :first
|
104
104
|
attributes = klass.collection.find_one(@selector, @options)
|
105
|
-
attributes ? @klass.
|
105
|
+
attributes ? @klass.instantiate(attributes) : nil
|
106
106
|
else
|
107
107
|
attributes = @klass.collection.find(@selector, @options)
|
108
|
-
attributes ? attributes.collect { |doc| @klass.
|
108
|
+
attributes ? attributes.collect { |doc| @klass.instantiate(doc) } : []
|
109
109
|
end
|
110
110
|
end
|
111
111
|
|
@@ -142,7 +142,7 @@ module Mongoid #:nodoc:
|
|
142
142
|
{ :group => [] },
|
143
143
|
GROUP_REDUCE
|
144
144
|
).collect do |docs|
|
145
|
-
docs["group"] = docs["group"].collect { |attrs| @klass.
|
145
|
+
docs["group"] = docs["group"].collect { |attrs| @klass.instantiate(attrs) }; docs
|
146
146
|
end
|
147
147
|
end
|
148
148
|
|
data/lib/mongoid/document.rb
CHANGED
@@ -68,7 +68,7 @@ module Mongoid #:nodoc:
|
|
68
68
|
#
|
69
69
|
# <tt>field :score, :default => 0</tt>
|
70
70
|
def field(name, options = {})
|
71
|
-
@fields ||=
|
71
|
+
@fields ||= {}.with_indifferent_access
|
72
72
|
@fields[name.to_s] = Field.new(name.to_s, options)
|
73
73
|
define_method(name) { read_attribute(name) }
|
74
74
|
define_method("#{name}=") { |value| write_attribute(name, value) }
|
@@ -118,6 +118,13 @@ module Mongoid #:nodoc:
|
|
118
118
|
collection.create_index(name, options)
|
119
119
|
end
|
120
120
|
|
121
|
+
# Instantiate a new object, only when loaded from the database.
|
122
|
+
def instantiate(attributes = {})
|
123
|
+
document = allocate
|
124
|
+
document.instance_variable_set(:@attributes, attributes.with_indifferent_access)
|
125
|
+
document
|
126
|
+
end
|
127
|
+
|
121
128
|
# Defines the field that will be used for the id of this +Document+. This
|
122
129
|
# set the id of this +Document+ before save to a parameterized version of
|
123
130
|
# the field that was supplied. This is good for use for readable URLS in
|
@@ -207,7 +214,13 @@ module Mongoid #:nodoc:
|
|
207
214
|
@attributes[:_id]
|
208
215
|
end
|
209
216
|
|
217
|
+
# Set the id
|
218
|
+
def id=(new_id)
|
219
|
+
@attributes[:_id] = new_id
|
220
|
+
end
|
221
|
+
|
210
222
|
alias :_id :id
|
223
|
+
alias :_id= :id=
|
211
224
|
|
212
225
|
# Instantiate a new Document, setting the Document's attributes if given.
|
213
226
|
# If no attributes are provided, they will be initialized with an empty Hash.
|
@@ -237,6 +250,13 @@ module Mongoid #:nodoc:
|
|
237
250
|
notify_observers(self)
|
238
251
|
end
|
239
252
|
|
253
|
+
# Sets the parent object
|
254
|
+
def parentize(object, association_name)
|
255
|
+
self.parent = object
|
256
|
+
self.association_name = association_name
|
257
|
+
add_observer(object)
|
258
|
+
end
|
259
|
+
|
240
260
|
# Read from the attributes hash.
|
241
261
|
def read_attribute(name)
|
242
262
|
fields[name].get(@attributes[name])
|
@@ -244,7 +264,7 @@ module Mongoid #:nodoc:
|
|
244
264
|
|
245
265
|
# Reloads the +Document+ attributes from the database.
|
246
266
|
def reload
|
247
|
-
@attributes =
|
267
|
+
@attributes = collection.find_one(:_id => id).with_indifferent_access
|
248
268
|
end
|
249
269
|
|
250
270
|
# Return the root +Document+ in the object graph.
|
data/lib/mongoid/extensions.rb
CHANGED
@@ -7,7 +7,6 @@ require "mongoid/extensions/hash/accessors"
|
|
7
7
|
require "mongoid/extensions/hash/conversions"
|
8
8
|
require "mongoid/extensions/integer/conversions"
|
9
9
|
require "mongoid/extensions/object/conversions"
|
10
|
-
require "mongoid/extensions/object/parentization"
|
11
10
|
require "mongoid/extensions/string/conversions"
|
12
11
|
require "mongoid/extensions/string/inflections"
|
13
12
|
require "mongoid/extensions/symbol/inflections"
|
@@ -41,7 +40,6 @@ end
|
|
41
40
|
|
42
41
|
class Object #:nodoc:
|
43
42
|
include Mongoid::Extensions::Object::Conversions
|
44
|
-
include Mongoid::Extensions::Object::Parentization
|
45
43
|
end
|
46
44
|
|
47
45
|
class String #:nodoc
|
data/mongoid.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{mongoid}
|
8
|
-
s.version = "0.7.
|
8
|
+
s.version = "0.7.1"
|
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{2009-11-
|
12
|
+
s.date = %q{2009-11-12}
|
13
13
|
s.email = %q{durran@gmail.com}
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"README.textile"
|
@@ -50,7 +50,6 @@ Gem::Specification.new do |s|
|
|
50
50
|
"lib/mongoid/extensions/integer/conversions.rb",
|
51
51
|
"lib/mongoid/extensions/object/casting.rb",
|
52
52
|
"lib/mongoid/extensions/object/conversions.rb",
|
53
|
-
"lib/mongoid/extensions/object/parentization.rb",
|
54
53
|
"lib/mongoid/extensions/string/conversions.rb",
|
55
54
|
"lib/mongoid/extensions/string/inflections.rb",
|
56
55
|
"lib/mongoid/extensions/symbol/inflections.rb",
|
@@ -88,7 +87,6 @@ Gem::Specification.new do |s|
|
|
88
87
|
"spec/unit/mongoid/extensions/hash/conversions_spec.rb",
|
89
88
|
"spec/unit/mongoid/extensions/integer/conversions_spec.rb",
|
90
89
|
"spec/unit/mongoid/extensions/object/conversions_spec.rb",
|
91
|
-
"spec/unit/mongoid/extensions/object/parentization_spec.rb",
|
92
90
|
"spec/unit/mongoid/extensions/string/conversions_spec.rb",
|
93
91
|
"spec/unit/mongoid/extensions/string/inflections_spec.rb",
|
94
92
|
"spec/unit/mongoid/extensions/symbol/inflections_spec.rb",
|
@@ -131,7 +129,6 @@ Gem::Specification.new do |s|
|
|
131
129
|
"spec/unit/mongoid/extensions/hash/conversions_spec.rb",
|
132
130
|
"spec/unit/mongoid/extensions/integer/conversions_spec.rb",
|
133
131
|
"spec/unit/mongoid/extensions/object/conversions_spec.rb",
|
134
|
-
"spec/unit/mongoid/extensions/object/parentization_spec.rb",
|
135
132
|
"spec/unit/mongoid/extensions/string/conversions_spec.rb",
|
136
133
|
"spec/unit/mongoid/extensions/string/inflections_spec.rb",
|
137
134
|
"spec/unit/mongoid/extensions/symbol/inflections_spec.rb",
|
@@ -30,9 +30,9 @@ describe Mongoid::Document do
|
|
30
30
|
describe "#create" do
|
31
31
|
|
32
32
|
it "persists a new record to the database" do
|
33
|
-
person = Person.create(:
|
33
|
+
person = Person.create(:title => "Test")
|
34
34
|
person.id.should be_a_kind_of(String)
|
35
|
-
person.attributes[:
|
35
|
+
person.attributes[:title].should == "Test"
|
36
36
|
end
|
37
37
|
|
38
38
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -26,6 +26,7 @@ class Person < Mongoid::Document
|
|
26
26
|
field :age, :type => Integer, :default => 100
|
27
27
|
field :dob, :type => Date
|
28
28
|
field :mixed_drink, :type => MixedDrink
|
29
|
+
field :employer_id
|
29
30
|
has_many :addresses
|
30
31
|
has_many :phone_numbers, :class_name => "Phone"
|
31
32
|
has_one :name
|
@@ -36,6 +37,16 @@ class Person < Mongoid::Document
|
|
36
37
|
address.street = "Updated #{i}"
|
37
38
|
end
|
38
39
|
end
|
40
|
+
|
41
|
+
def employer=(emp)
|
42
|
+
self.employer_id = emp.id
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
class Employer
|
47
|
+
def id
|
48
|
+
"1"
|
49
|
+
end
|
39
50
|
end
|
40
51
|
|
41
52
|
class CountryCode < Mongoid::Document
|
@@ -78,7 +89,7 @@ class Address < Mongoid::Document
|
|
78
89
|
field :street
|
79
90
|
field :city
|
80
91
|
field :state
|
81
|
-
field :
|
92
|
+
field :post_code
|
82
93
|
key :street
|
83
94
|
belongs_to :addressable
|
84
95
|
end
|
@@ -4,8 +4,8 @@ describe Mongoid::Associations::HasMany do
|
|
4
4
|
|
5
5
|
before do
|
6
6
|
@attributes = { :addresses => [
|
7
|
-
{ :street => "Street 1" },
|
8
|
-
{ :street => "Street 2" } ] }
|
7
|
+
{ :_id => "street-1", :street => "Street 1" },
|
8
|
+
{ :_id => "street-2", :street => "Street 2" } ] }
|
9
9
|
@document = stub(:attributes => @attributes, :add_observer => true, :update => true)
|
10
10
|
end
|
11
11
|
|
@@ -64,6 +64,20 @@ describe Mongoid::Attributes do
|
|
64
64
|
|
65
65
|
end
|
66
66
|
|
67
|
+
context "when non-associations provided in the attributes" do
|
68
|
+
|
69
|
+
before do
|
70
|
+
@employer = Employer.new
|
71
|
+
@attributes = { :employer => @employer, :title => "Sir" }
|
72
|
+
@person = Person.new(@attributes)
|
73
|
+
end
|
74
|
+
|
75
|
+
it "calls the setter for the association" do
|
76
|
+
@person.employer_id.should == "1"
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
67
81
|
end
|
68
82
|
|
69
83
|
end
|
@@ -292,7 +292,7 @@ describe Mongoid::Document do
|
|
292
292
|
describe "#first" do
|
293
293
|
|
294
294
|
before do
|
295
|
-
@attributes = { "age" => 100
|
295
|
+
@attributes = { "age" => 100 }
|
296
296
|
end
|
297
297
|
|
298
298
|
context "when a selector is provided" do
|
@@ -349,6 +349,19 @@ describe Mongoid::Document do
|
|
349
349
|
|
350
350
|
end
|
351
351
|
|
352
|
+
describe "#instantiate" do
|
353
|
+
|
354
|
+
before do
|
355
|
+
@attributes = { :_id => "1", :title => "Sir", :age => 30 }
|
356
|
+
@person = Person.new(@attributes)
|
357
|
+
end
|
358
|
+
|
359
|
+
it "sets the attributes directly" do
|
360
|
+
Person.instantiate(@attributes).should == @person
|
361
|
+
end
|
362
|
+
|
363
|
+
end
|
364
|
+
|
352
365
|
describe "#key" do
|
353
366
|
|
354
367
|
context "when key is single field" do
|
@@ -370,8 +383,8 @@ describe Mongoid::Document do
|
|
370
383
|
context "when key is composite" do
|
371
384
|
|
372
385
|
before do
|
373
|
-
Address.key :street, :
|
374
|
-
@address = Address.new(:street => "Testing Street Name", :
|
386
|
+
Address.key :street, :post_code
|
387
|
+
@address = Address.new(:street => "Testing Street Name", :post_code => "94123")
|
375
388
|
@address.expects(:collection).returns(@collection)
|
376
389
|
@collection.expects(:save)
|
377
390
|
end
|
@@ -393,7 +406,7 @@ describe Mongoid::Document do
|
|
393
406
|
end
|
394
407
|
|
395
408
|
it "finds the last document by the id" do
|
396
|
-
Person.last.should == Person.
|
409
|
+
Person.last.should == Person.instantiate(@attributes)
|
397
410
|
end
|
398
411
|
|
399
412
|
end
|
@@ -547,6 +560,20 @@ describe Mongoid::Document do
|
|
547
560
|
|
548
561
|
end
|
549
562
|
|
563
|
+
describe "#parentize" do
|
564
|
+
|
565
|
+
before do
|
566
|
+
@parent = Person.new
|
567
|
+
@child = Name.new
|
568
|
+
end
|
569
|
+
|
570
|
+
it "sets the parent on each element" do
|
571
|
+
@child.parentize(@parent, :child)
|
572
|
+
@child.parent.should == @parent
|
573
|
+
end
|
574
|
+
|
575
|
+
end
|
576
|
+
|
550
577
|
describe "#read_attribute" do
|
551
578
|
|
552
579
|
context "when attribute does not exist" do
|
@@ -11,9 +11,7 @@ describe Mongoid::Extensions::Array::Parentization do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
it "sets the parent on each element" do
|
14
|
-
@child.expects(:
|
15
|
-
@child.expects(:parent=).with(@parent)
|
16
|
-
@child.expects(:association_name=).with(:child)
|
14
|
+
@child.expects(:parentize).with(@parent, :child)
|
17
15
|
@array.parentize(@parent, :child)
|
18
16
|
end
|
19
17
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Durran Jordan
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-11-
|
12
|
+
date: 2009-11-12 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -106,7 +106,6 @@ files:
|
|
106
106
|
- lib/mongoid/extensions/integer/conversions.rb
|
107
107
|
- lib/mongoid/extensions/object/casting.rb
|
108
108
|
- lib/mongoid/extensions/object/conversions.rb
|
109
|
-
- lib/mongoid/extensions/object/parentization.rb
|
110
109
|
- lib/mongoid/extensions/string/conversions.rb
|
111
110
|
- lib/mongoid/extensions/string/inflections.rb
|
112
111
|
- lib/mongoid/extensions/symbol/inflections.rb
|
@@ -144,7 +143,6 @@ files:
|
|
144
143
|
- spec/unit/mongoid/extensions/hash/conversions_spec.rb
|
145
144
|
- spec/unit/mongoid/extensions/integer/conversions_spec.rb
|
146
145
|
- spec/unit/mongoid/extensions/object/conversions_spec.rb
|
147
|
-
- spec/unit/mongoid/extensions/object/parentization_spec.rb
|
148
146
|
- spec/unit/mongoid/extensions/string/conversions_spec.rb
|
149
147
|
- spec/unit/mongoid/extensions/string/inflections_spec.rb
|
150
148
|
- spec/unit/mongoid/extensions/symbol/inflections_spec.rb
|
@@ -209,7 +207,6 @@ test_files:
|
|
209
207
|
- spec/unit/mongoid/extensions/hash/conversions_spec.rb
|
210
208
|
- spec/unit/mongoid/extensions/integer/conversions_spec.rb
|
211
209
|
- spec/unit/mongoid/extensions/object/conversions_spec.rb
|
212
|
-
- spec/unit/mongoid/extensions/object/parentization_spec.rb
|
213
210
|
- spec/unit/mongoid/extensions/string/conversions_spec.rb
|
214
211
|
- spec/unit/mongoid/extensions/string/inflections_spec.rb
|
215
212
|
- spec/unit/mongoid/extensions/symbol/inflections_spec.rb
|
@@ -1,14 +0,0 @@
|
|
1
|
-
module Mongoid #:nodoc:
|
2
|
-
module Extensions #:nodoc:
|
3
|
-
module Object #:nodoc:
|
4
|
-
module Parentization #:nodoc:
|
5
|
-
# Sets the parent object
|
6
|
-
def parentize(object, association_name)
|
7
|
-
self.parent = object
|
8
|
-
self.association_name = association_name
|
9
|
-
add_observer(object)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
require File.expand_path(File.join(File.dirname(__FILE__), "/../../../../spec_helper.rb"))
|
2
|
-
|
3
|
-
describe Mongoid::Extensions::Object::Parentization do
|
4
|
-
|
5
|
-
describe "#parentize" do
|
6
|
-
|
7
|
-
before do
|
8
|
-
@parent = Person.new
|
9
|
-
@child = Name.new
|
10
|
-
end
|
11
|
-
|
12
|
-
it "sets the parent on each element" do
|
13
|
-
@child.parentize(@parent, :child)
|
14
|
-
@child.parent.should == @parent
|
15
|
-
end
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
end
|