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
@@ -0,0 +1,155 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
|
4
|
+
describe "Key" do
|
5
|
+
context ".new with no id and _id of type integer" do
|
6
|
+
it "should not error" do
|
7
|
+
lambda {
|
8
|
+
klass = Doc() do
|
9
|
+
key :_id, Integer
|
10
|
+
end
|
11
|
+
# No sensible default id for integer, people better pass them in if they user this
|
12
|
+
silence_stderr { klass.new.id.should be_nil }
|
13
|
+
}.should_not raise_error
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context ".key?(:symbol)" do
|
18
|
+
it "should be true if document has key" do
|
19
|
+
Address.key?(:city).should be_true
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should be false if document does not have key" do
|
23
|
+
Address.key?(:foo).should be_false
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context "#assign" do
|
28
|
+
it "should raise a deprecation warning" do
|
29
|
+
klass = Doc() do
|
30
|
+
key :_id, Integer
|
31
|
+
end
|
32
|
+
doc = klass.new
|
33
|
+
doc.should_receive(:warn).once
|
34
|
+
doc.assign({:x => :y})
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# TODO: Are these methods deprecated?
|
39
|
+
context "#embedded and #non_embedded_keys" do
|
40
|
+
EmbeddableThingie = EDoc {
|
41
|
+
key :whiz, String
|
42
|
+
}
|
43
|
+
|
44
|
+
let(:klass) do
|
45
|
+
Doc do
|
46
|
+
key :foo, String
|
47
|
+
key :embeddable_thingie, EmbeddableThingie
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should get non-embeddable keys" do
|
52
|
+
klass.new.non_embedded_keys.map(&:name).should =~ %w(_id foo)
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should get embeddable keys" do
|
56
|
+
klass.new.embedded_keys.map(&:name).should == %w(embeddable_thingie)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
context ".key?('string')" do
|
61
|
+
it "should be true if document has key" do
|
62
|
+
Address.key?('city').should be_true
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should be false if document does not have key" do
|
66
|
+
Address.key?('foo').should be_false
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
context ".new (from database)" do
|
71
|
+
before do
|
72
|
+
@klass = Doc do
|
73
|
+
key :user, Hash
|
74
|
+
|
75
|
+
def user=(user)
|
76
|
+
super(:id => user.id, :name => user.name)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
user_class = Struct.new(:id, :name)
|
81
|
+
@klass.create(:user => user_class.new(1, 'John Nunemaker'))
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should use []= for keys instead of public writer" do
|
85
|
+
expect {
|
86
|
+
doc = @klass.first
|
87
|
+
doc.user['id'].should == 1
|
88
|
+
doc.user['name'].should == 'John Nunemaker'
|
89
|
+
}.to_not raise_error
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
context ".load" do
|
94
|
+
it "should return nil if argument is nil" do
|
95
|
+
Doc().load(nil).should be_nil
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
context "default values" do
|
100
|
+
before do
|
101
|
+
@klass = Doc do
|
102
|
+
key :value, Integer, :default => 1
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
it "should initialize default value" do
|
107
|
+
@klass.new.value.should == 1
|
108
|
+
end
|
109
|
+
|
110
|
+
it "should allow overriding default value" do
|
111
|
+
@klass.new(:value => 2).value.should == 2
|
112
|
+
end
|
113
|
+
|
114
|
+
it "should allow re-setting a value that is defaulted" do
|
115
|
+
instance = @klass.new
|
116
|
+
instance.value = 2
|
117
|
+
instance.value.should == 2
|
118
|
+
instance.value = nil
|
119
|
+
instance.value.should == nil
|
120
|
+
end
|
121
|
+
|
122
|
+
context "for _id" do
|
123
|
+
before do
|
124
|
+
@klass.class_eval do
|
125
|
+
key :_id, Integer, :default => lambda { 12345 }
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
it "should work" do
|
130
|
+
@klass.new._id.should == 12345
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
context "when loading from the database" do
|
136
|
+
it "should not set default values for keys that already exist" do
|
137
|
+
counter = 0
|
138
|
+
instance = nil
|
139
|
+
|
140
|
+
klass = Doc do
|
141
|
+
key :value, Integer, :default => lambda { counter += 1 }
|
142
|
+
end
|
143
|
+
|
144
|
+
expect { instance = klass.create }.to change { counter }.by(1)
|
145
|
+
expect {
|
146
|
+
instance.reload.value.should == 1
|
147
|
+
|
148
|
+
instance.value = 10
|
149
|
+
instance.save
|
150
|
+
|
151
|
+
instance.reload.value.should == 10
|
152
|
+
}.to_not change { counter }
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end # KeyTest
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'rails/generators'
|
3
|
+
require 'rails/generators/test_case'
|
4
|
+
require 'rails/generators/mongo_mapper/model/model_generator'
|
5
|
+
|
6
|
+
describe MongoMapper::Generators::ModelGenerator do
|
7
|
+
include GeneratorSpec::TestCase
|
8
|
+
destination File.expand_path('../../tmp', File.dirname(__FILE__))
|
9
|
+
|
10
|
+
before do
|
11
|
+
prepare_destination
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'help shows MongoMapper options' do
|
15
|
+
pending "Rails 4 breaks Kernel#capture on JRuby", :if => (Rails::VERSION::MAJOR >= 4 && RUBY_PLATFORM == "java") do
|
16
|
+
content = run_generator ['--help']
|
17
|
+
assert_match(/rails generate mongo_mapper:model/, content)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'model are properly created' do
|
22
|
+
run_generator ['Color']
|
23
|
+
assert_file 'app/models/color.rb', /class Color/
|
24
|
+
assert_file 'app/models/color.rb', /include MongoMapper::Document/
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'model are properly created with attributes' do
|
28
|
+
run_generator ['Color', 'name:string', 'saturation:integer']
|
29
|
+
assert_file 'app/models/color.rb', /class Color/
|
30
|
+
assert_file 'app/models/color.rb', /include MongoMapper::Document/
|
31
|
+
assert_file 'app/models/color.rb', /key :name, String/
|
32
|
+
assert_file 'app/models/color.rb', /key :saturation, Integer/
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'model are properly created with timestamps option' do
|
36
|
+
run_generator ['Color', '--timestamps']
|
37
|
+
assert_file 'app/models/color.rb', /class Color/
|
38
|
+
assert_file 'app/models/color.rb', /include MongoMapper::Document/
|
39
|
+
assert_file 'app/models/color.rb', /timestamps/
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'model are properly created with parent option' do
|
43
|
+
run_generator ['Green', '--parent', 'Color']
|
44
|
+
assert_file 'app/models/green.rb', /class Green < Color/
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -0,0 +1,184 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class Address; end
|
4
|
+
|
5
|
+
describe "MongoMapper" do
|
6
|
+
it "should be able to write and read connection" do
|
7
|
+
conn = Mongo::MongoClient.new
|
8
|
+
MongoMapper.connection = conn
|
9
|
+
MongoMapper.connection.should == conn
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should default connection to new mongo ruby driver" do
|
13
|
+
MongoMapper.connection = nil
|
14
|
+
MongoMapper.connection.should be_instance_of(Mongo::MongoClient)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should be able to write and read default database" do
|
18
|
+
MongoMapper.database = 'test'
|
19
|
+
MongoMapper.database.should be_instance_of(Mongo::DB)
|
20
|
+
MongoMapper.database.name.should == 'test'
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should have document not found error" do
|
24
|
+
lambda {
|
25
|
+
MongoMapper::DocumentNotFound
|
26
|
+
}.should_not raise_error
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should be able to read/write config" do
|
30
|
+
config = {
|
31
|
+
'development' => {'host' => '127.0.0.1', 'port' => 27017, 'database' => 'test'},
|
32
|
+
'production' => {'host' => '127.0.0.1', 'port' => 27017, 'database' => 'test-prod'}
|
33
|
+
}
|
34
|
+
MongoMapper.config = config
|
35
|
+
MongoMapper.config.should == config
|
36
|
+
end
|
37
|
+
|
38
|
+
context "connecting to environment from config" do
|
39
|
+
it "should work without authentication" do
|
40
|
+
MongoMapper.config = {
|
41
|
+
'development' => {'host' => '127.0.0.1', 'port' => 27017, 'database' => 'test'}
|
42
|
+
}
|
43
|
+
Mongo::MongoClient.should_receive(:new).with('127.0.0.1', 27017, {})
|
44
|
+
MongoMapper.should_receive(:database=).with('test')
|
45
|
+
Mongo::DB.any_instance.should_receive(:authenticate).never
|
46
|
+
MongoMapper.connect('development')
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should work without authentication using uri" do
|
50
|
+
MongoMapper.config = {
|
51
|
+
'development' => {'uri' => 'mongodb://127.0.0.1:27017/test'}
|
52
|
+
}
|
53
|
+
Mongo::MongoClient.should_receive(:new).with('127.0.0.1', 27017, {})
|
54
|
+
MongoMapper.should_receive(:database=).with('test')
|
55
|
+
Mongo::DB.any_instance.should_receive(:authenticate).never
|
56
|
+
MongoMapper.connect('development')
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should work with sinatra environment symbol" do
|
60
|
+
MongoMapper.config = {
|
61
|
+
'development' => {'host' => '127.0.0.1', 'port' => 27017, 'database' => 'test'}
|
62
|
+
}
|
63
|
+
Mongo::MongoClient.should_receive(:new).with('127.0.0.1', 27017, {})
|
64
|
+
MongoMapper.should_receive(:database=).with('test')
|
65
|
+
Mongo::DB.any_instance.should_receive(:authenticate).never
|
66
|
+
MongoMapper.connect(:development)
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should work with options" do
|
70
|
+
MongoMapper.config = {
|
71
|
+
'development' => {'host' => '127.0.0.1', 'port' => 27017, 'database' => 'test'}
|
72
|
+
}
|
73
|
+
connection, logger = double('connection'), double('logger')
|
74
|
+
Mongo::MongoClient.should_receive(:new).with('127.0.0.1', 27017, :logger => logger)
|
75
|
+
MongoMapper.connect('development', :logger => logger)
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should pass along ssl when true" do
|
79
|
+
MongoMapper.config = {
|
80
|
+
'development' => {'host' => '127.0.0.1', 'port' => 27017, 'database' => 'test', 'ssl' => true}
|
81
|
+
}
|
82
|
+
connection, logger = double('connection'), double('logger')
|
83
|
+
Mongo::MongoClient.should_receive(:new).with('127.0.0.1', 27017, :logger => logger, :ssl => true)
|
84
|
+
MongoMapper.connect('development', :logger => logger)
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should pass along ssl when false" do
|
88
|
+
MongoMapper.config = {
|
89
|
+
'development' => {'host' => '127.0.0.1', 'port' => 27017, 'database' => 'test', 'ssl' => false}
|
90
|
+
}
|
91
|
+
connection, logger = double('connection'), double('logger')
|
92
|
+
Mongo::MongoClient.should_receive(:new).with('127.0.0.1', 27017, :logger => logger, :ssl => false)
|
93
|
+
MongoMapper.connect('development', :logger => logger)
|
94
|
+
end
|
95
|
+
|
96
|
+
it "should convert read preferences to symbols" do
|
97
|
+
MongoMapper.config = {
|
98
|
+
'development' => {'host' => '127.0.0.1', 'port' => 27017, 'database' => 'test', 'options' => {'read' => 'primary'}}
|
99
|
+
}
|
100
|
+
connection, logger = double('connection'), double('logger')
|
101
|
+
Mongo::MongoClient.should_receive(:new).with('127.0.0.1', 27017, :logger => logger, :read => :primary)
|
102
|
+
MongoMapper.connect('development', :logger => logger)
|
103
|
+
end
|
104
|
+
|
105
|
+
it "should work with options from config" do
|
106
|
+
MongoMapper.config = {
|
107
|
+
'development' => {'host' => '192.168.1.1', 'port' => 2222, 'database' => 'test', 'options' => {'safe' => true}}
|
108
|
+
}
|
109
|
+
connection, logger = double('connection'), double('logger')
|
110
|
+
Mongo::MongoClient.should_receive(:new).with('192.168.1.1', 2222, :logger => logger, :safe => true)
|
111
|
+
MongoMapper.connect('development', :logger => logger)
|
112
|
+
end
|
113
|
+
|
114
|
+
it "should work with options using uri" do
|
115
|
+
MongoMapper.config = {
|
116
|
+
'development' => {'uri' => 'mongodb://127.0.0.1:27017/test'}
|
117
|
+
}
|
118
|
+
connection, logger = double('connection'), double('logger')
|
119
|
+
Mongo::MongoClient.should_receive(:new).with('127.0.0.1', 27017, :logger => logger)
|
120
|
+
MongoMapper.connect('development', :logger => logger)
|
121
|
+
end
|
122
|
+
|
123
|
+
it "should work with authentication" do
|
124
|
+
MongoMapper.config = {
|
125
|
+
'development' => {'host' => '127.0.0.1', 'port' => 27017, 'database' => 'test', 'username' => 'john', 'password' => 'secret'}
|
126
|
+
}
|
127
|
+
Mongo::DB.any_instance.should_receive(:authenticate).with('john', 'secret')
|
128
|
+
MongoMapper.connect('development')
|
129
|
+
end
|
130
|
+
|
131
|
+
it "should work with authentication using uri" do
|
132
|
+
MongoMapper.config = {
|
133
|
+
'development' => {'uri' => 'mongodb://john:secret@127.0.0.1:27017/test'}
|
134
|
+
}
|
135
|
+
Mongo::DB.any_instance.should_receive(:authenticate).with('john', 'secret')
|
136
|
+
MongoMapper.connect('development')
|
137
|
+
end
|
138
|
+
|
139
|
+
it "should raise error for invalid scheme" do
|
140
|
+
MongoMapper.config = {
|
141
|
+
'development' => {'uri' => 'mysql://127.0.0.1:5336/foo'}
|
142
|
+
}
|
143
|
+
expect { MongoMapper.connect('development') }.to raise_error(MongoMapper::InvalidScheme)
|
144
|
+
end
|
145
|
+
|
146
|
+
it "should create a replica set connection if config contains multiple hosts in the old format" do
|
147
|
+
MongoMapper.config = {
|
148
|
+
'development' => {
|
149
|
+
'hosts' => [ ['127.0.0.1', 27017], ['localhost', 27017] ],
|
150
|
+
'database' => 'test'
|
151
|
+
}
|
152
|
+
}
|
153
|
+
|
154
|
+
Mongo::MongoReplicaSetClient.should_receive(:new).with( ['127.0.0.1', 27017], ['localhost', 27017], {'read_secondary' => true} )
|
155
|
+
MongoMapper.should_receive(:database=).with('test')
|
156
|
+
Mongo::DB.any_instance.should_receive(:authenticate).never
|
157
|
+
MongoMapper.connect('development', 'read_secondary' => true)
|
158
|
+
end
|
159
|
+
|
160
|
+
it "should create a replica set connection if config contains multiple hosts in the new format" do
|
161
|
+
MongoMapper.config = {
|
162
|
+
'development' => {
|
163
|
+
'hosts' => ['127.0.0.1:27017', 'localhost:27017'],
|
164
|
+
'database' => 'test'
|
165
|
+
}
|
166
|
+
}
|
167
|
+
|
168
|
+
Mongo::MongoReplicaSetClient.should_receive(:new).with( ['127.0.0.1:27017', 'localhost:27017'], {'read_secondary' => true} )
|
169
|
+
MongoMapper.should_receive(:database=).with('test')
|
170
|
+
Mongo::DB.any_instance.should_receive(:authenticate).never
|
171
|
+
MongoMapper.connect('development', 'read_secondary' => true)
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
context "setup" do
|
176
|
+
it "should work as shortcut for setting config, environment and options" do
|
177
|
+
config, logger = double('config'), double('logger')
|
178
|
+
MongoMapper.should_receive(:config=).with(config)
|
179
|
+
MongoMapper.should_receive(:connect).with('development', :logger => logger)
|
180
|
+
MongoMapper.should_receive(:handle_passenger_forking).once
|
181
|
+
MongoMapper.setup(config, 'development', :logger => logger)
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
|
-
require '
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
|
-
|
4
|
-
should
|
3
|
+
describe "Plugins" do
|
4
|
+
it "should default plugins to empty array" do
|
5
5
|
Class.new { extend MongoMapper::Plugins }.plugins.should == []
|
6
6
|
end
|
7
7
|
|
@@ -24,41 +24,41 @@ class PluginsTest < Test::Unit::TestCase
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
|
27
|
+
before do
|
28
28
|
@document = Class.new do
|
29
29
|
extend MongoMapper::Plugins
|
30
30
|
plugin MyConcern
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
-
should
|
34
|
+
it "should include instance methods" do
|
35
35
|
@document.new.instance_foo.should == 'instance_foo'
|
36
36
|
end
|
37
37
|
|
38
|
-
should
|
38
|
+
it "should extend class methods" do
|
39
39
|
@document.class_foo.should == 'class_foo'
|
40
40
|
end
|
41
41
|
|
42
|
-
should
|
42
|
+
it "should pass model to configure" do
|
43
43
|
@document.new.should respond_to(:from_concern)
|
44
44
|
end
|
45
45
|
|
46
|
-
should
|
46
|
+
it "should add plugin to plugins" do
|
47
47
|
@document.plugins.should include(MyConcern)
|
48
48
|
end
|
49
49
|
|
50
50
|
context "Document" do
|
51
|
-
|
51
|
+
before do
|
52
52
|
MongoMapper::Document.plugins.delete(MyConcern)
|
53
53
|
end
|
54
54
|
|
55
|
-
should
|
55
|
+
it 'should allow plugins on Document' do
|
56
56
|
MongoMapper::Document.plugin(MyConcern)
|
57
57
|
Doc().should respond_to(:class_foo)
|
58
58
|
Doc().new.should respond_to(:instance_foo)
|
59
59
|
end
|
60
60
|
|
61
|
-
should
|
61
|
+
it 'should add plugins to classes that include Document before they are added' do
|
62
62
|
article = Doc()
|
63
63
|
MongoMapper::Document.plugin(MyConcern)
|
64
64
|
article.should respond_to(:class_foo)
|
@@ -67,18 +67,18 @@ class PluginsTest < Test::Unit::TestCase
|
|
67
67
|
end
|
68
68
|
|
69
69
|
context "EmbeddedDocument" do
|
70
|
-
|
70
|
+
before do
|
71
71
|
MongoMapper::EmbeddedDocument.plugins.delete(MyConcern)
|
72
72
|
end
|
73
73
|
|
74
|
-
should
|
74
|
+
it 'should allow plugins on EmbeddedDocument' do
|
75
75
|
MongoMapper::EmbeddedDocument.plugin(MyConcern)
|
76
76
|
article = EDoc()
|
77
77
|
article.should respond_to(:class_foo)
|
78
78
|
article.new.should respond_to(:instance_foo)
|
79
79
|
end
|
80
80
|
|
81
|
-
should
|
81
|
+
it 'should add plugins to classes that include EmbeddedDocument before they are added' do
|
82
82
|
article = EDoc()
|
83
83
|
MongoMapper::EmbeddedDocument.plugin(MyConcern)
|
84
84
|
article.should respond_to(:class_foo)
|