mongoid 0.4.8 → 0.5.0
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/has_many_association.rb +1 -0
- data/lib/mongoid/document.rb +6 -8
- data/lib/mongoid/timestamps.rb +2 -2
- data/mongoid.gemspec +2 -2
- data/spec/integration/mongoid/document_spec.rb +37 -0
- data/spec/spec_helper.rb +2 -0
- data/spec/unit/mongoid/associations/has_many_association_spec.rb +4 -6
- data/spec/unit/mongoid/associations_spec.rb +2 -1
- data/spec/unit/mongoid/document_spec.rb +2 -14
- data/spec/unit/mongoid/extensions/array/conversions_spec.rb +4 -2
- data/spec/unit/mongoid/extensions/object/conversions_spec.rb +3 -2
- data/spec/unit/mongoid/timestamps_spec.rb +6 -0
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.5.0
|
data/lib/mongoid/document.rb
CHANGED
@@ -52,8 +52,8 @@ module Mongoid #:nodoc:
|
|
52
52
|
#
|
53
53
|
# <tt>field :score, :default => 0</tt>
|
54
54
|
def field(name, options = {})
|
55
|
-
@fields ||=
|
56
|
-
@fields[name] = Field.new(name, options)
|
55
|
+
@fields ||= HashWithIndifferentAccess.new
|
56
|
+
@fields[name.to_s] = Field.new(name.to_s, options)
|
57
57
|
define_method(name) { read_attribute(name) }
|
58
58
|
define_method("#{name}=") { |value| write_attribute(name, value) }
|
59
59
|
end
|
@@ -172,8 +172,8 @@ module Mongoid #:nodoc:
|
|
172
172
|
# Instantiate a new Document, setting the Document's attirbutes if given.
|
173
173
|
# If no attributes are provided, they will be initialized with an empty Hash.
|
174
174
|
def initialize(attributes = {})
|
175
|
-
@attributes = attributes
|
176
|
-
@attributes =
|
175
|
+
@attributes = HashWithIndifferentAccess.new(attributes) if attributes
|
176
|
+
@attributes = HashWithIndifferentAccess.new unless attributes
|
177
177
|
generate_key
|
178
178
|
end
|
179
179
|
|
@@ -195,8 +195,7 @@ module Mongoid #:nodoc:
|
|
195
195
|
|
196
196
|
# Read from the attributes hash.
|
197
197
|
def read_attribute(name)
|
198
|
-
|
199
|
-
fields[symbol].value(@attributes[symbol])
|
198
|
+
fields[name].value(@attributes[name])
|
200
199
|
end
|
201
200
|
|
202
201
|
# Returns the id of the Document
|
@@ -212,8 +211,7 @@ module Mongoid #:nodoc:
|
|
212
211
|
|
213
212
|
# Write to the attributes hash.
|
214
213
|
def write_attribute(name, value)
|
215
|
-
|
216
|
-
@attributes[name.to_sym] = value
|
214
|
+
@attributes[name] = value
|
217
215
|
notify
|
218
216
|
end
|
219
217
|
|
data/lib/mongoid/timestamps.rb
CHANGED
@@ -16,13 +16,13 @@ module Mongoid
|
|
16
16
|
# Update the created_at field on the Document to the current time. This is
|
17
17
|
# only called on create.
|
18
18
|
def update_created_at
|
19
|
-
self.created_at = Time.now
|
19
|
+
self.created_at = Time.now.utc
|
20
20
|
end
|
21
21
|
|
22
22
|
# Update the last_modified field on the Document to the current time.
|
23
23
|
# This is only called on create and on save.
|
24
24
|
def update_modified_at
|
25
|
-
self.modified_at = Time.now
|
25
|
+
self.modified_at = Time.now.utc
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
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.
|
8
|
+
s.version = "0.5.0"
|
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-10-
|
12
|
+
s.date = %q{2009-10-27}
|
13
13
|
s.email = %q{durran@gmail.com}
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"README.textile"
|
@@ -112,4 +112,41 @@ describe Mongoid::Document do
|
|
112
112
|
|
113
113
|
end
|
114
114
|
|
115
|
+
context "the lot" do
|
116
|
+
|
117
|
+
before do
|
118
|
+
@person = Person.new(:title => "Sir")
|
119
|
+
@name = Name.new(:first_name => "Syd", :last_name => "Vicious")
|
120
|
+
@address = Address.new(:street => "Oxford Street")
|
121
|
+
@person.name = @name
|
122
|
+
@person.addresses << @address
|
123
|
+
end
|
124
|
+
|
125
|
+
context "when saving on a has_one" do
|
126
|
+
|
127
|
+
before do
|
128
|
+
@name.save
|
129
|
+
end
|
130
|
+
|
131
|
+
it "saves the entire graph up from the has_one" do
|
132
|
+
person = Person.first(:conditions => { :title => "Sir" })
|
133
|
+
person.name.first_name.should == @person.name.first_name
|
134
|
+
end
|
135
|
+
|
136
|
+
end
|
137
|
+
|
138
|
+
context "when saving on a has_many" do
|
139
|
+
|
140
|
+
before do
|
141
|
+
@address.save
|
142
|
+
end
|
143
|
+
|
144
|
+
it "saves the entire graph up from the has_many" do
|
145
|
+
person = Person.first(:conditions => { :title => "Sir" })
|
146
|
+
person.addresses.first.street.should == @person.addresses.first.street
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
end
|
151
|
+
|
115
152
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -29,12 +29,14 @@ class Address < Mongoid::Document
|
|
29
29
|
field :city
|
30
30
|
field :state
|
31
31
|
field :post_code
|
32
|
+
key :street
|
32
33
|
belongs_to :person
|
33
34
|
end
|
34
35
|
|
35
36
|
class Name < Mongoid::Document
|
36
37
|
field :first_name
|
37
38
|
field :last_name
|
39
|
+
key :first_name, :last_name
|
38
40
|
belongs_to :person
|
39
41
|
end
|
40
42
|
|
@@ -3,11 +3,9 @@ require File.join(File.dirname(__FILE__), "/../../../spec_helper.rb")
|
|
3
3
|
describe Mongoid::Associations::HasManyAssociation do
|
4
4
|
|
5
5
|
before do
|
6
|
-
@first_id = Mongo::ObjectID.new
|
7
|
-
@second_id = Mongo::ObjectID.new
|
8
6
|
@attributes = { :addresses => [
|
9
|
-
{ :
|
10
|
-
{ :
|
7
|
+
{ :street => "Street 1" },
|
8
|
+
{ :street => "Street 2" } ] }
|
11
9
|
@document = stub(:attributes => @attributes, :add_observer => true, :update => true)
|
12
10
|
end
|
13
11
|
|
@@ -119,8 +117,8 @@ describe Mongoid::Associations::HasManyAssociation do
|
|
119
117
|
context "when finding by id" do
|
120
118
|
|
121
119
|
it "returns the document in the array with that id" do
|
122
|
-
address = @association.find(
|
123
|
-
address.
|
120
|
+
address = @association.find("street-2")
|
121
|
+
address.should_not be_nil
|
124
122
|
end
|
125
123
|
|
126
124
|
end
|
@@ -29,7 +29,8 @@ describe Mongoid::Associations do
|
|
29
29
|
end
|
30
30
|
|
31
31
|
it "sets the child attributes on the parent" do
|
32
|
-
@person.attributes[:name].should ==
|
32
|
+
@person.attributes[:name].should ==
|
33
|
+
HashWithIndifferentAccess.new({ :_id => "test-user", :first_name => "Test", :last_name => "User" })
|
33
34
|
end
|
34
35
|
|
35
36
|
end
|
@@ -250,10 +250,10 @@ describe Mongoid::Document do
|
|
250
250
|
context "with attributes" do
|
251
251
|
|
252
252
|
before do
|
253
|
-
@attributes = { :test => "test" }
|
253
|
+
@attributes = HashWithIndifferentAccess.new({ :test => "test" })
|
254
254
|
end
|
255
255
|
|
256
|
-
it "sets the
|
256
|
+
it "sets the attributes hash on the object" do
|
257
257
|
person = Person.new(@attributes)
|
258
258
|
person.attributes.should == @attributes
|
259
259
|
end
|
@@ -275,18 +275,6 @@ describe Mongoid::Document do
|
|
275
275
|
|
276
276
|
end
|
277
277
|
|
278
|
-
context "when the value for the key is nonexistant" do
|
279
|
-
|
280
|
-
before do
|
281
|
-
@address = Address.new(:street => "Test")
|
282
|
-
end
|
283
|
-
|
284
|
-
it "sets the primary key" do
|
285
|
-
@address.id.should be_nil
|
286
|
-
end
|
287
|
-
|
288
|
-
end
|
289
|
-
|
290
278
|
end
|
291
279
|
|
292
280
|
end
|
@@ -6,9 +6,11 @@ describe Mongoid::Extensions::Array::Conversions do
|
|
6
6
|
|
7
7
|
it "collects each of its attributes" do
|
8
8
|
array = [Person.new(:title => "Sir"), Person.new(:title => "Madam")]
|
9
|
-
array.mongoidize.should ==
|
9
|
+
array.mongoidize.should ==
|
10
|
+
[HashWithIndifferentAccess.new({ :title => "Sir" }),
|
11
|
+
HashWithIndifferentAccess.new({ :title => "Madam" })]
|
10
12
|
end
|
11
13
|
|
12
14
|
end
|
13
15
|
|
14
|
-
end
|
16
|
+
end
|
@@ -5,9 +5,10 @@ describe Mongoid::Extensions::Object::Conversions do
|
|
5
5
|
describe "#mongoidize" do
|
6
6
|
|
7
7
|
it "returns its attributes" do
|
8
|
-
Person.new(:title => "Sir").mongoidize.should ==
|
8
|
+
Person.new(:title => "Sir").mongoidize.should ==
|
9
|
+
HashWithIndifferentAccess.new({ :title => "Sir" })
|
9
10
|
end
|
10
11
|
|
11
12
|
end
|
12
13
|
|
13
|
-
end
|
14
|
+
end
|
@@ -14,6 +14,12 @@ describe Mongoid::Timestamps do
|
|
14
14
|
fields[:modified_at].should_not be_nil
|
15
15
|
end
|
16
16
|
|
17
|
+
it "forces the timestamps to UTC" do
|
18
|
+
@person.run_callbacks(:before_create)
|
19
|
+
@person.created_at.should be_close(Time.now.utc, 10.seconds)
|
20
|
+
@person.modified_at.should be_close(Time.now.utc, 10.seconds)
|
21
|
+
end
|
22
|
+
|
17
23
|
end
|
18
24
|
|
19
25
|
end
|
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.
|
4
|
+
version: 0.5.0
|
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-10-
|
12
|
+
date: 2009-10-27 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|