mongoid-locomotive 2.0.0.beta9
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/MIT_LICENSE +20 -0
- data/README.rdoc +47 -0
- data/lib/mongoid.rb +141 -0
- data/lib/mongoid/associations.rb +306 -0
- data/lib/mongoid/associations/embedded_in.rb +74 -0
- data/lib/mongoid/associations/embeds_many.rb +280 -0
- data/lib/mongoid/associations/embeds_one.rb +97 -0
- data/lib/mongoid/associations/foreign_key.rb +35 -0
- data/lib/mongoid/associations/meta_data.rb +38 -0
- data/lib/mongoid/associations/options.rb +62 -0
- data/lib/mongoid/associations/proxy.rb +33 -0
- data/lib/mongoid/associations/referenced_in.rb +59 -0
- data/lib/mongoid/associations/references_many.rb +245 -0
- data/lib/mongoid/associations/references_many_as_array.rb +78 -0
- data/lib/mongoid/associations/references_one.rb +99 -0
- data/lib/mongoid/atomicity.rb +55 -0
- data/lib/mongoid/attributes.rb +242 -0
- data/lib/mongoid/callbacks.rb +21 -0
- data/lib/mongoid/collection.rb +120 -0
- data/lib/mongoid/collections.rb +71 -0
- data/lib/mongoid/collections/cyclic_iterator.rb +34 -0
- data/lib/mongoid/collections/master.rb +29 -0
- data/lib/mongoid/collections/operations.rb +41 -0
- data/lib/mongoid/collections/slaves.rb +45 -0
- data/lib/mongoid/components.rb +34 -0
- data/lib/mongoid/config.rb +263 -0
- data/lib/mongoid/contexts.rb +24 -0
- data/lib/mongoid/contexts/enumerable.rb +156 -0
- data/lib/mongoid/contexts/ids.rb +25 -0
- data/lib/mongoid/contexts/mongo.rb +285 -0
- data/lib/mongoid/contexts/paging.rb +50 -0
- data/lib/mongoid/criteria.rb +248 -0
- data/lib/mongoid/criterion/complex.rb +21 -0
- data/lib/mongoid/criterion/exclusion.rb +65 -0
- data/lib/mongoid/criterion/inclusion.rb +110 -0
- data/lib/mongoid/criterion/optional.rb +189 -0
- data/lib/mongoid/cursor.rb +81 -0
- data/lib/mongoid/deprecation.rb +21 -0
- data/lib/mongoid/dirty.rb +252 -0
- data/lib/mongoid/document.rb +210 -0
- data/lib/mongoid/errors.rb +131 -0
- data/lib/mongoid/extensions.rb +115 -0
- data/lib/mongoid/extensions/array/accessors.rb +17 -0
- data/lib/mongoid/extensions/array/assimilation.rb +26 -0
- data/lib/mongoid/extensions/array/conversions.rb +23 -0
- data/lib/mongoid/extensions/array/parentization.rb +13 -0
- data/lib/mongoid/extensions/big_decimal/conversions.rb +19 -0
- data/lib/mongoid/extensions/binary/conversions.rb +17 -0
- data/lib/mongoid/extensions/boolean/conversions.rb +27 -0
- data/lib/mongoid/extensions/date/conversions.rb +24 -0
- data/lib/mongoid/extensions/datetime/conversions.rb +12 -0
- data/lib/mongoid/extensions/false_class/equality.rb +13 -0
- data/lib/mongoid/extensions/float/conversions.rb +20 -0
- data/lib/mongoid/extensions/hash/accessors.rb +42 -0
- data/lib/mongoid/extensions/hash/assimilation.rb +40 -0
- data/lib/mongoid/extensions/hash/conversions.rb +42 -0
- data/lib/mongoid/extensions/hash/criteria_helpers.rb +20 -0
- data/lib/mongoid/extensions/hash/scoping.rb +12 -0
- data/lib/mongoid/extensions/integer/conversions.rb +20 -0
- data/lib/mongoid/extensions/nil/assimilation.rb +17 -0
- data/lib/mongoid/extensions/object/conversions.rb +21 -0
- data/lib/mongoid/extensions/objectid/conversions.rb +15 -0
- data/lib/mongoid/extensions/proc/scoping.rb +12 -0
- data/lib/mongoid/extensions/set/conversions.rb +20 -0
- data/lib/mongoid/extensions/string/conversions.rb +15 -0
- data/lib/mongoid/extensions/string/inflections.rb +97 -0
- data/lib/mongoid/extensions/symbol/inflections.rb +40 -0
- data/lib/mongoid/extensions/time_conversions.rb +35 -0
- data/lib/mongoid/extensions/true_class/equality.rb +13 -0
- data/lib/mongoid/extras.rb +61 -0
- data/lib/mongoid/factory.rb +20 -0
- data/lib/mongoid/field.rb +83 -0
- data/lib/mongoid/fields.rb +62 -0
- data/lib/mongoid/finders.rb +145 -0
- data/lib/mongoid/hierarchy.rb +74 -0
- data/lib/mongoid/identity.rb +47 -0
- data/lib/mongoid/indexes.rb +27 -0
- data/lib/mongoid/javascript.rb +21 -0
- data/lib/mongoid/javascript/functions.yml +37 -0
- data/lib/mongoid/logger.rb +19 -0
- data/lib/mongoid/matchers.rb +35 -0
- data/lib/mongoid/matchers/all.rb +11 -0
- data/lib/mongoid/matchers/default.rb +26 -0
- data/lib/mongoid/matchers/exists.rb +13 -0
- data/lib/mongoid/matchers/gt.rb +11 -0
- data/lib/mongoid/matchers/gte.rb +11 -0
- data/lib/mongoid/matchers/in.rb +11 -0
- data/lib/mongoid/matchers/lt.rb +11 -0
- data/lib/mongoid/matchers/lte.rb +11 -0
- data/lib/mongoid/matchers/ne.rb +11 -0
- data/lib/mongoid/matchers/nin.rb +11 -0
- data/lib/mongoid/matchers/size.rb +11 -0
- data/lib/mongoid/memoization.rb +33 -0
- data/lib/mongoid/named_scope.rb +37 -0
- data/lib/mongoid/paranoia.rb +106 -0
- data/lib/mongoid/paths.rb +61 -0
- data/lib/mongoid/persistence.rb +216 -0
- data/lib/mongoid/persistence/command.rb +39 -0
- data/lib/mongoid/persistence/insert.rb +48 -0
- data/lib/mongoid/persistence/insert_embedded.rb +44 -0
- data/lib/mongoid/persistence/remove.rb +39 -0
- data/lib/mongoid/persistence/remove_all.rb +38 -0
- data/lib/mongoid/persistence/remove_embedded.rb +50 -0
- data/lib/mongoid/persistence/update.rb +71 -0
- data/lib/mongoid/railtie.rb +67 -0
- data/lib/mongoid/railties/database.rake +60 -0
- data/lib/mongoid/scope.rb +75 -0
- data/lib/mongoid/state.rb +32 -0
- data/lib/mongoid/timestamps.rb +27 -0
- data/lib/mongoid/validations.rb +51 -0
- data/lib/mongoid/validations/associated.rb +32 -0
- data/lib/mongoid/validations/locale/en.yml +5 -0
- data/lib/mongoid/validations/uniqueness.rb +56 -0
- data/lib/mongoid/version.rb +4 -0
- data/lib/mongoid/versioning.rb +26 -0
- data/lib/rails/generators/mongoid/config/config_generator.rb +25 -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
- data/spec/integration/mongoid/association_attributes_spec.rb +71 -0
- data/spec/integration/mongoid/associations_spec.rb +768 -0
- data/spec/integration/mongoid/attributes_spec.rb +59 -0
- data/spec/integration/mongoid/callback_spec.rb +33 -0
- data/spec/integration/mongoid/contexts/enumerable_spec.rb +33 -0
- data/spec/integration/mongoid/criteria_spec.rb +281 -0
- data/spec/integration/mongoid/dirty_spec.rb +85 -0
- data/spec/integration/mongoid/document_spec.rb +741 -0
- data/spec/integration/mongoid/extensions_spec.rb +22 -0
- data/spec/integration/mongoid/finders_spec.rb +119 -0
- data/spec/integration/mongoid/inheritance_spec.rb +171 -0
- data/spec/integration/mongoid/named_scope_spec.rb +58 -0
- data/spec/integration/mongoid/paranoia_spec.rb +44 -0
- data/spec/integration/mongoid/persistence/update_spec.rb +46 -0
- data/spec/integration/mongoid/persistence_spec.rb +311 -0
- data/spec/integration/mongoid/validations/uniqueness_spec.rb +206 -0
- data/spec/models/account.rb +5 -0
- data/spec/models/address.rb +40 -0
- data/spec/models/agent.rb +7 -0
- data/spec/models/animal.rb +15 -0
- data/spec/models/answer.rb +4 -0
- data/spec/models/callbacks.rb +47 -0
- data/spec/models/category.rb +13 -0
- data/spec/models/comment.rb +10 -0
- data/spec/models/country_code.rb +6 -0
- data/spec/models/employer.rb +5 -0
- data/spec/models/favorite.rb +8 -0
- data/spec/models/game.rb +9 -0
- data/spec/models/inheritance.rb +72 -0
- data/spec/models/location.rb +5 -0
- data/spec/models/login.rb +6 -0
- data/spec/models/mixed_drink.rb +4 -0
- data/spec/models/name.rb +13 -0
- data/spec/models/namespacing.rb +11 -0
- data/spec/models/paranoid_post.rb +18 -0
- data/spec/models/parents.rb +32 -0
- data/spec/models/patient.rb +15 -0
- data/spec/models/person.rb +106 -0
- data/spec/models/pet.rb +7 -0
- data/spec/models/pet_owner.rb +6 -0
- data/spec/models/phone.rb +7 -0
- data/spec/models/post.rb +25 -0
- data/spec/models/preference.rb +7 -0
- data/spec/models/question.rb +8 -0
- data/spec/models/survey.rb +6 -0
- data/spec/models/translation.rb +5 -0
- data/spec/models/user.rb +6 -0
- data/spec/models/user_accout.rb +5 -0
- data/spec/models/vet_visit.rb +5 -0
- data/spec/models/video.rb +5 -0
- data/spec/spec_helper.rb +33 -0
- data/spec/unit/mongoid/associations/embedded_in_spec.rb +193 -0
- data/spec/unit/mongoid/associations/embeds_many_spec.rb +626 -0
- data/spec/unit/mongoid/associations/embeds_one_spec.rb +287 -0
- data/spec/unit/mongoid/associations/foreign_key_spec.rb +90 -0
- data/spec/unit/mongoid/associations/meta_data_spec.rb +110 -0
- data/spec/unit/mongoid/associations/options_spec.rb +215 -0
- data/spec/unit/mongoid/associations/referenced_in_spec.rb +145 -0
- data/spec/unit/mongoid/associations/references_many_as_array_spec.rb +424 -0
- data/spec/unit/mongoid/associations/references_many_spec.rb +502 -0
- data/spec/unit/mongoid/associations/references_one_spec.rb +204 -0
- data/spec/unit/mongoid/associations_spec.rb +688 -0
- data/spec/unit/mongoid/atomicity_spec.rb +164 -0
- data/spec/unit/mongoid/attributes_spec.rb +646 -0
- data/spec/unit/mongoid/callbacks_spec.rb +85 -0
- data/spec/unit/mongoid/collection_spec.rb +187 -0
- data/spec/unit/mongoid/collections/cyclic_iterator_spec.rb +75 -0
- data/spec/unit/mongoid/collections/master_spec.rb +41 -0
- data/spec/unit/mongoid/collections/slaves_spec.rb +81 -0
- data/spec/unit/mongoid/collections_spec.rb +98 -0
- data/spec/unit/mongoid/config_spec.rb +298 -0
- data/spec/unit/mongoid/contexts/enumerable_spec.rb +447 -0
- data/spec/unit/mongoid/contexts/mongo_spec.rb +703 -0
- data/spec/unit/mongoid/contexts_spec.rb +25 -0
- data/spec/unit/mongoid/criteria_spec.rb +873 -0
- data/spec/unit/mongoid/criterion/complex_spec.rb +17 -0
- data/spec/unit/mongoid/criterion/exclusion_spec.rb +121 -0
- data/spec/unit/mongoid/criterion/inclusion_spec.rb +274 -0
- data/spec/unit/mongoid/criterion/optional_spec.rb +483 -0
- data/spec/unit/mongoid/cursor_spec.rb +80 -0
- data/spec/unit/mongoid/deprecation_spec.rb +24 -0
- data/spec/unit/mongoid/dirty_spec.rb +430 -0
- data/spec/unit/mongoid/document_spec.rb +623 -0
- data/spec/unit/mongoid/errors_spec.rb +154 -0
- data/spec/unit/mongoid/extensions/array/accessors_spec.rb +50 -0
- data/spec/unit/mongoid/extensions/array/assimilation_spec.rb +24 -0
- data/spec/unit/mongoid/extensions/array/conversions_spec.rb +52 -0
- data/spec/unit/mongoid/extensions/array/parentization_spec.rb +20 -0
- data/spec/unit/mongoid/extensions/big_decimal/conversions_spec.rb +36 -0
- data/spec/unit/mongoid/extensions/binary/conversions_spec.rb +22 -0
- data/spec/unit/mongoid/extensions/boolean/conversions_spec.rb +49 -0
- data/spec/unit/mongoid/extensions/date/conversions_spec.rb +145 -0
- data/spec/unit/mongoid/extensions/datetime/conversions_spec.rb +14 -0
- data/spec/unit/mongoid/extensions/false_class/equality_spec.rb +35 -0
- data/spec/unit/mongoid/extensions/float/conversions_spec.rb +61 -0
- data/spec/unit/mongoid/extensions/hash/accessors_spec.rb +184 -0
- data/spec/unit/mongoid/extensions/hash/assimilation_spec.rb +59 -0
- data/spec/unit/mongoid/extensions/hash/conversions_spec.rb +35 -0
- data/spec/unit/mongoid/extensions/hash/criteria_helpers_spec.rb +17 -0
- data/spec/unit/mongoid/extensions/hash/scoping_spec.rb +14 -0
- data/spec/unit/mongoid/extensions/integer/conversions_spec.rb +61 -0
- data/spec/unit/mongoid/extensions/nil/assimilation_spec.rb +29 -0
- data/spec/unit/mongoid/extensions/object/conversions_spec.rb +44 -0
- data/spec/unit/mongoid/extensions/objectid/conversions_spec.rb +22 -0
- data/spec/unit/mongoid/extensions/proc/scoping_spec.rb +34 -0
- data/spec/unit/mongoid/extensions/set/conversions_spec.rb +21 -0
- data/spec/unit/mongoid/extensions/string/conversions_spec.rb +28 -0
- data/spec/unit/mongoid/extensions/string/inflections_spec.rb +208 -0
- data/spec/unit/mongoid/extensions/symbol/inflections_spec.rb +107 -0
- data/spec/unit/mongoid/extensions/time_conversions_spec.rb +186 -0
- data/spec/unit/mongoid/extensions/true_class/equality_spec.rb +35 -0
- data/spec/unit/mongoid/extras_spec.rb +102 -0
- data/spec/unit/mongoid/factory_spec.rb +31 -0
- data/spec/unit/mongoid/field_spec.rb +169 -0
- data/spec/unit/mongoid/fields_spec.rb +181 -0
- data/spec/unit/mongoid/finders_spec.rb +439 -0
- data/spec/unit/mongoid/hierarchy_spec.rb +68 -0
- data/spec/unit/mongoid/identity_spec.rb +109 -0
- data/spec/unit/mongoid/indexes_spec.rb +99 -0
- data/spec/unit/mongoid/javascript_spec.rb +48 -0
- data/spec/unit/mongoid/logger_spec.rb +38 -0
- data/spec/unit/mongoid/matchers/all_spec.rb +27 -0
- data/spec/unit/mongoid/matchers/default_spec.rb +27 -0
- data/spec/unit/mongoid/matchers/exists_spec.rb +56 -0
- data/spec/unit/mongoid/matchers/gt_spec.rb +39 -0
- data/spec/unit/mongoid/matchers/gte_spec.rb +49 -0
- data/spec/unit/mongoid/matchers/in_spec.rb +27 -0
- data/spec/unit/mongoid/matchers/lt_spec.rb +39 -0
- data/spec/unit/mongoid/matchers/lte_spec.rb +49 -0
- data/spec/unit/mongoid/matchers/ne_spec.rb +27 -0
- data/spec/unit/mongoid/matchers/nin_spec.rb +27 -0
- data/spec/unit/mongoid/matchers/size_spec.rb +27 -0
- data/spec/unit/mongoid/matchers_spec.rb +329 -0
- data/spec/unit/mongoid/memoization_spec.rb +75 -0
- data/spec/unit/mongoid/named_scope_spec.rb +123 -0
- data/spec/unit/mongoid/paranoia_spec.rb +108 -0
- data/spec/unit/mongoid/paths_spec.rb +272 -0
- data/spec/unit/mongoid/persistence/insert_embedded_spec.rb +154 -0
- data/spec/unit/mongoid/persistence/insert_spec.rb +144 -0
- data/spec/unit/mongoid/persistence/remove_all_spec.rb +82 -0
- data/spec/unit/mongoid/persistence/remove_embedded_spec.rb +152 -0
- data/spec/unit/mongoid/persistence/remove_spec.rb +89 -0
- data/spec/unit/mongoid/persistence/update_spec.rb +177 -0
- data/spec/unit/mongoid/persistence_spec.rb +452 -0
- data/spec/unit/mongoid/scope_spec.rb +240 -0
- data/spec/unit/mongoid/serialization_spec.rb +43 -0
- data/spec/unit/mongoid/state_spec.rb +94 -0
- data/spec/unit/mongoid/timestamps_spec.rb +30 -0
- data/spec/unit/mongoid/validations/associated_spec.rb +103 -0
- data/spec/unit/mongoid/validations/uniqueness_spec.rb +201 -0
- data/spec/unit/mongoid/validations_spec.rb +43 -0
- data/spec/unit/mongoid/versioning_spec.rb +41 -0
- data/spec/unit/mongoid_spec.rb +46 -0
- metadata +433 -0
|
@@ -0,0 +1,75 @@
|
|
|
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
|
|
@@ -0,0 +1,123 @@
|
|
|
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
|
+
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Mongoid::Paranoia do
|
|
4
|
+
|
|
5
|
+
let(:collection) do
|
|
6
|
+
stub.quacks_like(Mongoid::Collection.allocate)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
let(:command) do
|
|
10
|
+
stub.quacks_like(Mongoid::Persistence::Remove.allocate)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe "#delete!" do
|
|
14
|
+
|
|
15
|
+
before do
|
|
16
|
+
@post = ParanoidPost.new
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "removes the document from the database" do
|
|
20
|
+
Mongoid::Persistence::Remove.expects(:new).with(@post).returns(command)
|
|
21
|
+
command.expects(:persist).returns(true)
|
|
22
|
+
@post.delete!
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "sets destroyed to true" do
|
|
26
|
+
Mongoid::Persistence::Remove.expects(:new).with(@post).returns(command)
|
|
27
|
+
command.expects(:persist).returns(true)
|
|
28
|
+
@post.delete!
|
|
29
|
+
@post.destroyed?.should == true
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
describe "#destroyed?" do
|
|
34
|
+
|
|
35
|
+
context "when the document was marked as deleted" do
|
|
36
|
+
|
|
37
|
+
before do
|
|
38
|
+
@post = ParanoidPost.new
|
|
39
|
+
@post.deleted_at = Time.now
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "returns true" do
|
|
43
|
+
@post.destroyed?.should == true
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
context "when the document was not marked as deleted" do
|
|
48
|
+
|
|
49
|
+
before do
|
|
50
|
+
@post = ParanoidPost.new
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "returns true" do
|
|
54
|
+
@post.destroyed?.should == false
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
describe "#_remove" do
|
|
60
|
+
|
|
61
|
+
before do
|
|
62
|
+
@post = ParanoidPost.new
|
|
63
|
+
@post.expects(:collection).returns(collection)
|
|
64
|
+
@time = Time.now
|
|
65
|
+
Time.stubs(:now).returns(@time)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it "sets the deleted_at flag in the database" do
|
|
69
|
+
collection.expects(:update).with(
|
|
70
|
+
{ :_id => @post.id }, { "$set" => { :deleted_at => @time } }
|
|
71
|
+
).returns(true)
|
|
72
|
+
@post._remove
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
it "sets the deleted flag" do
|
|
76
|
+
collection.expects(:update).with(
|
|
77
|
+
{ :_id => @post.id }, { "$set" => { :deleted_at => @time } }
|
|
78
|
+
).returns(true)
|
|
79
|
+
@post._remove
|
|
80
|
+
@post.destroyed?.should == true
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
describe "#_restore" do
|
|
85
|
+
|
|
86
|
+
before do
|
|
87
|
+
@post = ParanoidPost.new(:deleted_at => Time.now)
|
|
88
|
+
@post.expects(:collection).returns(collection)
|
|
89
|
+
@time = Time.now
|
|
90
|
+
Time.stubs(:now).returns(@time)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it "removes the deleted_at flag from the database" do
|
|
94
|
+
collection.expects(:update).with(
|
|
95
|
+
{ :_id => @post.id }, { "$unset" => { :deleted_at => true } }
|
|
96
|
+
).returns(true)
|
|
97
|
+
@post.restore
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
it "removes the deleted flag" do
|
|
101
|
+
collection.expects(:update).with(
|
|
102
|
+
{ :_id => @post.id }, { "$unset" => { :deleted_at => true } }
|
|
103
|
+
).returns(true)
|
|
104
|
+
@post.restore
|
|
105
|
+
@post.destroyed?.should == false
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
@@ -0,0 +1,272 @@
|
|
|
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
|
+
let(:name) do
|
|
18
|
+
Name.new
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
describe "#._remover" do
|
|
22
|
+
|
|
23
|
+
before do
|
|
24
|
+
person.addresses << address
|
|
25
|
+
person.name = name
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
context "when document is root" do
|
|
29
|
+
|
|
30
|
+
it "returns nil" do
|
|
31
|
+
person._remover.should be_nil
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
context "when document is an embeds_one" do
|
|
36
|
+
|
|
37
|
+
it "returns $unset" do
|
|
38
|
+
name._remover.should == "$unset"
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
context "when document is an embeds_many" do
|
|
43
|
+
|
|
44
|
+
it "returns $pull" do
|
|
45
|
+
address._remover.should == "$pull"
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
describe "#._inserter" do
|
|
51
|
+
|
|
52
|
+
before do
|
|
53
|
+
person.addresses << address
|
|
54
|
+
person.name = name
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
context "when document is root" do
|
|
58
|
+
|
|
59
|
+
it "returns nil" do
|
|
60
|
+
person._inserter.should be_nil
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
context "when document is an embeds_one" do
|
|
65
|
+
|
|
66
|
+
it "returns $set" do
|
|
67
|
+
name._inserter.should == "$set"
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
context "when document is an embeds_many" do
|
|
72
|
+
|
|
73
|
+
it "returns $push" do
|
|
74
|
+
address._inserter.should == "$push"
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
describe "#._path" do
|
|
80
|
+
|
|
81
|
+
context "when the document is a parent" do
|
|
82
|
+
|
|
83
|
+
it "returns an empty string" do
|
|
84
|
+
person._path.should == ""
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
context "when the document is embedded" do
|
|
89
|
+
|
|
90
|
+
before do
|
|
91
|
+
person.addresses << address
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it "returns the inverse_of value of the association" do
|
|
95
|
+
address._path.should == "addresses"
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
context "when document embedded multiple levels" do
|
|
100
|
+
|
|
101
|
+
before do
|
|
102
|
+
address.locations << location
|
|
103
|
+
person.addresses << address
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
it "returns the JSON notation to the document" do
|
|
107
|
+
location._path.should == "addresses.locations"
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
describe "#._selector" do
|
|
113
|
+
|
|
114
|
+
context "when the document is a parent" do
|
|
115
|
+
|
|
116
|
+
it "returns an id._selector" do
|
|
117
|
+
person._selector.should == { "_id" => person.id }
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
context "when the document is embedded" do
|
|
122
|
+
|
|
123
|
+
before do
|
|
124
|
+
person.addresses << address
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
it "returns the association with id._selector" do
|
|
128
|
+
address._selector.should == { "_id" => person.id, "addresses._id" => address.id }
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
context "when document embedded multiple levels" do
|
|
133
|
+
|
|
134
|
+
before do
|
|
135
|
+
address.locations << location
|
|
136
|
+
person.addresses << address
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
it "returns the JSON notation to the document with ids" do
|
|
140
|
+
location._selector.should ==
|
|
141
|
+
{ "_id" => person.id, "addresses._id" => address.id, "addresses.locations._id" => location.id }
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
describe "#._position" do
|
|
147
|
+
|
|
148
|
+
context "when the document is a parent" do
|
|
149
|
+
|
|
150
|
+
it "returns an empty string" do
|
|
151
|
+
person._position.should == ""
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
context "when the document is embedded" do
|
|
156
|
+
|
|
157
|
+
before do
|
|
158
|
+
person.addresses << address
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
context "when the document is new" do
|
|
162
|
+
|
|
163
|
+
it "returns the._path without index" do
|
|
164
|
+
address._position.should == "addresses"
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
context "when the document is not new" do
|
|
169
|
+
|
|
170
|
+
before do
|
|
171
|
+
address.instance_variable_set(:@new_record, false)
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
it "returns the._path plus index" do
|
|
175
|
+
address._position.should == "addresses.0"
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
context "when document embedded multiple levels" do
|
|
181
|
+
|
|
182
|
+
before do
|
|
183
|
+
@other = Location.new
|
|
184
|
+
address.locations << [ @other, location ]
|
|
185
|
+
address.instance_variable_set(:@new_record, false)
|
|
186
|
+
person.addresses << address
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
context "when the document is new" do
|
|
190
|
+
|
|
191
|
+
it "returns the._path with parent indexes" do
|
|
192
|
+
location._position.should == "addresses.0.locations"
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
context "when the document is not new" do
|
|
197
|
+
|
|
198
|
+
before do
|
|
199
|
+
location.instance_variable_set(:@new_record, false)
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
it "returns the._path plus index" do
|
|
203
|
+
location._position.should == "addresses.0.locations.1"
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
describe "#._pull" do
|
|
210
|
+
|
|
211
|
+
context "when the document is a parent" do
|
|
212
|
+
|
|
213
|
+
it "returns an empty string" do
|
|
214
|
+
person._pull.should == ""
|
|
215
|
+
end
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
context "when the document is embedded" do
|
|
219
|
+
|
|
220
|
+
before do
|
|
221
|
+
person.addresses << address
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
context "when the document is not new" do
|
|
225
|
+
|
|
226
|
+
before do
|
|
227
|
+
address.instance_variable_set(:@new_record, false)
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
it "returns the._path without the index" do
|
|
231
|
+
address._pull.should == "addresses"
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
context "and there are 10 or more documents" do
|
|
235
|
+
|
|
236
|
+
before do
|
|
237
|
+
10.times do
|
|
238
|
+
person.addresses << address
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
it "returns the._path without the index" do
|
|
243
|
+
address._pull.should == "addresses"
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
end
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
context "when document embedded multiple levels" do
|
|
251
|
+
|
|
252
|
+
before do
|
|
253
|
+
@other = Location.new
|
|
254
|
+
address.locations << [ @other, location ]
|
|
255
|
+
address.instance_variable_set(:@new_record, false)
|
|
256
|
+
person.addresses << address
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
context "when the document is not new" do
|
|
260
|
+
|
|
261
|
+
before do
|
|
262
|
+
location.instance_variable_set(:@new_record, false)
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
it "returns the._path plus index" do
|
|
266
|
+
location._pull.should == "addresses.0.locations"
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
end
|
|
270
|
+
end
|
|
271
|
+
end
|
|
272
|
+
end
|