mongo_mapper 0.12.0 → 0.13.0.beta1
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.
- checksums.yaml +7 -0
- data/README.rdoc +35 -13
- data/bin/mmconsole +1 -1
- data/lib/mongo_mapper.rb +4 -0
- data/lib/mongo_mapper/connection.rb +17 -6
- data/lib/mongo_mapper/document.rb +1 -0
- data/lib/mongo_mapper/exceptions.rb +4 -1
- data/lib/mongo_mapper/extensions/binary.rb +1 -1
- data/lib/mongo_mapper/extensions/boolean.rb +20 -23
- data/lib/mongo_mapper/extensions/date.rb +3 -3
- data/lib/mongo_mapper/extensions/integer.rb +5 -1
- data/lib/mongo_mapper/extensions/kernel.rb +2 -0
- data/lib/mongo_mapper/extensions/ordered_hash.rb +23 -0
- data/lib/mongo_mapper/extensions/string.rb +2 -2
- data/lib/mongo_mapper/extensions/time.rb +7 -5
- data/lib/mongo_mapper/middleware/identity_map.rb +3 -4
- data/lib/mongo_mapper/plugins.rb +1 -1
- data/lib/mongo_mapper/plugins/associations.rb +11 -5
- data/lib/mongo_mapper/plugins/associations/base.rb +5 -3
- data/lib/mongo_mapper/plugins/associations/belongs_to_polymorphic_proxy.rb +0 -0
- data/lib/mongo_mapper/plugins/associations/belongs_to_proxy.rb +8 -8
- data/lib/mongo_mapper/plugins/associations/collection.rb +2 -0
- data/lib/mongo_mapper/plugins/associations/many_documents_proxy.rb +32 -7
- data/lib/mongo_mapper/plugins/associations/many_embedded_proxy.rb +2 -2
- data/lib/mongo_mapper/plugins/associations/one_proxy.rb +12 -12
- data/lib/mongo_mapper/plugins/associations/proxy.rb +5 -1
- data/lib/mongo_mapper/plugins/associations/single_association.rb +6 -6
- data/lib/mongo_mapper/plugins/clone.rb +4 -2
- data/lib/mongo_mapper/plugins/dirty.rb +22 -21
- data/lib/mongo_mapper/plugins/document.rb +4 -4
- data/lib/mongo_mapper/plugins/dumpable.rb +22 -0
- data/lib/mongo_mapper/plugins/embedded_callbacks.rb +58 -9
- data/lib/mongo_mapper/plugins/identity_map.rb +42 -32
- data/lib/mongo_mapper/plugins/keys.rb +133 -54
- data/lib/mongo_mapper/plugins/keys/key.rb +68 -22
- data/lib/mongo_mapper/plugins/modifiers.rb +26 -19
- data/lib/mongo_mapper/plugins/persistence.rb +15 -5
- data/lib/mongo_mapper/plugins/querying.rb +15 -40
- data/lib/mongo_mapper/plugins/querying/{decorator.rb → decorated_plucky_query.rb} +24 -4
- data/lib/mongo_mapper/plugins/rails.rb +22 -2
- data/lib/mongo_mapper/plugins/safe.rb +8 -5
- data/lib/mongo_mapper/plugins/sci.rb +26 -4
- data/lib/mongo_mapper/plugins/scopes.rb +5 -4
- data/lib/mongo_mapper/plugins/timestamps.rb +11 -4
- data/lib/mongo_mapper/plugins/validations.rb +1 -1
- data/lib/mongo_mapper/utils.rb +12 -0
- data/lib/mongo_mapper/version.rb +1 -1
- data/lib/rails/generators/mongo_mapper/config/config_generator.rb +20 -7
- data/lib/rails/generators/mongo_mapper/config/templates/mongo.yml +6 -0
- data/lib/rails/generators/mongo_mapper/model/model_generator.rb +18 -1
- data/lib/rails/generators/mongo_mapper/model/templates/model.rb +9 -5
- data/{test/functional/test_accessible.rb → spec/functional/accessible_spec.rb} +29 -29
- data/{test/functional/associations/test_belongs_to_polymorphic_proxy.rb → spec/functional/associations/belongs_to_polymorphic_proxy_spec.rb} +10 -10
- data/{test/functional/associations/test_belongs_to_proxy.rb → spec/functional/associations/belongs_to_proxy_spec.rb} +82 -64
- data/{test/functional/associations/test_in_array_proxy.rb → spec/functional/associations/in_array_proxy_spec.rb} +68 -68
- data/{test/functional/associations/test_many_documents_as_proxy.rb → spec/functional/associations/many_documents_as_proxy_spec.rb} +37 -38
- data/{test/functional/associations/test_many_documents_proxy.rb → spec/functional/associations/many_documents_proxy_spec.rb} +233 -146
- data/{test/functional/associations/test_many_embedded_polymorphic_proxy.rb → spec/functional/associations/many_embedded_polymorphic_proxy_spec.rb} +19 -20
- data/{test/functional/associations/test_many_embedded_proxy.rb → spec/functional/associations/many_embedded_proxy_spec.rb} +23 -24
- data/{test/functional/associations/test_many_polymorphic_proxy.rb → spec/functional/associations/many_polymorphic_proxy_spec.rb} +45 -46
- data/{test/functional/associations/test_one_as_proxy.rb → spec/functional/associations/one_as_proxy_spec.rb} +75 -77
- data/{test/functional/associations/test_one_embedded_polymorphic_proxy.rb → spec/functional/associations/one_embedded_polymorphic_proxy_spec.rb} +31 -32
- data/{test/functional/associations/test_one_embedded_proxy.rb → spec/functional/associations/one_embedded_proxy_spec.rb} +10 -10
- data/{test/functional/associations/test_one_proxy.rb → spec/functional/associations/one_proxy_spec.rb} +125 -102
- data/spec/functional/associations_spec.rb +48 -0
- data/{test/functional/test_binary.rb → spec/functional/binary_spec.rb} +6 -6
- data/spec/functional/caching_spec.rb +75 -0
- data/{test/functional/test_callbacks.rb → spec/functional/callbacks_spec.rb} +84 -26
- data/{test/functional/test_dirty.rb → spec/functional/dirty_spec.rb} +57 -42
- data/{test/functional/test_document.rb → spec/functional/document_spec.rb} +52 -52
- data/spec/functional/dumpable_spec.rb +24 -0
- data/{test/functional/test_dynamic_querying.rb → spec/functional/dynamic_querying_spec.rb} +14 -14
- data/{test/functional/test_embedded_document.rb → spec/functional/embedded_document_spec.rb} +51 -42
- data/{test/functional/test_equality.rb → spec/functional/equality_spec.rb} +4 -4
- data/spec/functional/extensions_spec.rb +16 -0
- data/{test/functional/test_identity_map.rb → spec/functional/identity_map_spec.rb} +73 -61
- data/spec/functional/indexes_spec.rb +48 -0
- data/spec/functional/keys_spec.rb +224 -0
- data/{test/functional/test_logger.rb → spec/functional/logger_spec.rb} +6 -6
- data/spec/functional/modifiers_spec.rb +550 -0
- data/spec/functional/pagination_spec.rb +89 -0
- data/spec/functional/protected_spec.rb +199 -0
- data/spec/functional/querying_spec.rb +1003 -0
- data/spec/functional/rails_spec.rb +55 -0
- data/spec/functional/safe_spec.rb +163 -0
- data/{test/functional/test_sci.rb → spec/functional/sci_spec.rb} +123 -34
- data/{test/functional/test_scopes.rb → spec/functional/scopes_spec.rb} +59 -26
- data/spec/functional/timestamps_spec.rb +97 -0
- data/{test/functional/test_touch.rb → spec/functional/touch_spec.rb} +13 -13
- data/spec/functional/userstamps_spec.rb +46 -0
- data/{test/functional/test_validations.rb → spec/functional/validations_spec.rb} +64 -64
- data/spec/spec_helper.rb +81 -0
- data/spec/support/matchers.rb +24 -0
- data/{test → spec/support}/models.rb +1 -6
- data/spec/unit/associations/base_spec.rb +146 -0
- data/spec/unit/associations/belongs_to_association_spec.rb +30 -0
- data/spec/unit/associations/many_association_spec.rb +64 -0
- data/spec/unit/associations/one_association_spec.rb +48 -0
- data/{test/unit/associations/test_proxy.rb → spec/unit/associations/proxy_spec.rb} +21 -21
- data/{test/unit/test_clone.rb → spec/unit/clone_spec.rb} +21 -11
- data/spec/unit/config_generator_spec.rb +24 -0
- data/{test/unit/test_document.rb → spec/unit/document_spec.rb} +42 -42
- data/{test/unit/test_dynamic_finder.rb → spec/unit/dynamic_finder_spec.rb} +28 -28
- data/{test/unit/test_embedded_document.rb → spec/unit/embedded_document_spec.rb} +102 -108
- data/{test/unit/test_equality.rb → spec/unit/equality_spec.rb} +7 -7
- data/{test/unit/test_exceptions.rb → spec/unit/exceptions_spec.rb} +3 -3
- data/{test/unit/test_extensions.rb → spec/unit/extensions_spec.rb} +85 -71
- data/spec/unit/identity_map_middleware_spec.rb +134 -0
- data/{test/unit/test_inspect.rb → spec/unit/inspect_spec.rb} +8 -8
- data/{test/unit/test_key.rb → spec/unit/key_spec.rb} +82 -52
- data/spec/unit/keys_spec.rb +155 -0
- data/spec/unit/model_generator_spec.rb +47 -0
- data/spec/unit/mongo_mapper_spec.rb +184 -0
- data/spec/unit/pagination_spec.rb +11 -0
- data/{test/unit/test_plugins.rb → spec/unit/plugins_spec.rb} +14 -14
- data/spec/unit/rails_compatibility_spec.rb +40 -0
- data/{test/unit/test_rails_reflect_on_association.rb → spec/unit/rails_reflect_on_association_spec.rb} +9 -9
- data/{test/unit/test_rails.rb → spec/unit/rails_spec.rb} +31 -31
- data/spec/unit/serialization_spec.rb +169 -0
- data/spec/unit/serializers/json_serializer_spec.rb +218 -0
- data/spec/unit/serializers/xml_serializer_spec.rb +198 -0
- data/{test/unit/test_time_zones.rb → spec/unit/time_zones_spec.rb} +8 -8
- data/{test/unit/test_translation.rb → spec/unit/translation_spec.rb} +6 -6
- data/{test/unit/test_validations.rb → spec/unit/validations_spec.rb} +72 -59
- metadata +199 -179
- data/test/_NOTE_ON_TESTING +0 -1
- data/test/functional/test_associations.rb +0 -46
- data/test/functional/test_caching.rb +0 -77
- data/test/functional/test_indexes.rb +0 -50
- data/test/functional/test_modifiers.rb +0 -537
- data/test/functional/test_pagination.rb +0 -91
- data/test/functional/test_protected.rb +0 -201
- data/test/functional/test_querying.rb +0 -935
- data/test/functional/test_safe.rb +0 -76
- data/test/functional/test_timestamps.rb +0 -62
- data/test/functional/test_userstamps.rb +0 -44
- data/test/support/railtie.rb +0 -4
- data/test/support/railtie/autoloaded.rb +0 -2
- data/test/support/railtie/not_autoloaded.rb +0 -3
- data/test/support/railtie/parent.rb +0 -3
- data/test/test_active_model_lint.rb +0 -18
- data/test/test_helper.rb +0 -93
- data/test/unit/associations/test_base.rb +0 -146
- data/test/unit/associations/test_belongs_to_association.rb +0 -29
- data/test/unit/associations/test_many_association.rb +0 -63
- data/test/unit/associations/test_one_association.rb +0 -47
- data/test/unit/serializers/test_json_serializer.rb +0 -216
- data/test/unit/serializers/test_xml_serializer.rb +0 -196
- data/test/unit/test_identity_map_middleware.rb +0 -132
- data/test/unit/test_keys.rb +0 -65
- data/test/unit/test_mongo_mapper.rb +0 -157
- data/test/unit/test_pagination.rb +0 -11
- data/test/unit/test_rails_compatibility.rb +0 -38
- data/test/unit/test_serialization.rb +0 -166
@@ -1,8 +1,8 @@
|
|
1
|
-
require '
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
|
-
|
3
|
+
describe "Clone" do
|
4
4
|
context "Document" do
|
5
|
-
|
5
|
+
before do
|
6
6
|
@document = Doc()
|
7
7
|
@embedded = EDoc()
|
8
8
|
@document.many :widgets, :class => @embedded
|
@@ -16,33 +16,43 @@ class CloneTest < Test::Unit::TestCase
|
|
16
16
|
end
|
17
17
|
|
18
18
|
context "#clone" do
|
19
|
-
should
|
19
|
+
it "should be new" do
|
20
20
|
@doc.clone.should be_new
|
21
21
|
end
|
22
22
|
|
23
|
-
should
|
23
|
+
it "should copy the attributes" do
|
24
24
|
clone = @doc.clone
|
25
25
|
clone.name.should == "foo"
|
26
26
|
clone.age.should == 27
|
27
27
|
end
|
28
28
|
|
29
|
-
should
|
29
|
+
it "should clone duplicable attributes" do
|
30
30
|
@doc.clone.tags.should_not equal(@tags)
|
31
31
|
end
|
32
32
|
|
33
|
-
should
|
33
|
+
it "should clone many embedded documents" do
|
34
34
|
@doc.clone.widgets.object_id.should_not equal(@doc.widgets.object_id)
|
35
35
|
end
|
36
36
|
|
37
|
-
should
|
37
|
+
it "should not be destroyed" do
|
38
38
|
@doc.destroy
|
39
39
|
@doc.clone.should_not be_destroyed
|
40
40
|
end
|
41
|
+
|
42
|
+
it "should generate a new id" do
|
43
|
+
@doc.clone.id.should_not be_nil
|
44
|
+
@doc.clone.id.should_not equal(@doc.id)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should clone a cloned document" do
|
48
|
+
expect { @doc.clone.clone }.to_not raise_error
|
49
|
+
@doc.clone.clone.id.should be_a BSON::ObjectId
|
50
|
+
end
|
41
51
|
end
|
42
52
|
end
|
43
53
|
|
44
54
|
context "EmbeddedDocument" do
|
45
|
-
|
55
|
+
before do
|
46
56
|
@document = EDoc do
|
47
57
|
key :name, String
|
48
58
|
key :age, Integer
|
@@ -50,7 +60,7 @@ class CloneTest < Test::Unit::TestCase
|
|
50
60
|
end
|
51
61
|
|
52
62
|
context "#clone" do
|
53
|
-
should
|
63
|
+
it "should regenerate the id" do
|
54
64
|
doc = @document.new(:name => "foo", :age => 27)
|
55
65
|
doc_id = doc.id
|
56
66
|
clone = doc.clone
|
@@ -58,7 +68,7 @@ class CloneTest < Test::Unit::TestCase
|
|
58
68
|
clone_id.should_not == doc_id
|
59
69
|
end
|
60
70
|
|
61
|
-
should
|
71
|
+
it "should copy the attributes" do
|
62
72
|
doc = @document.new(:name => "foo", :age => 27)
|
63
73
|
clone = doc.clone
|
64
74
|
clone.name.should == "foo"
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'rails/generators'
|
3
|
+
require 'rails/generators/test_case'
|
4
|
+
require 'rails/generators/mongo_mapper/config/config_generator'
|
5
|
+
|
6
|
+
describe MongoMapper::Generators::ConfigGenerator do
|
7
|
+
include GeneratorSpec::TestCase
|
8
|
+
|
9
|
+
destination File.expand_path('../../tmp', File.dirname(__FILE__))
|
10
|
+
before do
|
11
|
+
prepare_destination
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'mongo.yml are properly created' do
|
15
|
+
run_generator
|
16
|
+
assert_file 'config/mongo.yml', /#{File.basename(destination_root)}/
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'mongo.yml are properly created with defined database_name' do
|
20
|
+
run_generator %w{dummy}
|
21
|
+
assert_file 'config/mongo.yml', /dummy/
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -1,37 +1,37 @@
|
|
1
|
-
require '
|
2
|
-
require 'models'
|
1
|
+
require 'spec_helper'
|
3
2
|
|
4
|
-
|
3
|
+
|
4
|
+
describe "Document" do
|
5
5
|
context "The Document Class" do
|
6
|
-
|
6
|
+
before do
|
7
7
|
@document = Doc()
|
8
8
|
end
|
9
9
|
|
10
|
-
should
|
10
|
+
it "should return false for embeddable" do
|
11
11
|
Doc().embeddable?.should be_false
|
12
12
|
end
|
13
13
|
|
14
|
-
should
|
14
|
+
it "should have logger method" do
|
15
15
|
@document.logger.should == MongoMapper.logger
|
16
16
|
@document.logger.should be_instance_of(Logger)
|
17
17
|
end
|
18
18
|
|
19
|
-
should
|
19
|
+
it "should use default database by default" do
|
20
20
|
@document.database.should == MongoMapper.database
|
21
21
|
end
|
22
22
|
|
23
|
-
should
|
24
|
-
@document.connection.should be_instance_of(Mongo::
|
23
|
+
it "should have a connection" do
|
24
|
+
@document.connection.should be_instance_of(Mongo::MongoClient)
|
25
25
|
end
|
26
26
|
|
27
|
-
should
|
28
|
-
conn = Mongo::
|
27
|
+
it "should allow setting different connection without affecting the default" do
|
28
|
+
conn = Mongo::MongoClient.new
|
29
29
|
@document.connection conn
|
30
30
|
@document.connection.should == conn
|
31
31
|
@document.connection.should_not == MongoMapper.connection
|
32
32
|
end
|
33
33
|
|
34
|
-
should
|
34
|
+
it "should allow setting a different database without affecting the default" do
|
35
35
|
@document.set_database_name 'test2'
|
36
36
|
@document.database_name.should == 'test2'
|
37
37
|
@document.database.name.should == 'test2'
|
@@ -40,19 +40,19 @@ class DocumentTest < Test::Unit::TestCase
|
|
40
40
|
another_document.database.should == MongoMapper.database
|
41
41
|
end
|
42
42
|
|
43
|
-
should
|
43
|
+
it "should allow setting the collection name" do
|
44
44
|
@document.set_collection_name('foobar')
|
45
45
|
@document.collection.name.should == 'foobar'
|
46
46
|
end
|
47
47
|
|
48
48
|
context ".collection" do
|
49
|
-
should
|
49
|
+
it "should default collection name to class name tableized" do
|
50
50
|
class ::Item
|
51
51
|
include MongoMapper::Document
|
52
52
|
end.collection.name.should == 'items'
|
53
53
|
end
|
54
54
|
|
55
|
-
should
|
55
|
+
it "should default collection name of namespaced class to tableized with dot separation" do
|
56
56
|
module ::BloggyPoo
|
57
57
|
class Post
|
58
58
|
include MongoMapper::Document
|
@@ -60,21 +60,21 @@ class DocumentTest < Test::Unit::TestCase
|
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
63
|
-
should
|
63
|
+
it "should be an instance of a Mongo::Collection" do
|
64
64
|
@document.collection.should be_instance_of(Mongo::Collection)
|
65
65
|
end
|
66
66
|
end
|
67
67
|
end # Document class
|
68
68
|
|
69
69
|
context "Documents that inherit from other documents" do
|
70
|
-
should
|
70
|
+
it "should default collection name to inherited class" do
|
71
71
|
Message.collection_name.should == 'messages'
|
72
72
|
Enter.collection_name.should == 'messages'
|
73
73
|
Exit.collection_name.should == 'messages'
|
74
74
|
Chat.collection_name.should == 'messages'
|
75
75
|
end
|
76
76
|
|
77
|
-
should
|
77
|
+
it "should default associations to inherited class" do
|
78
78
|
Message.associations.keys.should include(:room)
|
79
79
|
Enter.associations.keys.should include(:room)
|
80
80
|
Exit.associations.keys.should include(:room)
|
@@ -83,50 +83,50 @@ class DocumentTest < Test::Unit::TestCase
|
|
83
83
|
end
|
84
84
|
|
85
85
|
context "descendants" do
|
86
|
-
should
|
86
|
+
it "should default to an empty array" do
|
87
87
|
Enter.descendants.should == []
|
88
88
|
end
|
89
89
|
|
90
|
-
should
|
90
|
+
it "should be recorded" do
|
91
91
|
Message.descendants.should == [Enter, Exit, Chat]
|
92
92
|
end
|
93
93
|
end
|
94
94
|
|
95
95
|
context "An instance of a document" do
|
96
|
-
|
96
|
+
before do
|
97
97
|
@document = Doc do
|
98
98
|
key :name, String
|
99
99
|
key :age, Integer
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
103
|
-
should
|
103
|
+
it "should respond to cache_key" do
|
104
104
|
@document.new.should respond_to(:cache_key)
|
105
105
|
end
|
106
106
|
|
107
|
-
should
|
107
|
+
it "should create id during initialization" do
|
108
108
|
@document.new._id.should be_instance_of(BSON::ObjectId)
|
109
109
|
end
|
110
110
|
|
111
|
-
should
|
111
|
+
it "should have access to logger" do
|
112
112
|
doc = @document.new
|
113
113
|
doc.logger.should == @document.logger
|
114
114
|
doc.logger.should be_instance_of(Logger)
|
115
115
|
end
|
116
116
|
|
117
|
-
should
|
117
|
+
it "should have access to the class's collection" do
|
118
118
|
doc = @document.new
|
119
119
|
doc.collection.name.should == @document.collection.name
|
120
120
|
end
|
121
121
|
|
122
|
-
should
|
122
|
+
it "should use default values if defined for keys" do
|
123
123
|
@document.key :active, Boolean, :default => true
|
124
124
|
|
125
125
|
@document.new.active.should be_true
|
126
126
|
@document.new(:active => false).active.should be_false
|
127
127
|
end
|
128
128
|
|
129
|
-
should
|
129
|
+
it "should use default values if defined even when custom data type" do
|
130
130
|
@document.key :window, WindowSize, :default => WindowSize.new(600, 480)
|
131
131
|
|
132
132
|
doc = @document.new
|
@@ -134,7 +134,7 @@ class DocumentTest < Test::Unit::TestCase
|
|
134
134
|
end
|
135
135
|
|
136
136
|
context "root document" do
|
137
|
-
should
|
137
|
+
it "should set self to the root document on embedded documents" do
|
138
138
|
klass = Doc()
|
139
139
|
pets = EDoc()
|
140
140
|
|
@@ -146,11 +146,11 @@ class DocumentTest < Test::Unit::TestCase
|
|
146
146
|
end
|
147
147
|
|
148
148
|
context "new?" do
|
149
|
-
should
|
149
|
+
it "should be true if no id" do
|
150
150
|
@document.new.new?.should be_true
|
151
151
|
end
|
152
152
|
|
153
|
-
should
|
153
|
+
it "should be true if id but using custom id and not saved yet" do
|
154
154
|
@document.key :_id, String
|
155
155
|
doc = silence_stderr { @document.new }
|
156
156
|
doc.id = '1234'
|
@@ -159,29 +159,29 @@ class DocumentTest < Test::Unit::TestCase
|
|
159
159
|
end
|
160
160
|
|
161
161
|
context "equality" do
|
162
|
-
|
162
|
+
before do
|
163
163
|
@oid = BSON::ObjectId.new
|
164
164
|
end
|
165
165
|
|
166
|
-
should
|
166
|
+
it "should delegate hash to _id" do
|
167
167
|
doc = @document.new
|
168
168
|
doc.hash.should == doc._id.hash
|
169
169
|
end
|
170
170
|
|
171
|
-
should
|
171
|
+
it "should delegate eql to ==" do
|
172
172
|
doc = @document.new
|
173
173
|
other = @document.new
|
174
174
|
doc.eql?(other).should == (doc == other)
|
175
175
|
doc.eql?(doc).should == (doc == doc)
|
176
176
|
end
|
177
177
|
|
178
|
-
should
|
178
|
+
it "should know if same object as another" do
|
179
179
|
doc = @document.new
|
180
180
|
doc.should equal(doc)
|
181
181
|
doc.should_not equal(@document.new)
|
182
182
|
end
|
183
183
|
|
184
|
-
should
|
184
|
+
it "should allow set operations on array of documents" do
|
185
185
|
@document.key :parent_id, ObjectId
|
186
186
|
@document.belongs_to :parent, :class => @document
|
187
187
|
|
@@ -191,15 +191,15 @@ class DocumentTest < Test::Unit::TestCase
|
|
191
191
|
([child.parent] & [parent]).should == [parent]
|
192
192
|
end
|
193
193
|
|
194
|
-
should
|
194
|
+
it "should be equal if id and class are the same" do
|
195
195
|
(@document.new('_id' => @oid) == @document.new('_id' => @oid)).should be(true)
|
196
196
|
end
|
197
197
|
|
198
|
-
should
|
198
|
+
it "should not be equal if class same but id different" do
|
199
199
|
(@document.new('_id' => @oid) == @document.new('_id' => BSON::ObjectId.new)).should be(false)
|
200
200
|
end
|
201
201
|
|
202
|
-
should
|
202
|
+
it "should not be equal if id same but class different" do
|
203
203
|
another_document = Doc()
|
204
204
|
(@document.new('_id' => @oid) == another_document.new('_id' => @oid)).should be(false)
|
205
205
|
end
|
@@ -207,19 +207,19 @@ class DocumentTest < Test::Unit::TestCase
|
|
207
207
|
|
208
208
|
context "nil attributes" do
|
209
209
|
|
210
|
-
should
|
210
|
+
it "should list all the keys and default non nil attributes" do
|
211
211
|
doc = @document.new
|
212
212
|
doc.keys.keys.sort.should == ['_id', 'age', 'name']
|
213
213
|
doc.attributes.keys.sort.should == ['_id']
|
214
214
|
end
|
215
215
|
|
216
|
-
should
|
216
|
+
it "should list all the keys and non nil attributes" do
|
217
217
|
doc = @document.new(:name => "John")
|
218
218
|
doc.keys.keys.sort.should == ['_id', 'age', 'name']
|
219
219
|
doc.attributes.keys.sort.should == ['_id','name']
|
220
220
|
end
|
221
221
|
|
222
|
-
should
|
222
|
+
it "should list all the keys and pickup changed nil attributes" do
|
223
223
|
doc = @document.new(:name => "John")
|
224
224
|
doc.keys.keys.sort.should == ['_id', 'age', 'name']
|
225
225
|
doc.attributes.keys.sort.should == ['_id','name']
|
@@ -230,7 +230,7 @@ class DocumentTest < Test::Unit::TestCase
|
|
230
230
|
doc.attributes.keys.sort.should == ['_id']
|
231
231
|
end
|
232
232
|
|
233
|
-
should
|
233
|
+
it "should list all the keys and pickup changed nil and non-nil attributes" do
|
234
234
|
doc = @document.new(:name => "John")
|
235
235
|
doc.keys.keys.sort.should == ['_id', 'age', 'name']
|
236
236
|
doc.attributes.keys.sort.should == ['_id','name']
|
@@ -1,35 +1,35 @@
|
|
1
|
-
require '
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
|
-
|
3
|
+
describe "DynamicFinder" do
|
4
4
|
DynamicFinder = MongoMapper::Plugins::DynamicQuerying::DynamicFinder
|
5
5
|
|
6
|
-
should
|
6
|
+
it "should initialize with method" do
|
7
7
|
finder = DynamicFinder.new(:foobar)
|
8
8
|
finder.method.should == :foobar
|
9
9
|
end
|
10
10
|
|
11
11
|
context "found?" do
|
12
|
-
should
|
12
|
+
it "should be true for find_by" do
|
13
13
|
DynamicFinder.new(:find_by_foo).found?.should be_true
|
14
14
|
end
|
15
15
|
|
16
|
-
should
|
16
|
+
it "should be true for find_by with !" do
|
17
17
|
DynamicFinder.new(:find_by_foo!).found?.should be_true
|
18
18
|
end
|
19
19
|
|
20
|
-
should
|
20
|
+
it "should be true for find_all_by" do
|
21
21
|
DynamicFinder.new(:find_all_by_foo).found?.should be_true
|
22
22
|
end
|
23
23
|
|
24
|
-
should
|
24
|
+
it "should be true for find_or_initialize_by" do
|
25
25
|
DynamicFinder.new(:find_or_initialize_by_foo).found?.should be_true
|
26
26
|
end
|
27
27
|
|
28
|
-
should
|
28
|
+
it "should be true for find_or_create_by" do
|
29
29
|
DynamicFinder.new(:find_or_create_by_foo).found?.should be_true
|
30
30
|
end
|
31
31
|
|
32
|
-
should
|
32
|
+
it "should be false for anything else" do
|
33
33
|
[:foobar, :bazwick].each do |method|
|
34
34
|
DynamicFinder.new(method).found?.should be_false
|
35
35
|
end
|
@@ -37,88 +37,88 @@ class DynamicFinderTest < Test::Unit::TestCase
|
|
37
37
|
end
|
38
38
|
|
39
39
|
context "find_all_by" do
|
40
|
-
should
|
40
|
+
it "should parse one attribute" do
|
41
41
|
DynamicFinder.new(:find_all_by_foo).attributes.should == %w(foo)
|
42
42
|
end
|
43
43
|
|
44
|
-
should
|
44
|
+
it "should parse multiple attributes" do
|
45
45
|
DynamicFinder.new(:find_all_by_foo_and_bar).attributes.should == %w(foo bar)
|
46
46
|
DynamicFinder.new(:find_all_by_foo_and_bar_and_baz).attributes.should == %w(foo bar baz)
|
47
47
|
end
|
48
48
|
|
49
|
-
should
|
49
|
+
it "should set finder to :all" do
|
50
50
|
DynamicFinder.new(:find_all_by_foo_and_bar).finder.should == :all
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
54
|
context "find_by" do
|
55
|
-
should
|
55
|
+
it "should parse one attribute" do
|
56
56
|
DynamicFinder.new(:find_by_foo).attributes.should == %w(foo)
|
57
57
|
end
|
58
58
|
|
59
|
-
should
|
59
|
+
it "should parse multiple attributes" do
|
60
60
|
DynamicFinder.new(:find_by_foo_and_bar).attributes.should == %w(foo bar)
|
61
61
|
end
|
62
62
|
|
63
|
-
should
|
63
|
+
it "should set finder to :first" do
|
64
64
|
DynamicFinder.new(:find_by_foo).finder.should == :first
|
65
65
|
end
|
66
66
|
|
67
|
-
should
|
67
|
+
it "should set bang to false" do
|
68
68
|
DynamicFinder.new(:find_by_foo).bang.should be_false
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
72
72
|
context "find_by with !" do
|
73
|
-
should
|
73
|
+
it "should parse one attribute" do
|
74
74
|
DynamicFinder.new(:find_by_foo!).attributes.should == %w(foo)
|
75
75
|
end
|
76
76
|
|
77
|
-
should
|
77
|
+
it "should parse multiple attributes" do
|
78
78
|
DynamicFinder.new(:find_by_foo_and_bar!).attributes.should == %w(foo bar)
|
79
79
|
end
|
80
80
|
|
81
|
-
should
|
81
|
+
it "should set finder to :first" do
|
82
82
|
DynamicFinder.new(:find_by_foo!).finder.should == :first
|
83
83
|
end
|
84
84
|
|
85
|
-
should
|
85
|
+
it "should set bang to true" do
|
86
86
|
DynamicFinder.new(:find_by_foo!).bang.should be_true
|
87
87
|
end
|
88
88
|
end
|
89
89
|
|
90
90
|
context "find_or_initialize_by" do
|
91
|
-
should
|
91
|
+
it "should parse one attribute" do
|
92
92
|
DynamicFinder.new(:find_or_initialize_by_foo).attributes.should == %w(foo)
|
93
93
|
end
|
94
94
|
|
95
|
-
should
|
95
|
+
it "should parse multiple attributes" do
|
96
96
|
DynamicFinder.new(:find_or_initialize_by_foo_and_bar).attributes.should == %w(foo bar)
|
97
97
|
end
|
98
98
|
|
99
|
-
should
|
99
|
+
it "should set finder to :first" do
|
100
100
|
DynamicFinder.new(:find_or_initialize_by_foo).finder.should == :first
|
101
101
|
end
|
102
102
|
|
103
|
-
should
|
103
|
+
it "should set instantiator to new" do
|
104
104
|
DynamicFinder.new(:find_or_initialize_by_foo).instantiator.should == :new
|
105
105
|
end
|
106
106
|
end
|
107
107
|
|
108
108
|
context "find_or_create_by" do
|
109
|
-
should
|
109
|
+
it "should parse one attribute" do
|
110
110
|
DynamicFinder.new(:find_or_create_by_foo).attributes.should == %w(foo)
|
111
111
|
end
|
112
112
|
|
113
|
-
should
|
113
|
+
it "should parse multiple attributes" do
|
114
114
|
DynamicFinder.new(:find_or_create_by_foo_and_bar).attributes.should == %w(foo bar)
|
115
115
|
end
|
116
116
|
|
117
|
-
should
|
117
|
+
it "should set finder to :first" do
|
118
118
|
DynamicFinder.new(:find_or_create_by_foo).finder.should == :first
|
119
119
|
end
|
120
120
|
|
121
|
-
should
|
121
|
+
it "should set instantiator to new" do
|
122
122
|
DynamicFinder.new(:find_or_create_by_foo).instantiator.should == :create
|
123
123
|
end
|
124
124
|
end
|