mongoid 0.4.4 → 0.4.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.
@@ -98,7 +98,7 @@ Old School:
98
98
  New School:
99
99
 
100
100
  <pre>
101
- Criteria.new.select(:title => "Sir").only(:first_name, :last_name).skip(10).limit(10).execute
101
+ Person.select(:first_name, :last_name).where(:title => "Sir").skip(10).limit(10).execute
102
102
  Criteria.translate(:conditions => { :title => "Sir" }).execute
103
103
  </pre>
104
104
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.4
1
+ 0.4.5
@@ -43,10 +43,6 @@ module Mongoid
43
43
  # Raised when the database connection has not been set up.
44
44
  class NoConnectionError < RuntimeError; end
45
45
 
46
- # Raised when :document_class is not provided in the attributes
47
- # hash when creating a new Document
48
- class ClassNotProvidedError < RuntimeError; end
49
-
50
46
  # Raised when an association is defined on the class, but the
51
47
  # attribute in the hash is not an Array or Hash.
52
48
  class TypeMismatchError < RuntimeError; end
@@ -150,25 +150,6 @@ module Mongoid #:nodoc:
150
150
  @options[:limit] = value; self
151
151
  end
152
152
 
153
- # Adds a criterion to the +Criteria+ that specifies values that must
154
- # be matched in order to return results. This is similar to a SQL "WHERE"
155
- # clause. This is the actual selector that will be provided to MongoDB,
156
- # similar to the Javascript object that is used when performing a find()
157
- # in the MongoDB console.
158
- #
159
- # Options:
160
- #
161
- # selectior: A +Hash+ that must match the attributes of the +Document+.
162
- #
163
- # Example:
164
- #
165
- # <tt>criteria.select(:field1 => "value1", :field2 => 15)</tt>
166
- #
167
- # Returns: <tt>self</tt>
168
- def select(selector = {})
169
- @selector = selector; self
170
- end
171
-
172
153
  # Adds a criterion to the +Criteria+ that specifies values where none
173
154
  # should match in order to return results. This is similar to an SQL "NOT IN"
174
155
  # clause. The MongoDB conditional operator that will be used is "$nin".
@@ -211,14 +192,14 @@ module Mongoid #:nodoc:
211
192
  #
212
193
  # Options:
213
194
  #
214
- # params: A list of field names to retrict the returned fields to.
195
+ # args: A list of field names to retrict the returned fields to.
215
196
  #
216
197
  # Example:
217
198
  #
218
- # <tt>criteria.only(:field1, :field2, :field3)</tt>
199
+ # <tt>criteria.select(:field1, :field2, :field3)</tt>
219
200
  #
220
201
  # Returns: <tt>self</tt>
221
- def only(*args)
202
+ def select(*args)
222
203
  @options[:fields] = args.flatten; self
223
204
  end
224
205
 
@@ -262,7 +243,26 @@ module Mongoid #:nodoc:
262
243
  def self.translate(*args)
263
244
  type, params = args[0], args[1] || {}
264
245
  return new(:first).id(type.to_s) if type.is_a?(String)
265
- return new(type).select(params.delete(:conditions)).extras(params)
246
+ return new(type).where(params.delete(:conditions)).extras(params)
247
+ end
248
+
249
+ # Adds a criterion to the +Criteria+ that specifies values that must
250
+ # be matched in order to return results. This is similar to a SQL "WHERE"
251
+ # clause. This is the actual selector that will be provided to MongoDB,
252
+ # similar to the Javascript object that is used when performing a find()
253
+ # in the MongoDB console.
254
+ #
255
+ # Options:
256
+ #
257
+ # selectior: A +Hash+ that must match the attributes of the +Document+.
258
+ #
259
+ # Example:
260
+ #
261
+ # <tt>criteria.where(:field1 => "value1", :field2 => 15)</tt>
262
+ #
263
+ # Returns: <tt>self</tt>
264
+ def where(selector = {})
265
+ @selector = selector; self
266
266
  end
267
267
 
268
268
  end
@@ -26,7 +26,24 @@ module Mongoid #:nodoc:
26
26
  collection.group(fields, selector, { :count => 0 }, AGGREGATE_REDUCE)
27
27
  end
28
28
 
29
- # Adds the association back to the parent document.
29
+ # Adds the association back to the parent document. This macro is
30
+ # necessary to set the references from the child back to the parent
31
+ # document. If a child does not define this association calling
32
+ # persistence methods on the child object will cause a save to fail.
33
+ #
34
+ # Options:
35
+ #
36
+ # association_name: A +Symbol+ that matches the name of the parent class.
37
+ #
38
+ # Example:
39
+ #
40
+ # class Person < Mongoid::Document
41
+ # has_many :addresses
42
+ # end
43
+ #
44
+ # class Address < Mongoid::Document
45
+ # belongs_to :person
46
+ # end
30
47
  def belongs_to(association_name)
31
48
  @embedded = true
32
49
  add_association(:belongs_to, association_name.to_s.classify, association_name)
@@ -42,6 +59,15 @@ module Mongoid #:nodoc:
42
59
  # Defines all the fields that are accessable on the Document
43
60
  # For each field that is defined, a getter and setter will be
44
61
  # added as an instance method to the Document.
62
+ #
63
+ # Options:
64
+ #
65
+ # name: The name of the field, as a +Symbol+.
66
+ # options: A +Hash+ of options to supply to the +Field+.
67
+ #
68
+ # Example:
69
+ #
70
+ # <tt>field :score, :default => 0</tt>
45
71
  def field(name, options = {})
46
72
  @fields ||= {}
47
73
  @fields[name] = Field.new(name, options)
@@ -54,9 +80,19 @@ module Mongoid #:nodoc:
54
80
  @fields
55
81
  end
56
82
 
57
- # Find all Documents in several ways.
58
- # Model.find(:first, :attribute => "value")
59
- # Model.find(:all, :attribute => "value")
83
+ # Find a +Document+ in several different ways.
84
+ #
85
+ # If a +String+ is provided, it will be assumed that it is a
86
+ # representation of a Mongo::ObjectID and will attempt to find a single
87
+ # +Document+ based on that id. If a +Symbol+ and +Hash+ is provided then
88
+ # it will attempt to find either a single +Document+ or multiples based
89
+ # on the conditions provided and the first parameter.
90
+ #
91
+ # <tt>Person.find(:first, :conditions => { :attribute => "value" })</tt>
92
+ #
93
+ # <tt>Person.find(:all, :conditions => { :attribute => "value" })</tt>
94
+ #
95
+ # <tt>Person.find(Mongo::ObjectID.new.to_s)</tt>
60
96
  def find(*args)
61
97
  Criteria.translate(*args).execute(self)
62
98
  end
@@ -82,7 +118,23 @@ module Mongoid #:nodoc:
82
118
  end
83
119
  end
84
120
 
85
- # Create a one-to-many association between Documents.
121
+ # Adds the association from a parent document to its children. The name
122
+ # of the association needs to be a pluralized form of the child class
123
+ # name.
124
+ #
125
+ # Options:
126
+ #
127
+ # association_name: A +Symbol+ that is the plural child class name.
128
+ #
129
+ # Example:
130
+ #
131
+ # class Person < Mongoid::Document
132
+ # has_many :addresses
133
+ # end
134
+ #
135
+ # class Address < Mongoid::Document
136
+ # belongs_to :person
137
+ # end
86
138
  def has_many(association_name)
87
139
  add_association(:has_many, association_name.to_s.classify, association_name)
88
140
  end
@@ -127,6 +179,23 @@ module Mongoid #:nodoc:
127
179
  end
128
180
  end
129
181
 
182
+ # Entry point for creating a new criteria from a Document. This will
183
+ # instantiate a new +Criteria+ object with the supplied select criterion
184
+ # already added to it.
185
+ #
186
+ # Options:
187
+ #
188
+ # args: A list of field names to retrict the returned fields to.
189
+ #
190
+ # Example:
191
+ #
192
+ # <tt>Person.select(:field1, :field2, :field3)</tt>
193
+ #
194
+ # Returns: <tt>Criteria</tt>
195
+ def select(*args)
196
+ Criteria.new(:all).select(*args)
197
+ end
198
+
130
199
  end
131
200
 
132
201
  # Get the Mongo::Collection associated with this Document.
@@ -200,7 +269,8 @@ module Mongoid #:nodoc:
200
269
 
201
270
  # Write to the attributes hash.
202
271
  def write_attribute(name, value)
203
- @attributes[name.to_sym] = value
272
+ symbol = name.to_sym
273
+ @attributes[name.to_sym] = fields[symbol].value(value)
204
274
  end
205
275
 
206
276
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{mongoid}
8
- s.version = "0.4.4"
8
+ s.version = "0.4.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-10-17}
12
+ s.date = %q{2009-10-18}
13
13
  s.email = %q{durran@gmail.com}
14
14
  s.extra_rdoc_files = [
15
15
  "README.textile"
@@ -28,7 +28,7 @@ describe Mongoid::Document do
28
28
  describe "#find" do
29
29
 
30
30
  before do
31
- @person = Person.create(:title => "Test", :document_class => "Person")
31
+ @person = Person.create(:title => "Test")
32
32
  end
33
33
 
34
34
  context "finding all documents" do
@@ -64,7 +64,7 @@ describe Mongoid::Document do
64
64
 
65
65
  before do
66
66
  30.times do |num|
67
- Person.create(:title => "Sir", :age => num, :document_class => "Person")
67
+ Person.create(:title => "Sir", :age => num)
68
68
  end
69
69
  end
70
70
 
@@ -82,7 +82,7 @@ describe Mongoid::Document do
82
82
 
83
83
  before do
84
84
  30.times do |num|
85
- Person.create(:title => "Test-#{num}", :document_class => "Person")
85
+ Person.create(:title => "Test-#{num}")
86
86
  end
87
87
  end
88
88
 
@@ -6,8 +6,8 @@ describe Mongoid::Associations::HasManyAssociation do
6
6
  @first_id = Mongo::ObjectID.new
7
7
  @second_id = Mongo::ObjectID.new
8
8
  @attributes = { :addresses => [
9
- { :_id => @first_id, :street => "Street 1", :document_class => "Address" },
10
- { :_id => @second_id, :street => "Street 2", :document_class => "Address" } ] }
9
+ { :_id => @first_id, :street => "Street 1" },
10
+ { :_id => @second_id, :street => "Street 2" } ] }
11
11
  @document = stub(:attributes => @attributes)
12
12
  end
13
13
 
@@ -88,14 +88,14 @@ describe Mongoid::Associations::HasManyAssociation do
88
88
  end
89
89
 
90
90
  it "adds a new document to the array with the suppied parameters" do
91
- @association.build({ :street => "Street 1", :document_class => "Address" })
91
+ @association.build({ :street => "Street 1" })
92
92
  @association.length.should == 3
93
93
  @association[2].should be_a_kind_of(Address)
94
94
  @association[2].street.should == "Street 1"
95
95
  end
96
96
 
97
97
  it "returns the newly built object in the association" do
98
- address = @association.build({ :street => "Yet Another", :document_class => "Address" })
98
+ address = @association.build({ :street => "Yet Another" })
99
99
  address.should be_a_kind_of(Address)
100
100
  address.street.should == "Yet Another"
101
101
  end
@@ -127,19 +127,6 @@ describe Mongoid::Criteria do
127
127
 
128
128
  end
129
129
 
130
- describe "#select" do
131
-
132
- it "adds the clause to the selector" do
133
- @criteria.select(:title => "Title", :text => "Text")
134
- @criteria.selector.should == { :title => "Title", :text => "Text" }
135
- end
136
-
137
- it "returns self" do
138
- @criteria.select.should == @criteria
139
- end
140
-
141
- end
142
-
143
130
  describe "#not_in" do
144
131
 
145
132
  it "adds the exclusion to the selector" do
@@ -170,15 +157,15 @@ describe Mongoid::Criteria do
170
157
 
171
158
  end
172
159
 
173
- describe "#only" do
160
+ describe "#select" do
174
161
 
175
162
  it "adds the options for limiting by fields" do
176
- @criteria.only(:title, :text)
163
+ @criteria.select(:title, :text)
177
164
  @criteria.options.should == { :fields => [ :title, :text ] }
178
165
  end
179
166
 
180
167
  it "returns self" do
181
- @criteria.only.should == @criteria
168
+ @criteria.select.should == @criteria
182
169
  end
183
170
 
184
171
  end
@@ -288,4 +275,17 @@ describe Mongoid::Criteria do
288
275
 
289
276
  end
290
277
 
278
+ describe "#where" do
279
+
280
+ it "adds the clause to the selector" do
281
+ @criteria.where(:title => "Title", :text => "Text")
282
+ @criteria.selector.should == { :title => "Title", :text => "Text" }
283
+ end
284
+
285
+ it "returns self" do
286
+ @criteria.where.should == @criteria
287
+ end
288
+
289
+ end
290
+
291
291
  end
@@ -136,7 +136,7 @@ describe Mongoid::Document do
136
136
  describe "#find" do
137
137
 
138
138
  before do
139
- @attributes = { :document_class => "Person" }
139
+ @attributes = {}
140
140
  @criteria = mock
141
141
  end
142
142
 
@@ -198,7 +198,7 @@ describe Mongoid::Document do
198
198
  describe "#first" do
199
199
 
200
200
  before do
201
- @attributes = { :document_class => "Person" }
201
+ @attributes = {}
202
202
  end
203
203
 
204
204
  context "when a selector is provided" do
@@ -259,13 +259,13 @@ describe Mongoid::Document do
259
259
  before do
260
260
  @attributes = { :title => "Sir",
261
261
  :addresses => [
262
- { :street => "Street 1", :document_class => "Address" },
263
- { :street => "Street 2", :document_class => "Address" } ] }
262
+ { :street => "Street 1" },
263
+ { :street => "Street 2" } ] }
264
264
  @person = Person.new(@attributes)
265
265
  end
266
266
 
267
267
  it "sets the attributes for the association" do
268
- address = Address.new(:street => "New Street", :document_class => "Address")
268
+ address = Address.new(:street => "New Street")
269
269
  @person.addresses = [address]
270
270
  @person.addresses.first.street.should == "New Street"
271
271
  end
@@ -300,7 +300,7 @@ describe Mongoid::Document do
300
300
  end
301
301
 
302
302
  it "sets the attributes for the association" do
303
- name = Name.new(:first_name => "New Name", :document_class => "Name")
303
+ name = Name.new(:first_name => "New Name")
304
304
  @person.name = name
305
305
  @person.name.first_name.should == "New Name"
306
306
  end
@@ -439,8 +439,8 @@ describe Mongoid::Document do
439
439
  before do
440
440
  @attributes = { :title => "Sir",
441
441
  :addresses => [
442
- { :street => "Street 1", :document_class => "Address" },
443
- { :street => "Street 2", :document_class => "Address" } ] }
442
+ { :street => "Street 1" },
443
+ { :street => "Street 2" } ] }
444
444
  @person = Person.new(@attributes)
445
445
  end
446
446
 
@@ -479,6 +479,15 @@ describe Mongoid::Document do
479
479
 
480
480
  end
481
481
 
482
+ describe "#select" do
483
+
484
+ it "returns a new criteria with select conditions added" do
485
+ criteria = Person.select(:title, :age)
486
+ criteria.options.should == { :fields => [ :title, :age ] }
487
+ end
488
+
489
+ end
490
+
482
491
  describe "#to_param" do
483
492
 
484
493
  it "returns the id" do
@@ -488,6 +497,24 @@ describe Mongoid::Document do
488
497
 
489
498
  end
490
499
 
500
+ describe "#write_attribute" do
501
+
502
+ context "when attribute does not exist" do
503
+
504
+ before do
505
+ Person.field :weight, :default => 100
506
+ @person = Person.new
507
+ end
508
+
509
+ it "returns the default value" do
510
+ @person.weight = nil
511
+ @person.weight.should == 100
512
+ end
513
+
514
+ end
515
+
516
+ end
517
+
491
518
  context "validations" do
492
519
 
493
520
  context "when defining using macros" do
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.4
4
+ version: 0.4.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-10-17 00:00:00 -04:00
12
+ date: 2009-10-18 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency