mongoid 0.7.4 → 0.7.5

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.7.4
1
+ 0.7.5
@@ -100,6 +100,7 @@ module Mongoid #:nodoc:
100
100
  # objects of the type of class provided.
101
101
  def execute(klass = nil)
102
102
  @klass = klass if klass
103
+ filter_options
103
104
  if type == :first
104
105
  attributes = klass.collection.find_one(@selector, @options)
105
106
  attributes ? @klass.instantiate(attributes) : nil
@@ -233,7 +234,8 @@ module Mongoid #:nodoc:
233
234
  # will replace it with a skip parameter and return the same value. Defaults
234
235
  # to 20 if nothing was provided.
235
236
  def offset
236
- offset = @options.delete(:per_page) || 20
237
+ per_page = @options[:per_page] || 20
238
+ offset = (page * per_page) - per_page
237
239
  @options[:skip] ||= offset
238
240
  end
239
241
 
@@ -256,7 +258,15 @@ module Mongoid #:nodoc:
256
258
  # Either returns the page option and removes it from the options, or
257
259
  # returns a default value of 1.
258
260
  def page
259
- @options.delete(:page) || 1
261
+ @options[:page] || 1
262
+ end
263
+
264
+ # Returns the number of results per page or the default of 20.
265
+ def per_page
266
+ num = @options[:per_page] || 20
267
+ skip = (page * num) - num
268
+ @options[:skip] = skip
269
+ num
260
270
  end
261
271
 
262
272
  # Adds a criterion to the +Criteria+ that specifies the fields that will
@@ -339,5 +349,11 @@ module Mongoid #:nodoc:
339
349
  @selector = selector; self
340
350
  end
341
351
 
352
+ protected
353
+ def filter_options
354
+ @options.delete(:page)
355
+ @options.delete(:per_page)
356
+ end
357
+
342
358
  end
343
359
  end
@@ -126,10 +126,15 @@ module Mongoid #:nodoc:
126
126
  end
127
127
 
128
128
  # Instantiate a new object, only when loaded from the database.
129
- def instantiate(attributes = {})
130
- document = allocate
131
- document.instance_variable_set(:@attributes, attributes.with_indifferent_access)
132
- document
129
+ def instantiate(attrs = {})
130
+ attributes = attrs.with_indifferent_access
131
+ if attributes[:_id]
132
+ document = allocate
133
+ document.instance_variable_set(:@attributes, attributes)
134
+ return document
135
+ else
136
+ return new(attributes)
137
+ end
133
138
  end
134
139
 
135
140
  # Defines the field that will be used for the id of this +Document+. This
@@ -167,7 +172,7 @@ module Mongoid #:nodoc:
167
172
  # Returns paginated array of docs.
168
173
  def paginate(params = {})
169
174
  criteria = Criteria.translate(:all, params)
170
- WillPaginate::Collection.create(criteria.page, criteria.offset, 0) do |pager|
175
+ WillPaginate::Collection.create(criteria.page, criteria.per_page, 0) do |pager|
171
176
  results = criteria.execute(self)
172
177
  pager.total_entries = results.size
173
178
  pager.replace(results)
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{mongoid}
8
- s.version = "0.7.4"
8
+ s.version = "0.7.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-11-14}
12
+ s.date = %q{2009-11-15}
13
13
  s.email = %q{durran@gmail.com}
14
14
  s.extra_rdoc_files = [
15
15
  "README.textile"
@@ -88,6 +88,23 @@ describe Mongoid::Criteria do
88
88
 
89
89
  describe "#execute" do
90
90
 
91
+ context "filtering" do
92
+
93
+ before do
94
+ @collection = mock
95
+ Person.expects(:collection).returns(@collection)
96
+ @collection.expects(:find).with(@criteria.selector, @criteria.options).returns([])
97
+ @criteria = Mongoid::Criteria.new(:all).extras(:page => 1, :per_page => 20)
98
+ end
99
+
100
+ it "filters out unused params" do
101
+ @criteria.execute(Person)
102
+ @criteria.options[:page].should be_nil
103
+ @criteria.options[:per_page].should be_nil
104
+ end
105
+
106
+ end
107
+
91
108
  context "when type is :first" do
92
109
 
93
110
  context "when documents exist" do
@@ -260,17 +277,11 @@ describe Mongoid::Criteria do
260
277
  context "when the per_page option exists" do
261
278
 
262
279
  before do
263
- @criteria = Mongoid::Criteria.new(:all).extras({ :per_page => 20 })
280
+ @criteria = Mongoid::Criteria.new(:all).extras({ :per_page => 20, :page => 3 })
264
281
  end
265
282
 
266
283
  it "returns the per_page option" do
267
- @criteria.offset.should == 20
268
- end
269
-
270
- it "replaces per_page with skip in the options" do
271
- @criteria.offset
272
- @criteria.options[:per_page].should be_nil
273
- @criteria.options[:skip].should == 20
284
+ @criteria.offset.should == 40
274
285
  end
275
286
 
276
287
  end
@@ -289,13 +300,30 @@ describe Mongoid::Criteria do
289
300
 
290
301
  context "when no option exists" do
291
302
 
292
- before do
293
- @criteria = Mongoid::Criteria.new(:all)
303
+ context "when page option exists" do
304
+
305
+ before do
306
+ @criteria = Mongoid::Criteria.new(:all).extras({ :page => 2 })
307
+ end
308
+
309
+ it "adds the skip option to the options and returns it" do
310
+ @criteria.offset.should == 20
311
+ @criteria.options[:skip].should == 20
312
+ end
313
+
294
314
  end
295
315
 
296
- it "adds the skip option to the options and returns it" do
297
- @criteria.offset.should == 20
298
- @criteria.options[:skip].should == 20
316
+ context "when page option does not exist" do
317
+
318
+ before do
319
+ @criteria = Mongoid::Criteria.new(:all)
320
+ end
321
+
322
+ it "adds the skip option to the options and returns it" do
323
+ @criteria.offset.should == 0
324
+ @criteria.options[:skip].should == 0
325
+ end
326
+
299
327
  end
300
328
 
301
329
  end
@@ -331,11 +359,6 @@ describe Mongoid::Criteria do
331
359
  @criteria.page.should == 5
332
360
  end
333
361
 
334
- it "deletes the page option from the options" do
335
- @criteria.page.should == 5
336
- @criteria.options[:page].should be_nil
337
- end
338
-
339
362
  end
340
363
 
341
364
  context "when the page option does not exist" do
@@ -352,6 +375,34 @@ describe Mongoid::Criteria do
352
375
 
353
376
  end
354
377
 
378
+ describe "#per_page" do
379
+
380
+ context "when the per_page option exists" do
381
+
382
+ before do
383
+ @criteria = Mongoid::Criteria.new(:all).extras({ :per_page => 10 })
384
+ end
385
+
386
+ it "returns the per_page option" do
387
+ @criteria.per_page.should == 10
388
+ end
389
+
390
+ end
391
+
392
+ context "when the per_page option does not exist" do
393
+
394
+ before do
395
+ @criteria = Mongoid::Criteria.new(:all)
396
+ end
397
+
398
+ it "returns 1" do
399
+ @criteria.per_page.should == 20
400
+ end
401
+
402
+ end
403
+
404
+ end
405
+
355
406
  describe "#select" do
356
407
 
357
408
  context "when args are provided" do
@@ -371,13 +371,30 @@ describe Mongoid::Document do
371
371
 
372
372
  describe "#instantiate" do
373
373
 
374
- before do
375
- @attributes = { :_id => "1", :title => "Sir", :age => 30 }
376
- @person = Person.new(@attributes)
374
+ context "when document is new" do
375
+
376
+ before do
377
+ @attributes = { :_id => "1", :title => "Sir", :age => 30 }
378
+ @person = Person.new(@attributes)
379
+ end
380
+
381
+ it "sets the attributes directly" do
382
+ Person.instantiate(@attributes).should == @person
383
+ end
384
+
377
385
  end
378
386
 
379
- it "sets the attributes directly" do
380
- Person.instantiate(@attributes).should == @person
387
+ context "when document is not new" do
388
+
389
+ before do
390
+ @attributes = { :title => "Sir", :age => 30 }
391
+ @person = Person.new(@attributes)
392
+ end
393
+
394
+ it "instantiates normally" do
395
+ Person.instantiate(@attributes).id.should_not be_nil
396
+ end
397
+
381
398
  end
382
399
 
383
400
  end
@@ -519,7 +536,7 @@ describe Mongoid::Document do
519
536
  describe "#paginate" do
520
537
 
521
538
  before do
522
- @criteria = stub(:page => 1, :offset => "20")
539
+ @criteria = stub(:page => 1, :per_page => "20")
523
540
  end
524
541
 
525
542
  context "when pagination parameters are passed" 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.7.4
4
+ version: 0.7.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-11-14 00:00:00 -05:00
12
+ date: 2009-11-15 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency