mongoid 1.0.3 → 1.0.4
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/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
|