mongoid 1.0.3 → 1.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/HISTORY +15 -0
- data/VERSION +1 -1
- data/lib/mongoid/criteria.rb +25 -17
- data/lib/mongoid/extensions/float/conversions.rb +1 -0
- data/mongoid.gemspec +3 -1
- data/spec/integration/mongoid/associations_spec.rb +28 -7
- data/spec/integration/mongoid/extensions_spec.rb +26 -0
- data/spec/spec_helper.rb +8 -0
- data/spec/unit/mongoid/extensions/float/conversions_spec.rb +33 -5
- metadata +3 -1
data/HISTORY
CHANGED
@@ -1,3 +1,18 @@
|
|
1
|
+
=== 1.0.4
|
2
|
+
- Modified criteria to use the querying class
|
3
|
+
when instantiating documents if there are no
|
4
|
+
subclasses.
|
5
|
+
|
6
|
+
- Floats that are empty strings or nil get
|
7
|
+
defaulted to 0.0
|
8
|
+
|
9
|
+
=== 1.0.3
|
10
|
+
- Small performance improvements on finders
|
11
|
+
|
12
|
+
- Float.set allows setting of non-numeric string
|
13
|
+
in order for validates_numericality_of to fail
|
14
|
+
properly.
|
15
|
+
|
1
16
|
=== 1.0.2
|
2
17
|
- Named scopes get added functionality:
|
3
18
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.
|
1
|
+
1.0.4
|
data/lib/mongoid/criteria.rb
CHANGED
@@ -185,7 +185,7 @@ module Mongoid #:nodoc:
|
|
185
185
|
true
|
186
186
|
).collect do |docs|
|
187
187
|
docs["group"] = docs["group"].collect do |attrs|
|
188
|
-
|
188
|
+
instantiate(attrs)
|
189
189
|
end
|
190
190
|
docs
|
191
191
|
end
|
@@ -234,8 +234,11 @@ module Mongoid #:nodoc:
|
|
234
234
|
# type: One of :all, :first:, or :last
|
235
235
|
# klass: The class to execute on.
|
236
236
|
def initialize(klass)
|
237
|
-
@selector
|
238
|
-
|
237
|
+
@selector, @options, @klass = {}, {}, klass
|
238
|
+
if klass.hereditary
|
239
|
+
@selector = { :_type => { "$in" => klass._types } }
|
240
|
+
@hereditary = true
|
241
|
+
end
|
239
242
|
end
|
240
243
|
|
241
244
|
# Return the last result for the +Criteria+. Essentially does a find_one on
|
@@ -251,7 +254,7 @@ module Mongoid #:nodoc:
|
|
251
254
|
sorting = [[:_id, :asc]] unless sorting
|
252
255
|
opts[:sort] = sorting.collect { |option| [ option[0], option[1].invert ] }
|
253
256
|
attributes = @klass.collection.find_one(@selector, opts)
|
254
|
-
attributes ?
|
257
|
+
attributes ? instantiate(attributes) : nil
|
255
258
|
end
|
256
259
|
|
257
260
|
# Adds a criterion to the +Criteria+ that specifies the maximum number of
|
@@ -392,7 +395,7 @@ module Mongoid #:nodoc:
|
|
392
395
|
# <tt>Criteria.select(:name).where(:name = "Chrissy").one</tt>
|
393
396
|
def one
|
394
397
|
attributes = @klass.collection.find_one(@selector, process_options)
|
395
|
-
attributes ?
|
398
|
+
attributes ? instantiate(attributes) : nil
|
396
399
|
end
|
397
400
|
|
398
401
|
alias :first :one
|
@@ -565,23 +568,12 @@ module Mongoid #:nodoc:
|
|
565
568
|
attributes = @klass.collection.find(@selector, process_options)
|
566
569
|
if attributes
|
567
570
|
@count = attributes.count
|
568
|
-
attributes.collect { |doc|
|
571
|
+
attributes.collect { |doc| instantiate(doc) }
|
569
572
|
else
|
570
573
|
[]
|
571
574
|
end
|
572
575
|
end
|
573
576
|
|
574
|
-
# Filters the field list. If no fields have been supplied, then it will be
|
575
|
-
# empty. If fields have been defined then _type will be included as well.
|
576
|
-
def process_options
|
577
|
-
fields = @options[:fields]
|
578
|
-
if fields && fields.size > 0 && !fields.include?(:_type)
|
579
|
-
fields << :_type
|
580
|
-
@options[:fields] = fields
|
581
|
-
end
|
582
|
-
@options.dup
|
583
|
-
end
|
584
|
-
|
585
577
|
# Filters the unused options out of the options +Hash+. Currently this
|
586
578
|
# takes into account the "page" and "per_page" options that would be passed
|
587
579
|
# in if using will_paginate.
|
@@ -607,6 +599,22 @@ module Mongoid #:nodoc:
|
|
607
599
|
collection.first[start.to_s]
|
608
600
|
end
|
609
601
|
|
602
|
+
# If hereditary instantiate by _type otherwise use the klass.
|
603
|
+
def instantiate(attrs)
|
604
|
+
@hereditary ? attrs["_type"].constantize.instantiate(attrs) : @klass.instantiate(attrs)
|
605
|
+
end
|
606
|
+
|
607
|
+
# Filters the field list. If no fields have been supplied, then it will be
|
608
|
+
# empty. If fields have been defined then _type will be included as well.
|
609
|
+
def process_options
|
610
|
+
fields = @options[:fields]
|
611
|
+
if fields && fields.size > 0 && !fields.include?(:_type)
|
612
|
+
fields << :_type
|
613
|
+
@options[:fields] = fields
|
614
|
+
end
|
615
|
+
@options.dup
|
616
|
+
end
|
617
|
+
|
610
618
|
# Update the selector setting the operator on the value for each key in the
|
611
619
|
# supplied attributes +Hash+.
|
612
620
|
def update_selector(attributes, operator)
|
data/mongoid.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{mongoid}
|
8
|
-
s.version = "1.0.
|
8
|
+
s.version = "1.0.4"
|
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"]
|
@@ -85,6 +85,7 @@ Gem::Specification.new do |s|
|
|
85
85
|
"spec/integration/mongoid/commands_spec.rb",
|
86
86
|
"spec/integration/mongoid/criteria_spec.rb",
|
87
87
|
"spec/integration/mongoid/document_spec.rb",
|
88
|
+
"spec/integration/mongoid/extensions_spec.rb",
|
88
89
|
"spec/integration/mongoid/finders_spec.rb",
|
89
90
|
"spec/integration/mongoid/inheritance_spec.rb",
|
90
91
|
"spec/integration/mongoid/named_scope_spec.rb",
|
@@ -153,6 +154,7 @@ Gem::Specification.new do |s|
|
|
153
154
|
"spec/integration/mongoid/commands_spec.rb",
|
154
155
|
"spec/integration/mongoid/criteria_spec.rb",
|
155
156
|
"spec/integration/mongoid/document_spec.rb",
|
157
|
+
"spec/integration/mongoid/extensions_spec.rb",
|
156
158
|
"spec/integration/mongoid/finders_spec.rb",
|
157
159
|
"spec/integration/mongoid/inheritance_spec.rb",
|
158
160
|
"spec/integration/mongoid/named_scope_spec.rb",
|
@@ -84,15 +84,36 @@ describe Mongoid::Associations do
|
|
84
84
|
|
85
85
|
context "multiple levels nested" do
|
86
86
|
|
87
|
-
|
88
|
-
|
87
|
+
context "when a has-many to has_one" do
|
88
|
+
|
89
|
+
before do
|
90
|
+
@person.phone_numbers.create(:number => "4155551212")
|
91
|
+
end
|
92
|
+
|
93
|
+
it "persists all the associations properly" do
|
94
|
+
from_db = Person.find(@person.id)
|
95
|
+
phone = from_db.phone_numbers.first
|
96
|
+
phone.create_country_code(:code => 1)
|
97
|
+
from_db.phone_numbers.first.country_code.code.should == 1
|
98
|
+
end
|
99
|
+
|
89
100
|
end
|
90
101
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
102
|
+
context "when a has-many to has-many" do
|
103
|
+
|
104
|
+
before do
|
105
|
+
@address = Address.new(:street => "Upper Street")
|
106
|
+
@person.addresses << @address
|
107
|
+
end
|
108
|
+
|
109
|
+
it "bubbles the child association up to root" do
|
110
|
+
location = Location.new(:name => "Home")
|
111
|
+
@address.locations << location
|
112
|
+
location.stubs(:valid?).returns(false)
|
113
|
+
@person.save
|
114
|
+
@person.addresses.first.locations.first.should == location
|
115
|
+
end
|
116
|
+
|
96
117
|
end
|
97
118
|
|
98
119
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Mongoid::Extensions do
|
4
|
+
|
5
|
+
context "setting floating point numbers" do
|
6
|
+
|
7
|
+
context "when value is an empty string" do
|
8
|
+
|
9
|
+
let(:person) { Person.new }
|
10
|
+
|
11
|
+
before do
|
12
|
+
Person.validates_numericality_of :blood_alcohol_content, :allow_blank => true
|
13
|
+
end
|
14
|
+
|
15
|
+
after do
|
16
|
+
Person.validations.clear
|
17
|
+
end
|
18
|
+
|
19
|
+
it "does not set the value" do
|
20
|
+
person.save.should be_true
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -37,6 +37,7 @@ class Person
|
|
37
37
|
field :aliases, :type => Array
|
38
38
|
field :map, :type => Hash
|
39
39
|
field :score, :type => Integer
|
40
|
+
field :blood_alcohol_content, :type => Float
|
40
41
|
|
41
42
|
attr_reader :rescored
|
42
43
|
|
@@ -149,9 +150,16 @@ class Address
|
|
149
150
|
field :state
|
150
151
|
field :post_code
|
151
152
|
key :street
|
153
|
+
has_many :locations
|
152
154
|
belongs_to :addressable, :inverse_of => :addresses
|
153
155
|
end
|
154
156
|
|
157
|
+
class Location
|
158
|
+
include Mongoid::Document
|
159
|
+
field :name
|
160
|
+
belongs_to :address, :inverse_of => :locations
|
161
|
+
end
|
162
|
+
|
155
163
|
class Name
|
156
164
|
include Mongoid::Document
|
157
165
|
field :first_name
|
@@ -4,18 +4,46 @@ describe Mongoid::Extensions::Float::Conversions do
|
|
4
4
|
|
5
5
|
describe "#set" do
|
6
6
|
|
7
|
-
context "when the
|
7
|
+
context "when the value is a number" do
|
8
8
|
|
9
|
-
it "converts the
|
10
|
-
Float.set(
|
9
|
+
it "converts the number to a float" do
|
10
|
+
Float.set(3.45).should == 3.45
|
11
11
|
end
|
12
12
|
|
13
13
|
end
|
14
14
|
|
15
15
|
context "when the string is not a number" do
|
16
16
|
|
17
|
-
|
18
|
-
|
17
|
+
context "when the string is non numerical" do
|
18
|
+
|
19
|
+
it "returns the string" do
|
20
|
+
Float.set("foo").should == "foo"
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
context "when the string is numerical" do
|
26
|
+
|
27
|
+
it "returns the float value for the string" do
|
28
|
+
Float.set("3.45").should == 3.45
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
context "when the string is empty" do
|
34
|
+
|
35
|
+
it "returns 0.0" do
|
36
|
+
Float.set("").should == 0.0
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
context "when the string is nil" do
|
42
|
+
|
43
|
+
it "returns 0.0" do
|
44
|
+
Float.set(nil).should == 0.0
|
45
|
+
end
|
46
|
+
|
19
47
|
end
|
20
48
|
|
21
49
|
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: 1.0.
|
4
|
+
version: 1.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Durran Jordan
|
@@ -151,6 +151,7 @@ files:
|
|
151
151
|
- spec/integration/mongoid/commands_spec.rb
|
152
152
|
- spec/integration/mongoid/criteria_spec.rb
|
153
153
|
- spec/integration/mongoid/document_spec.rb
|
154
|
+
- spec/integration/mongoid/extensions_spec.rb
|
154
155
|
- spec/integration/mongoid/finders_spec.rb
|
155
156
|
- spec/integration/mongoid/inheritance_spec.rb
|
156
157
|
- spec/integration/mongoid/named_scope_spec.rb
|
@@ -241,6 +242,7 @@ test_files:
|
|
241
242
|
- spec/integration/mongoid/commands_spec.rb
|
242
243
|
- spec/integration/mongoid/criteria_spec.rb
|
243
244
|
- spec/integration/mongoid/document_spec.rb
|
245
|
+
- spec/integration/mongoid/extensions_spec.rb
|
244
246
|
- spec/integration/mongoid/finders_spec.rb
|
245
247
|
- spec/integration/mongoid/inheritance_spec.rb
|
246
248
|
- spec/integration/mongoid/named_scope_spec.rb
|