mongoid 0.9.4 → 0.9.5
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +2 -4
- data/VERSION +1 -1
- data/lib/mongoid.rb +3 -2
- data/lib/mongoid/associations.rb +1 -0
- data/lib/mongoid/associations/accessor.rb +1 -0
- data/lib/mongoid/associations/belongs_to.rb +1 -0
- data/lib/mongoid/associations/decorator.rb +1 -0
- data/lib/mongoid/associations/has_many.rb +1 -0
- data/lib/mongoid/associations/has_one.rb +1 -0
- data/lib/mongoid/associations/options.rb +1 -0
- data/lib/mongoid/associations/relates_to_many.rb +1 -0
- data/lib/mongoid/associations/relates_to_one.rb +1 -0
- data/lib/mongoid/attributes.rb +1 -0
- data/lib/mongoid/commands.rb +1 -0
- data/lib/mongoid/commands/create.rb +1 -0
- data/lib/mongoid/commands/delete.rb +1 -0
- data/lib/mongoid/commands/delete_all.rb +1 -0
- data/lib/mongoid/commands/destroy.rb +1 -0
- data/lib/mongoid/commands/destroy_all.rb +1 -0
- data/lib/mongoid/commands/save.rb +1 -0
- data/lib/mongoid/commands/validate.rb +1 -0
- data/lib/mongoid/criteria.rb +28 -2
- data/lib/mongoid/document.rb +14 -7
- data/lib/mongoid/dynamic_finder.rb +1 -0
- data/lib/mongoid/extensions.rb +3 -0
- data/lib/mongoid/extensions/array/accessors.rb +15 -0
- data/lib/mongoid/extensions/array/assimilation.rb +1 -0
- data/lib/mongoid/extensions/array/conversions.rb +1 -0
- data/lib/mongoid/extensions/array/parentization.rb +1 -0
- data/lib/mongoid/extensions/boolean/conversions.rb +1 -0
- data/lib/mongoid/extensions/date/conversions.rb +1 -0
- data/lib/mongoid/extensions/datetime/conversions.rb +1 -0
- data/lib/mongoid/extensions/float/conversions.rb +1 -0
- data/lib/mongoid/extensions/hash/accessors.rb +2 -1
- data/lib/mongoid/extensions/hash/assimilation.rb +1 -0
- data/lib/mongoid/extensions/hash/conversions.rb +1 -0
- data/lib/mongoid/extensions/integer/conversions.rb +1 -0
- data/lib/mongoid/extensions/object/conversions.rb +1 -0
- data/lib/mongoid/extensions/string/conversions.rb +1 -0
- data/lib/mongoid/extensions/string/inflections.rb +1 -0
- data/lib/mongoid/extensions/symbol/inflections.rb +1 -0
- data/lib/mongoid/extensions/time/conversions.rb +1 -0
- data/lib/mongoid/field.rb +1 -0
- data/lib/mongoid/finders.rb +1 -0
- data/lib/mongoid/timestamps.rb +7 -6
- data/lib/mongoid/versioning.rb +1 -0
- data/mongoid.gemspec +11 -8
- data/spec/integration/mongoid/document_spec.rb +36 -1
- data/spec/spec.opts +2 -4
- data/spec/spec_helper.rb +6 -0
- data/spec/unit/mongoid/criteria_spec.rb +42 -3
- data/spec/unit/mongoid/document_spec.rb +17 -22
- data/spec/unit/mongoid/extensions/array/accessors_spec.rb +50 -0
- data/spec/unit/mongoid/timestamps_spec.rb +3 -3
- metadata +7 -4
data/Rakefile
CHANGED
@@ -2,7 +2,6 @@ require "rubygems"
|
|
2
2
|
require "rake"
|
3
3
|
require "rake/rdoctask"
|
4
4
|
require "spec/rake/spectask"
|
5
|
-
require "metric_fu"
|
6
5
|
|
7
6
|
begin
|
8
7
|
require "jeweler"
|
@@ -16,8 +15,8 @@ begin
|
|
16
15
|
gem.add_dependency("durran-validatable", "1.8.3")
|
17
16
|
gem.add_dependency("leshill-will_paginate", "2.3.11")
|
18
17
|
gem.add_dependency("activesupport", "2.3.4")
|
19
|
-
gem.add_dependency("mongo", "0.
|
20
|
-
gem.add_dependency("mongo_ext", "0.
|
18
|
+
gem.add_dependency("mongo", "0.18.1")
|
19
|
+
gem.add_dependency("mongo_ext", "0.18.1")
|
21
20
|
|
22
21
|
gem.add_development_dependency("rspec", "1.2.9")
|
23
22
|
gem.add_development_dependency("mocha", "0.9.8")
|
@@ -53,4 +52,3 @@ Rake::RDocTask.new do |rdoc|
|
|
53
52
|
end
|
54
53
|
|
55
54
|
task :default => ["spec"]
|
56
|
-
task :metrics => ["rcov", "metrics:all"]
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.9.
|
1
|
+
0.9.5
|
data/lib/mongoid.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
# Copyright (c) 2009 Durran Jordan
|
2
3
|
#
|
3
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
@@ -21,8 +22,8 @@
|
|
21
22
|
require "rubygems"
|
22
23
|
|
23
24
|
gem "activesupport", "2.3.4"
|
24
|
-
gem "mongo", "0.
|
25
|
-
gem "mongo_ext", "0.
|
25
|
+
gem "mongo", "0.18.1"
|
26
|
+
gem "mongo_ext", "0.18.1"
|
26
27
|
gem "durran-validatable", "1.8.3"
|
27
28
|
gem "leshill-will_paginate", "2.3.11"
|
28
29
|
|
data/lib/mongoid/associations.rb
CHANGED
data/lib/mongoid/attributes.rb
CHANGED
data/lib/mongoid/commands.rb
CHANGED
data/lib/mongoid/criteria.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
module Mongoid #:nodoc:
|
2
3
|
# The +Criteria+ class is the core object needed in Mongoid to retrieve
|
3
4
|
# objects from the database. It is a DSL that essentially sets up the
|
@@ -73,6 +74,25 @@ module Mongoid #:nodoc:
|
|
73
74
|
selections.each { |key, value| @selector[key] = { "$all" => value } }; self
|
74
75
|
end
|
75
76
|
|
77
|
+
# Adds a criterion to the +Criteria+ that specifies values that must
|
78
|
+
# be matched in order to return results. This is similar to a SQL "WHERE"
|
79
|
+
# clause. This is the actual selector that will be provided to MongoDB,
|
80
|
+
# similar to the Javascript object that is used when performing a find()
|
81
|
+
# in the MongoDB console.
|
82
|
+
#
|
83
|
+
# Options:
|
84
|
+
#
|
85
|
+
# selectior: A +Hash+ that must match the attributes of the +Document+.
|
86
|
+
#
|
87
|
+
# Example:
|
88
|
+
#
|
89
|
+
# <tt>criteria.and(:field1 => "value1", :field2 => 15)</tt>
|
90
|
+
#
|
91
|
+
# Returns: <tt>self</tt>
|
92
|
+
def and(selector = nil)
|
93
|
+
where(selector)
|
94
|
+
end
|
95
|
+
|
76
96
|
# Get the count of matching documents in the database for the +Criteria+.
|
77
97
|
#
|
78
98
|
# Example:
|
@@ -447,8 +467,14 @@ module Mongoid #:nodoc:
|
|
447
467
|
# <tt>criteria.where(:field1 => "value1", :field2 => 15)</tt>
|
448
468
|
#
|
449
469
|
# Returns: <tt>self</tt>
|
450
|
-
def where(selector =
|
451
|
-
|
470
|
+
def where(selector = nil)
|
471
|
+
case selector
|
472
|
+
when String
|
473
|
+
@selector.update("$where" => selector)
|
474
|
+
else
|
475
|
+
@selector.update(selector || {})
|
476
|
+
end
|
477
|
+
self
|
452
478
|
end
|
453
479
|
|
454
480
|
protected
|
data/lib/mongoid/document.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
module Mongoid #:nodoc:
|
2
3
|
class Document
|
3
4
|
include ActiveSupport::Callbacks
|
@@ -57,10 +58,9 @@ module Mongoid #:nodoc:
|
|
57
58
|
def field(name, options = {})
|
58
59
|
@fields ||= {}.with_indifferent_access
|
59
60
|
@defaults ||= {}.with_indifferent_access
|
60
|
-
@fields[name
|
61
|
-
@defaults[name
|
62
|
-
|
63
|
-
define_method("#{name}=") { |value| write_attribute(name, value) }
|
61
|
+
@fields[name] = Field.new(name.to_s, options)
|
62
|
+
@defaults[name] = options[:default] if options[:default]
|
63
|
+
define_field_methods(name, options)
|
64
64
|
end
|
65
65
|
|
66
66
|
# Returns all the fields for the Document as a +Hash+ with names as keys.
|
@@ -80,9 +80,9 @@ module Mongoid #:nodoc:
|
|
80
80
|
end
|
81
81
|
|
82
82
|
# Instantiate a new object, only when loaded from the database.
|
83
|
-
def instantiate(attrs = {})
|
83
|
+
def instantiate(attrs = {}, allocating = false)
|
84
84
|
attributes = attrs.with_indifferent_access
|
85
|
-
if attributes[:_id]
|
85
|
+
if attributes[:_id] || allocating
|
86
86
|
document = allocate
|
87
87
|
document.instance_variable_set(:@attributes, attributes)
|
88
88
|
return document
|
@@ -106,6 +106,13 @@ module Mongoid #:nodoc:
|
|
106
106
|
@primary_key
|
107
107
|
end
|
108
108
|
|
109
|
+
protected
|
110
|
+
def define_field_methods(name, options)
|
111
|
+
define_method(name) { read_attribute(name) }
|
112
|
+
define_method("#{name}=") { |value| write_attribute(name, value) }
|
113
|
+
define_method("#{name}?") { read_attribute(name) == true } if options[:type] == Boolean
|
114
|
+
end
|
115
|
+
|
109
116
|
end
|
110
117
|
|
111
118
|
# Performs equality checking on the attributes. For now we chack against
|
@@ -139,7 +146,7 @@ module Mongoid #:nodoc:
|
|
139
146
|
# Clone the current +Document+. This will return all attributes with the
|
140
147
|
# exception of the document's id and versions.
|
141
148
|
def clone
|
142
|
-
self.class.
|
149
|
+
self.class.instantiate(@attributes.except(:_id).except(:versions).dup, true)
|
143
150
|
end
|
144
151
|
|
145
152
|
# Get the Mongo::Collection associated with this Document.
|
data/lib/mongoid/extensions.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require "mongoid/extensions/array/accessors"
|
1
3
|
require "mongoid/extensions/array/assimilation"
|
2
4
|
require "mongoid/extensions/array/conversions"
|
3
5
|
require "mongoid/extensions/array/parentization"
|
@@ -16,6 +18,7 @@ require "mongoid/extensions/symbol/inflections"
|
|
16
18
|
require "mongoid/extensions/time/conversions"
|
17
19
|
|
18
20
|
class Array #:nodoc:
|
21
|
+
include Mongoid::Extensions::Array::Accessors
|
19
22
|
include Mongoid::Extensions::Array::Assimilation
|
20
23
|
include Mongoid::Extensions::Array::Conversions
|
21
24
|
include Mongoid::Extensions::Array::Parentization
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid #:nodoc:
|
3
|
+
module Extensions #:nodoc:
|
4
|
+
module Array #:nodoc:
|
5
|
+
module Accessors #:nodoc:
|
6
|
+
# If the attributes already exists in the array then they will be
|
7
|
+
# updated, otherwise they will be appended.
|
8
|
+
def update(attributes)
|
9
|
+
delete_if { |e| attributes[:_id] && (e[:_id] == attributes[:_id]) }
|
10
|
+
self.<< attributes
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
module Mongoid #:nodoc:
|
2
3
|
module Extensions #:nodoc:
|
3
4
|
module Hash #:nodoc:
|
@@ -8,7 +9,7 @@ module Mongoid #:nodoc:
|
|
8
9
|
self[key] = self[key].merge(attrs) if self[key]
|
9
10
|
else
|
10
11
|
if elements = self[key]
|
11
|
-
elements.
|
12
|
+
elements.update(attrs)
|
12
13
|
else
|
13
14
|
self[key] = [attrs]
|
14
15
|
end
|
data/lib/mongoid/field.rb
CHANGED
data/lib/mongoid/finders.rb
CHANGED
data/lib/mongoid/timestamps.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
module Mongoid
|
2
3
|
module Timestamps
|
3
4
|
|
@@ -5,8 +6,8 @@ module Mongoid
|
|
5
6
|
base.class_eval do
|
6
7
|
include InstanceMethods
|
7
8
|
field :created_at, :type => Time
|
8
|
-
field :
|
9
|
-
before_save :
|
9
|
+
field :updated_at, :type => Time
|
10
|
+
before_save :set_created_at, :set_updated_at
|
10
11
|
end
|
11
12
|
end
|
12
13
|
|
@@ -14,14 +15,14 @@ module Mongoid
|
|
14
15
|
|
15
16
|
# Update the created_at field on the Document to the current time. This is
|
16
17
|
# only called on create.
|
17
|
-
def
|
18
|
+
def set_created_at
|
18
19
|
self.created_at = Time.now.utc if !created_at
|
19
20
|
end
|
20
21
|
|
21
|
-
# Update the
|
22
|
+
# Update the updated_at field on the Document to the current time.
|
22
23
|
# This is only called on create and on save.
|
23
|
-
def
|
24
|
-
self.
|
24
|
+
def set_updated_at
|
25
|
+
self.updated_at = Time.now.utc
|
25
26
|
end
|
26
27
|
end
|
27
28
|
|
data/lib/mongoid/versioning.rb
CHANGED
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.9.
|
8
|
+
s.version = "0.9.5"
|
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-12-
|
12
|
+
s.date = %q{2009-12-08}
|
13
13
|
s.email = %q{durran@gmail.com}
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"README.textile"
|
@@ -44,6 +44,7 @@ Gem::Specification.new do |s|
|
|
44
44
|
"lib/mongoid/document.rb",
|
45
45
|
"lib/mongoid/dynamic_finder.rb",
|
46
46
|
"lib/mongoid/extensions.rb",
|
47
|
+
"lib/mongoid/extensions/array/accessors.rb",
|
47
48
|
"lib/mongoid/extensions/array/assimilation.rb",
|
48
49
|
"lib/mongoid/extensions/array/conversions.rb",
|
49
50
|
"lib/mongoid/extensions/array/parentization.rb",
|
@@ -91,6 +92,7 @@ Gem::Specification.new do |s|
|
|
91
92
|
"spec/unit/mongoid/criteria_spec.rb",
|
92
93
|
"spec/unit/mongoid/document_spec.rb",
|
93
94
|
"spec/unit/mongoid/dynamic_finder_spec.rb",
|
95
|
+
"spec/unit/mongoid/extensions/array/accessors_spec.rb",
|
94
96
|
"spec/unit/mongoid/extensions/array/assimilation_spec.rb",
|
95
97
|
"spec/unit/mongoid/extensions/array/conversions_spec.rb",
|
96
98
|
"spec/unit/mongoid/extensions/array/parentization_spec.rb",
|
@@ -141,6 +143,7 @@ Gem::Specification.new do |s|
|
|
141
143
|
"spec/unit/mongoid/criteria_spec.rb",
|
142
144
|
"spec/unit/mongoid/document_spec.rb",
|
143
145
|
"spec/unit/mongoid/dynamic_finder_spec.rb",
|
146
|
+
"spec/unit/mongoid/extensions/array/accessors_spec.rb",
|
144
147
|
"spec/unit/mongoid/extensions/array/assimilation_spec.rb",
|
145
148
|
"spec/unit/mongoid/extensions/array/conversions_spec.rb",
|
146
149
|
"spec/unit/mongoid/extensions/array/parentization_spec.rb",
|
@@ -171,16 +174,16 @@ Gem::Specification.new do |s|
|
|
171
174
|
s.add_runtime_dependency(%q<durran-validatable>, ["= 1.8.3"])
|
172
175
|
s.add_runtime_dependency(%q<leshill-will_paginate>, ["= 2.3.11"])
|
173
176
|
s.add_runtime_dependency(%q<activesupport>, ["= 2.3.4"])
|
174
|
-
s.add_runtime_dependency(%q<mongo>, ["= 0.
|
175
|
-
s.add_runtime_dependency(%q<mongo_ext>, ["= 0.
|
177
|
+
s.add_runtime_dependency(%q<mongo>, ["= 0.18.1"])
|
178
|
+
s.add_runtime_dependency(%q<mongo_ext>, ["= 0.18.1"])
|
176
179
|
s.add_development_dependency(%q<rspec>, ["= 1.2.9"])
|
177
180
|
s.add_development_dependency(%q<mocha>, ["= 0.9.8"])
|
178
181
|
else
|
179
182
|
s.add_dependency(%q<durran-validatable>, ["= 1.8.3"])
|
180
183
|
s.add_dependency(%q<leshill-will_paginate>, ["= 2.3.11"])
|
181
184
|
s.add_dependency(%q<activesupport>, ["= 2.3.4"])
|
182
|
-
s.add_dependency(%q<mongo>, ["= 0.
|
183
|
-
s.add_dependency(%q<mongo_ext>, ["= 0.
|
185
|
+
s.add_dependency(%q<mongo>, ["= 0.18.1"])
|
186
|
+
s.add_dependency(%q<mongo_ext>, ["= 0.18.1"])
|
184
187
|
s.add_dependency(%q<rspec>, ["= 1.2.9"])
|
185
188
|
s.add_dependency(%q<mocha>, ["= 0.9.8"])
|
186
189
|
end
|
@@ -188,8 +191,8 @@ Gem::Specification.new do |s|
|
|
188
191
|
s.add_dependency(%q<durran-validatable>, ["= 1.8.3"])
|
189
192
|
s.add_dependency(%q<leshill-will_paginate>, ["= 2.3.11"])
|
190
193
|
s.add_dependency(%q<activesupport>, ["= 2.3.4"])
|
191
|
-
s.add_dependency(%q<mongo>, ["= 0.
|
192
|
-
s.add_dependency(%q<mongo_ext>, ["= 0.
|
194
|
+
s.add_dependency(%q<mongo>, ["= 0.18.1"])
|
195
|
+
s.add_dependency(%q<mongo_ext>, ["= 0.18.1"])
|
193
196
|
s.add_dependency(%q<rspec>, ["= 1.2.9"])
|
194
197
|
s.add_dependency(%q<mocha>, ["= 0.9.8"])
|
195
198
|
end
|
@@ -376,6 +376,10 @@ describe Mongoid::Document do
|
|
376
376
|
@comment.save
|
377
377
|
end
|
378
378
|
|
379
|
+
after do
|
380
|
+
Comment.collection.drop
|
381
|
+
end
|
382
|
+
|
379
383
|
context "first save" do
|
380
384
|
|
381
385
|
it "creates a new version" do
|
@@ -392,7 +396,6 @@ describe Mongoid::Document do
|
|
392
396
|
|
393
397
|
before do
|
394
398
|
5.times do |n|
|
395
|
-
@comment.text = "#{n}"
|
396
399
|
@comment.save
|
397
400
|
end
|
398
401
|
end
|
@@ -407,4 +410,36 @@ describe Mongoid::Document do
|
|
407
410
|
|
408
411
|
end
|
409
412
|
|
413
|
+
context "executing criteria with date comparisons" do
|
414
|
+
|
415
|
+
context "handling specific dates" do
|
416
|
+
|
417
|
+
before do
|
418
|
+
@person = Person.create(:dob => Date.new(2000, 10, 31))
|
419
|
+
end
|
420
|
+
|
421
|
+
it "handles comparisons with todays date"do
|
422
|
+
people = Person.select.where("this.dob < new Date()")
|
423
|
+
people.first.should == @person
|
424
|
+
end
|
425
|
+
|
426
|
+
it "handles conparisons with a date range" do
|
427
|
+
people = Person.select.where("new Date(1976, 10, 31) < this.dob && this.dob < new Date()")
|
428
|
+
people.first.should == @person
|
429
|
+
end
|
430
|
+
|
431
|
+
it "handles false comparisons in a date range" do
|
432
|
+
people = Person.select.where("new Date(2005, 10, 31) < this.dob && this.dob < new Date()")
|
433
|
+
people.should be_empty
|
434
|
+
end
|
435
|
+
|
436
|
+
it "handles comparisons with date objects"do
|
437
|
+
people = Person.select.where(:dob => { "$lt" => Date.today.midnight })
|
438
|
+
people.first.should == @person
|
439
|
+
end
|
440
|
+
|
441
|
+
end
|
442
|
+
|
443
|
+
end
|
444
|
+
|
410
445
|
end
|
data/spec/spec.opts
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -36,6 +36,11 @@ class Person < Mongoid::Document
|
|
36
36
|
has_one :name
|
37
37
|
has_one :pet, :class_name => "Animal"
|
38
38
|
|
39
|
+
index :title
|
40
|
+
index :dob
|
41
|
+
index :addresses
|
42
|
+
index :name
|
43
|
+
|
39
44
|
relates_to_one :game
|
40
45
|
relates_to_many :posts
|
41
46
|
|
@@ -124,6 +129,7 @@ end
|
|
124
129
|
class Comment < Mongoid::Document
|
125
130
|
include Mongoid::Versioning
|
126
131
|
field :text
|
132
|
+
key :text
|
127
133
|
end
|
128
134
|
|
129
135
|
class Decorated
|
@@ -54,6 +54,32 @@ describe Mongoid::Criteria do
|
|
54
54
|
|
55
55
|
end
|
56
56
|
|
57
|
+
describe "#and" do
|
58
|
+
|
59
|
+
context "when provided a hash" do
|
60
|
+
|
61
|
+
it "adds the clause to the selector" do
|
62
|
+
@criteria.and(:title => "Title", :text => "Text")
|
63
|
+
@criteria.selector.should == { :title => "Title", :text => "Text" }
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
context "when provided a string" do
|
69
|
+
|
70
|
+
it "adds the $where clause to the selector" do
|
71
|
+
@criteria.and("this.date < new Date()")
|
72
|
+
@criteria.selector.should == { "$where" => "this.date < new Date()" }
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
it "returns self" do
|
78
|
+
@criteria.and.should == @criteria
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
57
83
|
describe "#collect" do
|
58
84
|
|
59
85
|
context "filtering" do
|
@@ -821,9 +847,22 @@ describe Mongoid::Criteria do
|
|
821
847
|
|
822
848
|
describe "#where" do
|
823
849
|
|
824
|
-
|
825
|
-
|
826
|
-
|
850
|
+
context "when provided a hash" do
|
851
|
+
|
852
|
+
it "adds the clause to the selector" do
|
853
|
+
@criteria.where(:title => "Title", :text => "Text")
|
854
|
+
@criteria.selector.should == { :title => "Title", :text => "Text" }
|
855
|
+
end
|
856
|
+
|
857
|
+
end
|
858
|
+
|
859
|
+
context "when provided a string" do
|
860
|
+
|
861
|
+
it "adds the $where clause to the selector" do
|
862
|
+
@criteria.where("this.date < new Date()")
|
863
|
+
@criteria.selector.should == { "$where" => "this.date < new Date()" }
|
864
|
+
end
|
865
|
+
|
827
866
|
end
|
828
867
|
|
829
868
|
it "returns self" do
|
@@ -207,6 +207,18 @@ describe Mongoid::Document do
|
|
207
207
|
|
208
208
|
end
|
209
209
|
|
210
|
+
context "when type is a boolean" do
|
211
|
+
|
212
|
+
before do
|
213
|
+
@person = Person.new(:terms => true)
|
214
|
+
end
|
215
|
+
|
216
|
+
it "adds an accessor method with a question mark" do
|
217
|
+
@person.terms?.should be_true
|
218
|
+
end
|
219
|
+
|
220
|
+
end
|
221
|
+
|
210
222
|
end
|
211
223
|
|
212
224
|
describe ".human_name" do
|
@@ -253,30 +265,13 @@ describe Mongoid::Document do
|
|
253
265
|
|
254
266
|
describe ".instantiate" do
|
255
267
|
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
@attributes = { :_id => "1", :title => "Sir", :age => 30 }
|
260
|
-
@person = Person.new(@attributes)
|
261
|
-
end
|
262
|
-
|
263
|
-
it "sets the attributes directly" do
|
264
|
-
Person.instantiate(@attributes).should == @person
|
265
|
-
end
|
266
|
-
|
268
|
+
before do
|
269
|
+
@attributes = { :_id => "1", :title => "Sir", :age => 30 }
|
270
|
+
@person = Person.new(@attributes)
|
267
271
|
end
|
268
272
|
|
269
|
-
|
270
|
-
|
271
|
-
before do
|
272
|
-
@attributes = { :title => "Sir", :age => 30 }
|
273
|
-
@person = Person.new(@attributes)
|
274
|
-
end
|
275
|
-
|
276
|
-
it "instantiates normally" do
|
277
|
-
Person.instantiate(@attributes).id.should_not be_nil
|
278
|
-
end
|
279
|
-
|
273
|
+
it "sets the attributes directly" do
|
274
|
+
Person.instantiate(@attributes).should == @person
|
280
275
|
end
|
281
276
|
|
282
277
|
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Mongoid::Extensions::Array::Accessors do
|
4
|
+
|
5
|
+
describe "#update" do
|
6
|
+
|
7
|
+
context "when the attributes exist" do
|
8
|
+
|
9
|
+
before do
|
10
|
+
@array = [{ :_id => 1, :name => "James T. Kirk" }]
|
11
|
+
end
|
12
|
+
|
13
|
+
it "overwrites with the new attributes" do
|
14
|
+
@array.update({ :_id => 1, :name => "Spock" })
|
15
|
+
@array.first[:name].should == "Spock"
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
context "when the attributes do not exist" do
|
21
|
+
|
22
|
+
before do
|
23
|
+
@array = [{ :_id => 1, :name => "James T. Kirk" }]
|
24
|
+
end
|
25
|
+
|
26
|
+
it "appends the new attributes" do
|
27
|
+
@array.update({ :_id => 2, :name => "Scotty" })
|
28
|
+
@array.size.should == 2
|
29
|
+
@array.last[:name].should == "Scotty"
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
context "when the new attribtues have no id" do
|
35
|
+
|
36
|
+
before do
|
37
|
+
@array = [{ :_id => 1, :name => "James T. Kirk" }]
|
38
|
+
end
|
39
|
+
|
40
|
+
it "appends the new attributes" do
|
41
|
+
@array.update({:name => "Scotty" })
|
42
|
+
@array.size.should == 2
|
43
|
+
@array.last[:name].should == "Scotty"
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
@@ -8,16 +8,16 @@ describe Mongoid::Timestamps do
|
|
8
8
|
@person = Person.new
|
9
9
|
end
|
10
10
|
|
11
|
-
it "adds created_at and
|
11
|
+
it "adds created_at and updated_at to the document" do
|
12
12
|
fields = Person.instance_variable_get(:@fields)
|
13
13
|
fields[:created_at].should_not be_nil
|
14
|
-
fields[:
|
14
|
+
fields[:updated_at].should_not be_nil
|
15
15
|
end
|
16
16
|
|
17
17
|
it "forces the timestamps to UTC" do
|
18
18
|
@person.run_callbacks(:before_save)
|
19
19
|
@person.created_at.should be_close(Time.now.utc, 10.seconds)
|
20
|
-
@person.
|
20
|
+
@person.updated_at.should be_close(Time.now.utc, 10.seconds)
|
21
21
|
end
|
22
22
|
|
23
23
|
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.9.
|
4
|
+
version: 0.9.5
|
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-12-
|
12
|
+
date: 2009-12-08 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -50,7 +50,7 @@ dependencies:
|
|
50
50
|
requirements:
|
51
51
|
- - "="
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: 0.
|
53
|
+
version: 0.18.1
|
54
54
|
version:
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: mongo_ext
|
@@ -60,7 +60,7 @@ dependencies:
|
|
60
60
|
requirements:
|
61
61
|
- - "="
|
62
62
|
- !ruby/object:Gem::Version
|
63
|
-
version: 0.
|
63
|
+
version: 0.18.1
|
64
64
|
version:
|
65
65
|
- !ruby/object:Gem::Dependency
|
66
66
|
name: rspec
|
@@ -120,6 +120,7 @@ files:
|
|
120
120
|
- lib/mongoid/document.rb
|
121
121
|
- lib/mongoid/dynamic_finder.rb
|
122
122
|
- lib/mongoid/extensions.rb
|
123
|
+
- lib/mongoid/extensions/array/accessors.rb
|
123
124
|
- lib/mongoid/extensions/array/assimilation.rb
|
124
125
|
- lib/mongoid/extensions/array/conversions.rb
|
125
126
|
- lib/mongoid/extensions/array/parentization.rb
|
@@ -167,6 +168,7 @@ files:
|
|
167
168
|
- spec/unit/mongoid/criteria_spec.rb
|
168
169
|
- spec/unit/mongoid/document_spec.rb
|
169
170
|
- spec/unit/mongoid/dynamic_finder_spec.rb
|
171
|
+
- spec/unit/mongoid/extensions/array/accessors_spec.rb
|
170
172
|
- spec/unit/mongoid/extensions/array/assimilation_spec.rb
|
171
173
|
- spec/unit/mongoid/extensions/array/conversions_spec.rb
|
172
174
|
- spec/unit/mongoid/extensions/array/parentization_spec.rb
|
@@ -239,6 +241,7 @@ test_files:
|
|
239
241
|
- spec/unit/mongoid/criteria_spec.rb
|
240
242
|
- spec/unit/mongoid/document_spec.rb
|
241
243
|
- spec/unit/mongoid/dynamic_finder_spec.rb
|
244
|
+
- spec/unit/mongoid/extensions/array/accessors_spec.rb
|
242
245
|
- spec/unit/mongoid/extensions/array/assimilation_spec.rb
|
243
246
|
- spec/unit/mongoid/extensions/array/conversions_spec.rb
|
244
247
|
- spec/unit/mongoid/extensions/array/parentization_spec.rb
|