mongoid 2.0.0.alpha → 2.0.0.beta.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/lib/mongoid.rb +11 -5
- data/lib/mongoid/associations.rb +112 -107
- data/lib/mongoid/associations/belongs_to_related.rb +2 -3
- data/lib/mongoid/associations/embedded_in.rb +12 -4
- data/lib/mongoid/associations/{embed_many.rb → embeds_many.rb} +101 -32
- data/lib/mongoid/associations/{embed_one.rb → embeds_one.rb} +10 -10
- data/lib/mongoid/associations/has_many_related.rb +51 -5
- data/lib/mongoid/associations/has_one_related.rb +9 -5
- data/lib/mongoid/associations/meta_data.rb +2 -1
- data/lib/mongoid/associations/options.rb +15 -6
- data/lib/mongoid/associations/proxy.rb +14 -21
- data/lib/mongoid/attributes.rb +34 -13
- data/lib/mongoid/callbacks.rb +1 -2
- data/lib/mongoid/collection.rb +4 -3
- data/lib/mongoid/collections.rb +41 -0
- data/lib/mongoid/collections/master.rb +3 -2
- data/lib/mongoid/collections/slaves.rb +3 -2
- data/lib/mongoid/components.rb +4 -1
- data/lib/mongoid/config.rb +163 -13
- data/lib/mongoid/contexts.rb +1 -2
- data/lib/mongoid/contexts/enumerable.rb +1 -1
- data/lib/mongoid/contexts/mongo.rb +1 -1
- data/lib/mongoid/contexts/paging.rb +10 -2
- data/lib/mongoid/criteria.rb +13 -22
- data/lib/mongoid/criterion/exclusion.rb +3 -3
- data/lib/mongoid/criterion/inclusion.rb +17 -0
- data/lib/mongoid/criterion/optional.rb +1 -1
- data/lib/mongoid/dirty.rb +253 -0
- data/lib/mongoid/document.rb +40 -85
- data/lib/mongoid/errors.rb +48 -1
- data/lib/mongoid/extensions.rb +11 -9
- data/lib/mongoid/extensions/big_decimal/conversions.rb +2 -2
- data/lib/mongoid/extensions/boolean/conversions.rb +8 -2
- data/lib/mongoid/extensions/date/conversions.rb +13 -4
- data/lib/mongoid/extensions/datetime/conversions.rb +1 -6
- data/lib/mongoid/extensions/float/conversions.rb +5 -1
- data/lib/mongoid/extensions/hash/assimilation.rb +12 -3
- data/lib/mongoid/extensions/hash/conversions.rb +34 -4
- data/lib/mongoid/extensions/integer/conversions.rb +5 -1
- data/lib/mongoid/extensions/nil/assimilation.rb +4 -0
- data/lib/mongoid/extensions/object/conversions.rb +3 -3
- data/lib/mongoid/extensions/string/conversions.rb +1 -1
- data/lib/mongoid/extensions/symbol/inflections.rb +5 -2
- data/lib/mongoid/extensions/time_conversions.rb +35 -0
- data/lib/mongoid/factory.rb +2 -1
- data/lib/mongoid/field.rb +15 -2
- data/lib/mongoid/fields.rb +1 -1
- data/lib/mongoid/identity.rb +3 -3
- data/lib/mongoid/indexes.rb +3 -3
- data/lib/mongoid/matchers.rb +1 -2
- data/lib/mongoid/memoization.rb +8 -2
- data/lib/mongoid/named_scope.rb +0 -5
- data/lib/mongoid/observable.rb +1 -1
- data/lib/mongoid/paths.rb +30 -22
- data/lib/mongoid/persistence.rb +218 -0
- data/lib/mongoid/persistence/command.rb +39 -0
- data/lib/mongoid/persistence/insert.rb +47 -0
- data/lib/mongoid/persistence/insert_embedded.rb +38 -0
- data/lib/mongoid/persistence/remove.rb +39 -0
- data/lib/mongoid/persistence/remove_all.rb +37 -0
- data/lib/mongoid/persistence/remove_embedded.rb +50 -0
- data/lib/mongoid/persistence/update.rb +63 -0
- data/lib/mongoid/railtie.rb +53 -0
- data/lib/mongoid/railties/database.rake +37 -0
- data/lib/mongoid/timestamps.rb +2 -2
- data/lib/mongoid/validations.rb +2 -2
- data/lib/mongoid/validations/associated.rb +2 -2
- data/lib/mongoid/validations/uniqueness.rb +13 -2
- data/lib/mongoid/version.rb +4 -0
- data/lib/mongoid/versioning.rb +3 -2
- data/lib/rails/generators/mongoid/config/config_generator.rb +41 -0
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +24 -0
- data/lib/rails/generators/mongoid/model/model_generator.rb +24 -0
- data/lib/rails/generators/mongoid/model/templates/model.rb +15 -0
- data/lib/rails/generators/mongoid_generator.rb +61 -0
- metadata +76 -301
- data/.gitignore +0 -6
- data/.watchr +0 -29
- data/Rakefile +0 -52
- data/VERSION +0 -1
- data/caliper.yml +0 -4
- data/lib/mongoid/collections/mimic.rb +0 -46
- data/lib/mongoid/commands.rb +0 -161
- data/lib/mongoid/commands/create.rb +0 -19
- data/lib/mongoid/commands/delete.rb +0 -16
- data/lib/mongoid/commands/delete_all.rb +0 -23
- data/lib/mongoid/commands/deletion.rb +0 -18
- data/lib/mongoid/commands/destroy.rb +0 -17
- data/lib/mongoid/commands/destroy_all.rb +0 -23
- data/lib/mongoid/commands/save.rb +0 -29
- data/lib/mongoid/extensions/time/conversions.rb +0 -18
- data/mongoid.gemspec +0 -408
- data/perf/benchmark.rb +0 -77
- data/spec/integration/mongoid/associations_spec.rb +0 -340
- data/spec/integration/mongoid/attributes_spec.rb +0 -22
- data/spec/integration/mongoid/commands_spec.rb +0 -227
- data/spec/integration/mongoid/contexts/enumerable_spec.rb +0 -33
- data/spec/integration/mongoid/criteria_spec.rb +0 -272
- data/spec/integration/mongoid/document_spec.rb +0 -650
- data/spec/integration/mongoid/extensions_spec.rb +0 -22
- data/spec/integration/mongoid/finders_spec.rb +0 -119
- data/spec/integration/mongoid/inheritance_spec.rb +0 -137
- data/spec/integration/mongoid/named_scope_spec.rb +0 -46
- data/spec/models/address.rb +0 -39
- data/spec/models/animal.rb +0 -6
- data/spec/models/callbacks.rb +0 -18
- data/spec/models/comment.rb +0 -8
- data/spec/models/country_code.rb +0 -6
- data/spec/models/employer.rb +0 -5
- data/spec/models/game.rb +0 -7
- data/spec/models/inheritance.rb +0 -56
- data/spec/models/location.rb +0 -5
- data/spec/models/mixed_drink.rb +0 -4
- data/spec/models/name.rb +0 -13
- data/spec/models/namespacing.rb +0 -11
- data/spec/models/patient.rb +0 -4
- data/spec/models/person.rb +0 -99
- data/spec/models/pet.rb +0 -7
- data/spec/models/pet_owner.rb +0 -6
- data/spec/models/phone.rb +0 -7
- data/spec/models/post.rb +0 -15
- data/spec/models/translation.rb +0 -5
- data/spec/models/vet_visit.rb +0 -5
- data/spec/spec.opts +0 -3
- data/spec/spec_helper.rb +0 -31
- data/spec/unit/mongoid/associations/belongs_to_related_spec.rb +0 -145
- data/spec/unit/mongoid/associations/embed_many_spec.rb +0 -516
- data/spec/unit/mongoid/associations/embed_one_spec.rb +0 -282
- data/spec/unit/mongoid/associations/embedded_in_spec.rb +0 -193
- data/spec/unit/mongoid/associations/has_many_related_spec.rb +0 -418
- data/spec/unit/mongoid/associations/has_one_related_spec.rb +0 -179
- data/spec/unit/mongoid/associations/meta_data_spec.rb +0 -88
- data/spec/unit/mongoid/associations/options_spec.rb +0 -192
- data/spec/unit/mongoid/associations_spec.rb +0 -595
- data/spec/unit/mongoid/attributes_spec.rb +0 -507
- data/spec/unit/mongoid/callbacks_spec.rb +0 -55
- data/spec/unit/mongoid/collection_spec.rb +0 -187
- data/spec/unit/mongoid/collections/cyclic_iterator_spec.rb +0 -75
- data/spec/unit/mongoid/collections/master_spec.rb +0 -41
- data/spec/unit/mongoid/collections/mimic_spec.rb +0 -43
- data/spec/unit/mongoid/collections/slaves_spec.rb +0 -81
- data/spec/unit/mongoid/commands/create_spec.rb +0 -31
- data/spec/unit/mongoid/commands/delete_all_spec.rb +0 -58
- data/spec/unit/mongoid/commands/delete_spec.rb +0 -38
- data/spec/unit/mongoid/commands/destroy_all_spec.rb +0 -21
- data/spec/unit/mongoid/commands/destroy_spec.rb +0 -51
- data/spec/unit/mongoid/commands/save_spec.rb +0 -107
- data/spec/unit/mongoid/commands_spec.rb +0 -270
- data/spec/unit/mongoid/config_spec.rb +0 -172
- data/spec/unit/mongoid/contexts/enumerable_spec.rb +0 -421
- data/spec/unit/mongoid/contexts/mongo_spec.rb +0 -682
- data/spec/unit/mongoid/contexts_spec.rb +0 -25
- data/spec/unit/mongoid/criteria_spec.rb +0 -824
- data/spec/unit/mongoid/criterion/complex_spec.rb +0 -19
- data/spec/unit/mongoid/criterion/exclusion_spec.rb +0 -91
- data/spec/unit/mongoid/criterion/inclusion_spec.rb +0 -219
- data/spec/unit/mongoid/criterion/optional_spec.rb +0 -319
- data/spec/unit/mongoid/cursor_spec.rb +0 -74
- data/spec/unit/mongoid/deprecation_spec.rb +0 -24
- data/spec/unit/mongoid/document_spec.rb +0 -818
- data/spec/unit/mongoid/errors_spec.rb +0 -103
- data/spec/unit/mongoid/extensions/array/accessors_spec.rb +0 -50
- data/spec/unit/mongoid/extensions/array/assimilation_spec.rb +0 -24
- data/spec/unit/mongoid/extensions/array/conversions_spec.rb +0 -35
- data/spec/unit/mongoid/extensions/array/parentization_spec.rb +0 -20
- data/spec/unit/mongoid/extensions/big_decimal/conversions_spec.rb +0 -22
- data/spec/unit/mongoid/extensions/binary/conversions_spec.rb +0 -22
- data/spec/unit/mongoid/extensions/boolean/conversions_spec.rb +0 -49
- data/spec/unit/mongoid/extensions/date/conversions_spec.rb +0 -102
- data/spec/unit/mongoid/extensions/datetime/conversions_spec.rb +0 -67
- data/spec/unit/mongoid/extensions/float/conversions_spec.rb +0 -61
- data/spec/unit/mongoid/extensions/hash/accessors_spec.rb +0 -184
- data/spec/unit/mongoid/extensions/hash/assimilation_spec.rb +0 -46
- data/spec/unit/mongoid/extensions/hash/conversions_spec.rb +0 -21
- data/spec/unit/mongoid/extensions/hash/criteria_helpers_spec.rb +0 -17
- data/spec/unit/mongoid/extensions/hash/scoping_spec.rb +0 -14
- data/spec/unit/mongoid/extensions/integer/conversions_spec.rb +0 -61
- data/spec/unit/mongoid/extensions/nil/assimilation_spec.rb +0 -24
- data/spec/unit/mongoid/extensions/object/conversions_spec.rb +0 -57
- data/spec/unit/mongoid/extensions/proc/scoping_spec.rb +0 -34
- data/spec/unit/mongoid/extensions/string/conversions_spec.rb +0 -17
- data/spec/unit/mongoid/extensions/string/inflections_spec.rb +0 -208
- data/spec/unit/mongoid/extensions/symbol/inflections_spec.rb +0 -91
- data/spec/unit/mongoid/extensions/time/conversions_spec.rb +0 -70
- data/spec/unit/mongoid/extras_spec.rb +0 -102
- data/spec/unit/mongoid/factory_spec.rb +0 -31
- data/spec/unit/mongoid/field_spec.rb +0 -143
- data/spec/unit/mongoid/fields_spec.rb +0 -181
- data/spec/unit/mongoid/finders_spec.rb +0 -404
- data/spec/unit/mongoid/identity_spec.rb +0 -109
- data/spec/unit/mongoid/indexes_spec.rb +0 -93
- data/spec/unit/mongoid/javascript_spec.rb +0 -48
- data/spec/unit/mongoid/matchers/all_spec.rb +0 -27
- data/spec/unit/mongoid/matchers/default_spec.rb +0 -27
- data/spec/unit/mongoid/matchers/exists_spec.rb +0 -56
- data/spec/unit/mongoid/matchers/gt_spec.rb +0 -39
- data/spec/unit/mongoid/matchers/gte_spec.rb +0 -49
- data/spec/unit/mongoid/matchers/in_spec.rb +0 -27
- data/spec/unit/mongoid/matchers/lt_spec.rb +0 -39
- data/spec/unit/mongoid/matchers/lte_spec.rb +0 -49
- data/spec/unit/mongoid/matchers/ne_spec.rb +0 -27
- data/spec/unit/mongoid/matchers/nin_spec.rb +0 -27
- data/spec/unit/mongoid/matchers/size_spec.rb +0 -27
- data/spec/unit/mongoid/matchers_spec.rb +0 -329
- data/spec/unit/mongoid/memoization_spec.rb +0 -75
- data/spec/unit/mongoid/named_scope_spec.rb +0 -123
- data/spec/unit/mongoid/observable_spec.rb +0 -46
- data/spec/unit/mongoid/paths_spec.rb +0 -124
- data/spec/unit/mongoid/scope_spec.rb +0 -240
- data/spec/unit/mongoid/state_spec.rb +0 -83
- data/spec/unit/mongoid/timestamps_spec.rb +0 -25
- data/spec/unit/mongoid/validations/associated_spec.rb +0 -103
- data/spec/unit/mongoid/validations/uniqueness_spec.rb +0 -47
- data/spec/unit/mongoid/validations_spec.rb +0 -190
- data/spec/unit/mongoid/versioning_spec.rb +0 -41
- data/spec/unit/mongoid_spec.rb +0 -46
@@ -1,75 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Mongoid::Memoization do
|
4
|
-
|
5
|
-
let(:memo) { "Memo" }
|
6
|
-
|
7
|
-
before do
|
8
|
-
@person = Person.new
|
9
|
-
end
|
10
|
-
|
11
|
-
describe "#memoized" do
|
12
|
-
|
13
|
-
context "when variable has been defined" do
|
14
|
-
|
15
|
-
before do
|
16
|
-
@person.instance_variable_set("@memo", memo)
|
17
|
-
end
|
18
|
-
|
19
|
-
it "returns the memoized value" do
|
20
|
-
@person.memoized(:memo) { nil }.should == memo
|
21
|
-
end
|
22
|
-
|
23
|
-
end
|
24
|
-
|
25
|
-
context "when variable has not been defined" do
|
26
|
-
|
27
|
-
it "returns the new value" do
|
28
|
-
@person.memoized(:memo) { memo }.should == memo
|
29
|
-
end
|
30
|
-
|
31
|
-
it "memoizes the new value" do
|
32
|
-
@person.memoized(:memo) { memo }
|
33
|
-
@person.instance_variable_get("@memo").should == memo
|
34
|
-
end
|
35
|
-
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
39
|
-
|
40
|
-
describe "#reset" do
|
41
|
-
|
42
|
-
context "when variable has been defined" do
|
43
|
-
|
44
|
-
before do
|
45
|
-
@person.instance_variable_set("@memo", memo)
|
46
|
-
end
|
47
|
-
|
48
|
-
it "removes the memoized value" do
|
49
|
-
@person.reset(:memo) { nil }
|
50
|
-
@person.instance_variable_defined?("@memo").should be_false
|
51
|
-
end
|
52
|
-
|
53
|
-
it "returns the new value" do
|
54
|
-
@person.reset(:memo) { memo }.should == memo
|
55
|
-
end
|
56
|
-
|
57
|
-
end
|
58
|
-
|
59
|
-
context "when variable has not been defined" do
|
60
|
-
|
61
|
-
it "memoizes the new value" do
|
62
|
-
@person.reset(:memo) { memo }
|
63
|
-
@person.instance_variable_get("@memo").should == memo
|
64
|
-
end
|
65
|
-
|
66
|
-
it "returns the value" do
|
67
|
-
@person.reset(:memo) { memo }.should == memo
|
68
|
-
end
|
69
|
-
|
70
|
-
end
|
71
|
-
|
72
|
-
|
73
|
-
end
|
74
|
-
|
75
|
-
end
|
@@ -1,123 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Mongoid::NamedScope do
|
4
|
-
|
5
|
-
class Player
|
6
|
-
include Mongoid::Document
|
7
|
-
field :active, :type => Boolean
|
8
|
-
field :frags, :type => Integer
|
9
|
-
field :deaths, :type => Integer
|
10
|
-
field :status
|
11
|
-
|
12
|
-
named_scope :active, criteria.where(:active => true) do
|
13
|
-
def extension
|
14
|
-
"extension"
|
15
|
-
end
|
16
|
-
end
|
17
|
-
named_scope :inactive, :where => { :active => false }
|
18
|
-
named_scope :frags_over, lambda { |count| { :where => { :frags.gt => count } } }
|
19
|
-
named_scope :deaths_under, lambda { |count| criteria.where(:deaths.lt => count) }
|
20
|
-
scope :deaths_over, lambda { |count| criteria.where(:deaths.gt => count) }
|
21
|
-
|
22
|
-
class << self
|
23
|
-
def alive
|
24
|
-
criteria.where(:status => "Alive")
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
describe ".named_scope" do
|
30
|
-
|
31
|
-
it "adds a class method for the scope" do
|
32
|
-
Player.should respond_to(:active)
|
33
|
-
end
|
34
|
-
|
35
|
-
it "adds the scope to the scopes" do
|
36
|
-
Player.scopes.should include(:active)
|
37
|
-
end
|
38
|
-
|
39
|
-
context "when options are a hash" do
|
40
|
-
|
41
|
-
it "adds the selector to the scope" do
|
42
|
-
Player.inactive.selector[:active].should be_false
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
46
|
-
|
47
|
-
context "when options are a criteria" do
|
48
|
-
|
49
|
-
it "adds the selector to the scope" do
|
50
|
-
Player.active.selector[:active].should be_true
|
51
|
-
end
|
52
|
-
|
53
|
-
end
|
54
|
-
|
55
|
-
context "when options are a proc" do
|
56
|
-
|
57
|
-
context "when the proc delegates to a hash" do
|
58
|
-
|
59
|
-
it "adds the selector to the scope" do
|
60
|
-
Player.frags_over(50).selector[:frags].should == { "$gt" => 50 }
|
61
|
-
end
|
62
|
-
|
63
|
-
end
|
64
|
-
|
65
|
-
context "when the proc delegates to a criteria" do
|
66
|
-
|
67
|
-
it "adds the selector to the scope" do
|
68
|
-
Player.deaths_under(40).selector[:deaths].should == { "$lt" => 40 }
|
69
|
-
end
|
70
|
-
|
71
|
-
end
|
72
|
-
|
73
|
-
end
|
74
|
-
|
75
|
-
context "when a block is supplied" do
|
76
|
-
|
77
|
-
it "adds a class method for the scope" do
|
78
|
-
Player.should respond_to(:deaths_over)
|
79
|
-
end
|
80
|
-
|
81
|
-
it "adds the scope to the scopes" do
|
82
|
-
Player.scopes.should include(:deaths_over)
|
83
|
-
end
|
84
|
-
|
85
|
-
end
|
86
|
-
|
87
|
-
end
|
88
|
-
|
89
|
-
describe ".scope" do
|
90
|
-
|
91
|
-
it "aliases to named_scope" do
|
92
|
-
Player.should respond_to(:deaths_over)
|
93
|
-
end
|
94
|
-
|
95
|
-
end
|
96
|
-
|
97
|
-
context "chained scopes" do
|
98
|
-
|
99
|
-
context "when chaining two named scopes" do
|
100
|
-
|
101
|
-
it "merges the criteria" do
|
102
|
-
selector = Player.active.frags_over(10).selector
|
103
|
-
selector[:active].should be_true
|
104
|
-
selector[:frags].should == { "$gt" => 10 }
|
105
|
-
end
|
106
|
-
|
107
|
-
end
|
108
|
-
|
109
|
-
context "when chaining named scoped with criteria class methods" do
|
110
|
-
|
111
|
-
it "merges the criteria" do
|
112
|
-
selector = Player.active.frags_over(10).alive.selector
|
113
|
-
selector[:active].should be_true
|
114
|
-
selector[:frags].should == { "$gt" => 10 }
|
115
|
-
selector[:status].should == "Alive"
|
116
|
-
end
|
117
|
-
|
118
|
-
end
|
119
|
-
|
120
|
-
end
|
121
|
-
|
122
|
-
end
|
123
|
-
|
@@ -1,46 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Mongoid::Observable do
|
4
|
-
|
5
|
-
let(:person) do
|
6
|
-
Person.new
|
7
|
-
end
|
8
|
-
|
9
|
-
let(:address) do
|
10
|
-
Address.new
|
11
|
-
end
|
12
|
-
|
13
|
-
describe "#add_observer" do
|
14
|
-
|
15
|
-
it "adds an observer to the observer array" do
|
16
|
-
address.add_observer(person)
|
17
|
-
address.observers.first.should == person
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
describe "#notify_observers" do
|
22
|
-
|
23
|
-
before do
|
24
|
-
address.add_observer(person)
|
25
|
-
end
|
26
|
-
|
27
|
-
context "when observers exist" do
|
28
|
-
|
29
|
-
it "calls update on each observer with the args" do
|
30
|
-
person.expects(:update).with("Testing")
|
31
|
-
address.notify_observers("Testing")
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
context "when no observers are set up" do
|
36
|
-
|
37
|
-
before do
|
38
|
-
@name = Name.new
|
39
|
-
end
|
40
|
-
|
41
|
-
it "does notthing" do
|
42
|
-
@name.notify_observers("Testing")
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
@@ -1,124 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Mongoid::Paths do
|
4
|
-
|
5
|
-
let(:person) do
|
6
|
-
Person.new
|
7
|
-
end
|
8
|
-
|
9
|
-
let(:address) do
|
10
|
-
Address.new(:street => "testing")
|
11
|
-
end
|
12
|
-
|
13
|
-
let(:location) do
|
14
|
-
Location.new
|
15
|
-
end
|
16
|
-
|
17
|
-
describe "#path" do
|
18
|
-
|
19
|
-
context "when the document is a parent" do
|
20
|
-
|
21
|
-
it "returns an empty string" do
|
22
|
-
person.path.should == ""
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
context "when the document is embedded" do
|
27
|
-
|
28
|
-
before do
|
29
|
-
person.addresses << address
|
30
|
-
end
|
31
|
-
|
32
|
-
it "returns the inverse_of value of the association" do
|
33
|
-
address.path.should == "addresses"
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
context "when document embedded multiple levels" do
|
38
|
-
|
39
|
-
before do
|
40
|
-
address.locations << location
|
41
|
-
person.addresses << address
|
42
|
-
end
|
43
|
-
|
44
|
-
it "returns the JSON notation to the document" do
|
45
|
-
location.path.should == "addresses.locations"
|
46
|
-
end
|
47
|
-
|
48
|
-
it "sets the route class instance var" do
|
49
|
-
Location._path.should == "addresses.locations"
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
describe "#selector" do
|
55
|
-
|
56
|
-
context "when the document is a parent" do
|
57
|
-
|
58
|
-
it "returns an id selector" do
|
59
|
-
person.selector.should == { "_id" => person.id }
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
context "when the document is embedded" do
|
64
|
-
|
65
|
-
before do
|
66
|
-
person.addresses << address
|
67
|
-
end
|
68
|
-
|
69
|
-
it "returns the association with id selector" do
|
70
|
-
address.selector.should == { "_id" => person.id, "addresses._id" => address.id }
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
context "when document embedded multiple levels" do
|
75
|
-
|
76
|
-
before do
|
77
|
-
address.locations << location
|
78
|
-
person.addresses << address
|
79
|
-
end
|
80
|
-
|
81
|
-
it "returns the JSON notation to the document with ids" do
|
82
|
-
location.selector.should ==
|
83
|
-
{ "_id" => person.id, "addresses._id" => address.id, "addresses.locations._id" => location.id }
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
describe "#position" do
|
89
|
-
|
90
|
-
context "when the document is a parent" do
|
91
|
-
|
92
|
-
it "returns an empty string" do
|
93
|
-
person.position.should == ""
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
context "when the document is embedded" do
|
98
|
-
|
99
|
-
before do
|
100
|
-
person.addresses << address
|
101
|
-
end
|
102
|
-
|
103
|
-
it "returns the path plus $" do
|
104
|
-
address.position.should == "addresses.$"
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
context "when document embedded multiple levels" do
|
109
|
-
|
110
|
-
before do
|
111
|
-
address.locations << location
|
112
|
-
person.addresses << address
|
113
|
-
end
|
114
|
-
|
115
|
-
it "returns the path plus $" do
|
116
|
-
location.position.should == "addresses.locations.$"
|
117
|
-
end
|
118
|
-
|
119
|
-
it "sets the matcher class instance var" do
|
120
|
-
Location._position.should == "addresses.locations.$"
|
121
|
-
end
|
122
|
-
end
|
123
|
-
end
|
124
|
-
end
|
@@ -1,240 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Mongoid::Scope do
|
4
|
-
|
5
|
-
before do
|
6
|
-
Person.delete_all
|
7
|
-
end
|
8
|
-
|
9
|
-
describe "#==" do
|
10
|
-
|
11
|
-
before do
|
12
|
-
@scope = Mongoid::Scope.new(Person, {})
|
13
|
-
end
|
14
|
-
|
15
|
-
context "when other is a scope" do
|
16
|
-
|
17
|
-
context "when the parent and conditions match" do
|
18
|
-
|
19
|
-
before do
|
20
|
-
@other = Mongoid::Scope.new(Person, {})
|
21
|
-
end
|
22
|
-
|
23
|
-
it "returns true" do
|
24
|
-
@scope.should == @other
|
25
|
-
end
|
26
|
-
|
27
|
-
end
|
28
|
-
|
29
|
-
context "when the conditions do not match" do
|
30
|
-
|
31
|
-
before do
|
32
|
-
@other = Mongoid::Scope.new(Person, { :where => { :field => "value" } })
|
33
|
-
end
|
34
|
-
|
35
|
-
it "returns false" do
|
36
|
-
@scope.should_not == @other
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
end
|
41
|
-
|
42
|
-
context "when other is an enumerable" do
|
43
|
-
|
44
|
-
context "when the array contents are equal" do
|
45
|
-
|
46
|
-
before do
|
47
|
-
@other = []
|
48
|
-
end
|
49
|
-
|
50
|
-
it "returns true" do
|
51
|
-
@scope.should == @other
|
52
|
-
end
|
53
|
-
|
54
|
-
end
|
55
|
-
|
56
|
-
context "when the array contents are not equal" do
|
57
|
-
|
58
|
-
before do
|
59
|
-
@other = [ stub ]
|
60
|
-
end
|
61
|
-
|
62
|
-
it "returns false" do
|
63
|
-
@scope.should_not == @other
|
64
|
-
end
|
65
|
-
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
context "when other is an invalid type" do
|
70
|
-
|
71
|
-
it "returns false" do
|
72
|
-
Mongoid::Scope.new(Person, {}).should_not == stub
|
73
|
-
end
|
74
|
-
|
75
|
-
end
|
76
|
-
|
77
|
-
end
|
78
|
-
|
79
|
-
describe ".initialize" do
|
80
|
-
|
81
|
-
before do
|
82
|
-
@parent = Mongoid::Scope.new(Person, {})
|
83
|
-
end
|
84
|
-
|
85
|
-
context "when parent is another scope" do
|
86
|
-
|
87
|
-
before do
|
88
|
-
@scope = Mongoid::Scope.new(@parent, {})
|
89
|
-
end
|
90
|
-
|
91
|
-
it "does not set the class" do
|
92
|
-
@scope.klass.should be_nil
|
93
|
-
end
|
94
|
-
|
95
|
-
end
|
96
|
-
|
97
|
-
context "when parent is a class" do
|
98
|
-
|
99
|
-
before do
|
100
|
-
@scope = Mongoid::Scope.new(Person, {})
|
101
|
-
end
|
102
|
-
|
103
|
-
it "returns the parent class" do
|
104
|
-
@scope.klass.should == Person
|
105
|
-
end
|
106
|
-
|
107
|
-
end
|
108
|
-
|
109
|
-
context "when a block is passed in" do
|
110
|
-
|
111
|
-
before do
|
112
|
-
@scope = Mongoid::Scope.new(Person, {}) do
|
113
|
-
def extended
|
114
|
-
"extended"
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
it "extends the block" do
|
120
|
-
@scope.extended.should == "extended"
|
121
|
-
end
|
122
|
-
|
123
|
-
end
|
124
|
-
|
125
|
-
end
|
126
|
-
|
127
|
-
describe "#method_missing" do
|
128
|
-
|
129
|
-
context "when a scope has been defined for the name" do
|
130
|
-
|
131
|
-
before do
|
132
|
-
@defined = mock
|
133
|
-
@class = mock
|
134
|
-
@class.expects(:scopes).twice.returns({ :testing => @defined })
|
135
|
-
@scope = Mongoid::Scope.new(@class, {})
|
136
|
-
end
|
137
|
-
|
138
|
-
it "calls the matching scope" do
|
139
|
-
@defined.expects(:call).with(@scope, "Testing").returns(true)
|
140
|
-
@scope.testing("Testing").should be_true
|
141
|
-
end
|
142
|
-
|
143
|
-
end
|
144
|
-
|
145
|
-
context "when a scope is not defined for the name" do
|
146
|
-
|
147
|
-
context "when the scope is the parent" do
|
148
|
-
|
149
|
-
before do
|
150
|
-
@target = mock
|
151
|
-
@scope = Mongoid::Scope.new(Person, {})
|
152
|
-
@scope.instance_variable_set("@target", @target)
|
153
|
-
end
|
154
|
-
|
155
|
-
it "sends the call to the target" do
|
156
|
-
@target.expects(:testing).with("Testing").returns(true)
|
157
|
-
@scope.testing("Testing").should be_true
|
158
|
-
end
|
159
|
-
|
160
|
-
end
|
161
|
-
|
162
|
-
context "when the scope is not the parent" do
|
163
|
-
|
164
|
-
before do
|
165
|
-
@parent = mock
|
166
|
-
@criteria = mock
|
167
|
-
@parent.expects(:scopes).returns({})
|
168
|
-
@parent.expects(:is_a?).with(Mongoid::Scope).returns(true)
|
169
|
-
@parent.expects(:fuse)
|
170
|
-
@scope = Mongoid::Scope.new(@parent, {})
|
171
|
-
end
|
172
|
-
|
173
|
-
it "creates a criteria from the parent scope" do
|
174
|
-
@parent.expects(:testing).returns(true)
|
175
|
-
@scope.testing.should be_true
|
176
|
-
end
|
177
|
-
|
178
|
-
end
|
179
|
-
|
180
|
-
end
|
181
|
-
|
182
|
-
end
|
183
|
-
|
184
|
-
describe "#respond_to?" do
|
185
|
-
|
186
|
-
context "when parent is a class" do
|
187
|
-
|
188
|
-
before do
|
189
|
-
@scope = Mongoid::Scope.new(Person, {})
|
190
|
-
end
|
191
|
-
|
192
|
-
it "delegates to the target" do
|
193
|
-
@scope.respond_to?(:only).should be_true
|
194
|
-
end
|
195
|
-
|
196
|
-
end
|
197
|
-
|
198
|
-
context "when parent is a scope" do
|
199
|
-
|
200
|
-
before do
|
201
|
-
@parent = Mongoid::Scope.new(Person, {})
|
202
|
-
@scope = Mongoid::Scope.new(@parent, {})
|
203
|
-
end
|
204
|
-
|
205
|
-
it "delegates to the parent" do
|
206
|
-
@scope.respond_to?(:only).should be_true
|
207
|
-
end
|
208
|
-
|
209
|
-
end
|
210
|
-
|
211
|
-
end
|
212
|
-
|
213
|
-
describe "#scopes" do
|
214
|
-
|
215
|
-
before do
|
216
|
-
@parent = mock
|
217
|
-
@scope = Mongoid::Scope.new(@parent, {})
|
218
|
-
end
|
219
|
-
|
220
|
-
it "delegates to the parent" do
|
221
|
-
@parent.expects(:scopes).returns({})
|
222
|
-
@scope.scopes.should == {}
|
223
|
-
end
|
224
|
-
|
225
|
-
end
|
226
|
-
|
227
|
-
describe "#target" do
|
228
|
-
|
229
|
-
before do
|
230
|
-
@scope = Mongoid::Scope.new(Person, { :where => { :title => "Sir" } })
|
231
|
-
end
|
232
|
-
|
233
|
-
it "returns the conditions criteria" do
|
234
|
-
@scope.target.selector.should ==
|
235
|
-
{ :title => "Sir" }
|
236
|
-
end
|
237
|
-
|
238
|
-
end
|
239
|
-
|
240
|
-
end
|