mongoid 0.4.8 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|