mongoid 0.9.4 → 0.9.5
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/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
|