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,132 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
require 'rack/test'
|
3
|
-
|
4
|
-
class IdentityMapMiddlewareTest < Test::Unit::TestCase
|
5
|
-
include Rack::Test::Methods
|
6
|
-
|
7
|
-
def app
|
8
|
-
@app ||= Rack::Builder.new do
|
9
|
-
use MongoMapper::Middleware::IdentityMap
|
10
|
-
|
11
|
-
map "/" do
|
12
|
-
run lambda {|env| [200, {}, []] }
|
13
|
-
end
|
14
|
-
|
15
|
-
map "/fail" do
|
16
|
-
run lambda {|env| raise "FAIL!" }
|
17
|
-
end
|
18
|
-
end.to_app
|
19
|
-
end
|
20
|
-
|
21
|
-
context "" do
|
22
|
-
setup do
|
23
|
-
@enabled = MongoMapper::Plugins::IdentityMap.enabled
|
24
|
-
MongoMapper::Plugins::IdentityMap.enabled = false
|
25
|
-
end
|
26
|
-
|
27
|
-
teardown do
|
28
|
-
MongoMapper::Plugins::IdentityMap.enabled = @enabled
|
29
|
-
end
|
30
|
-
|
31
|
-
should "delegate" do
|
32
|
-
called = false
|
33
|
-
mw = MongoMapper::Middleware::IdentityMap.new lambda { |env|
|
34
|
-
called = true
|
35
|
-
[200, {}, nil]
|
36
|
-
}
|
37
|
-
mw.call({})
|
38
|
-
called.should be_true
|
39
|
-
end
|
40
|
-
|
41
|
-
should "enable identity map during delegation" do
|
42
|
-
mw = MongoMapper::Middleware::IdentityMap.new lambda { |env|
|
43
|
-
MongoMapper::Plugins::IdentityMap.should be_enabled
|
44
|
-
[200, {}, nil]
|
45
|
-
}
|
46
|
-
mw.call({})
|
47
|
-
end
|
48
|
-
|
49
|
-
class Enum < Struct.new(:iter)
|
50
|
-
def each(&b)
|
51
|
-
iter.call(&b)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
should "enable IM for body each" do
|
56
|
-
mw = MongoMapper::Middleware::IdentityMap.new lambda { |env|
|
57
|
-
[200, {}, Enum.new(lambda { |&b|
|
58
|
-
MongoMapper::Plugins::IdentityMap.should be_enabled
|
59
|
-
b.call "hello"
|
60
|
-
})]
|
61
|
-
}
|
62
|
-
body = mw.call({}).last
|
63
|
-
body.each { |x| x.should eql('hello') }
|
64
|
-
end
|
65
|
-
|
66
|
-
should "disable IM after body close" do
|
67
|
-
mw = MongoMapper::Middleware::IdentityMap.new lambda { |env| [200, {}, []] }
|
68
|
-
body = mw.call({}).last
|
69
|
-
MongoMapper::Plugins::IdentityMap.should be_enabled
|
70
|
-
body.close
|
71
|
-
MongoMapper::Plugins::IdentityMap.should_not be_enabled
|
72
|
-
end
|
73
|
-
|
74
|
-
should "clear IM after body close" do
|
75
|
-
mw = MongoMapper::Middleware::IdentityMap.new lambda { |env| [200, {}, []] }
|
76
|
-
body = mw.call({}).last
|
77
|
-
|
78
|
-
MongoMapper::Plugins::IdentityMap.repository['hello'] = 'world'
|
79
|
-
MongoMapper::Plugins::IdentityMap.repository.should_not be_empty
|
80
|
-
|
81
|
-
body.close
|
82
|
-
|
83
|
-
MongoMapper::Plugins::IdentityMap.repository.should be_empty
|
84
|
-
end
|
85
|
-
|
86
|
-
context "with a successful request" do
|
87
|
-
should "clear the identity map" do
|
88
|
-
MongoMapper::Plugins::IdentityMap.expects(:clear).twice
|
89
|
-
get '/'
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
context "when the request raises an error" do
|
94
|
-
should "clear the identity map" do
|
95
|
-
MongoMapper::Plugins::IdentityMap.expects(:clear).once
|
96
|
-
get '/fail' rescue nil
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
# class IdentityMapMiddlewareTest < Test::Unit::TestCase
|
103
|
-
# include Rack::Test::Methods
|
104
|
-
|
105
|
-
# def app
|
106
|
-
# @app ||= Rack::Builder.new do
|
107
|
-
# use MongoMapper::Middleware::IdentityMap
|
108
|
-
# map "/" do
|
109
|
-
# run lambda {|env| [200, {}, []] }
|
110
|
-
# end
|
111
|
-
# map "/fail" do
|
112
|
-
# run lambda {|env| raise "FAIL!" }
|
113
|
-
# end
|
114
|
-
# end.to_app
|
115
|
-
# end
|
116
|
-
|
117
|
-
# context "with a successful request" do
|
118
|
-
# should "clear the identity map" do
|
119
|
-
# MongoMapper::Plugins::IdentityMap.expects(:clear).twice
|
120
|
-
# get '/'
|
121
|
-
# end
|
122
|
-
# end
|
123
|
-
|
124
|
-
# context "when the request raises an error" do
|
125
|
-
# should "clear the identity map" do
|
126
|
-
# MongoMapper::Plugins::IdentityMap.expects(:clear).twice
|
127
|
-
# get '/fail' rescue nil
|
128
|
-
# end
|
129
|
-
# end
|
130
|
-
|
131
|
-
|
132
|
-
# end
|
data/test/unit/test_keys.rb
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
require 'models'
|
3
|
-
|
4
|
-
class KeyTest < Test::Unit::TestCase
|
5
|
-
context ".new with no id and _id of type integer" do
|
6
|
-
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
|
-
should "be true if document has key" do
|
19
|
-
Address.key?(:city).should be_true
|
20
|
-
end
|
21
|
-
|
22
|
-
should "be false if document does not have key" do
|
23
|
-
Address.key?(:foo).should be_false
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
context ".key?('string')" do
|
28
|
-
should "be true if document has key" do
|
29
|
-
Address.key?('city').should be_true
|
30
|
-
end
|
31
|
-
|
32
|
-
should "be false if document does not have key" do
|
33
|
-
Address.key?('foo').should be_false
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
context ".new (from database)" do
|
38
|
-
setup do
|
39
|
-
@klass = Doc do
|
40
|
-
key :user, Hash
|
41
|
-
|
42
|
-
def user=(user)
|
43
|
-
super(:id => user.id, :name => user.name)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
user_class = Struct.new(:id, :name)
|
48
|
-
@klass.create(:user => user_class.new(1, 'John Nunemaker'))
|
49
|
-
end
|
50
|
-
|
51
|
-
should "use []= for keys instead of public writer" do
|
52
|
-
assert_nothing_raised do
|
53
|
-
doc = @klass.first
|
54
|
-
doc.user['id'].should == 1
|
55
|
-
doc.user['name'].should == 'John Nunemaker'
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
context ".load" do
|
61
|
-
should "return nil if argument is nil" do
|
62
|
-
Doc().load(nil).should be_nil
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end # KeyTest
|
@@ -1,157 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class Address; end
|
4
|
-
|
5
|
-
class MongoMapperTest < Test::Unit::TestCase
|
6
|
-
should "be able to write and read connection" do
|
7
|
-
conn = Mongo::Connection.new
|
8
|
-
MongoMapper.connection = conn
|
9
|
-
MongoMapper.connection.should == conn
|
10
|
-
end
|
11
|
-
|
12
|
-
should "default connection to new mongo ruby driver" do
|
13
|
-
MongoMapper.connection = nil
|
14
|
-
MongoMapper.connection.should be_instance_of(Mongo::Connection)
|
15
|
-
end
|
16
|
-
|
17
|
-
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
|
-
should "have document not found error" do
|
24
|
-
lambda {
|
25
|
-
MongoMapper::DocumentNotFound
|
26
|
-
}.should_not raise_error
|
27
|
-
end
|
28
|
-
|
29
|
-
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
|
-
should "work without authentication" do
|
40
|
-
MongoMapper.config = {
|
41
|
-
'development' => {'host' => '127.0.0.1', 'port' => 27017, 'database' => 'test'}
|
42
|
-
}
|
43
|
-
Mongo::Connection.expects(:new).with('127.0.0.1', 27017, {})
|
44
|
-
MongoMapper.expects(:database=).with('test')
|
45
|
-
Mongo::DB.any_instance.expects(:authenticate).never
|
46
|
-
MongoMapper.connect('development')
|
47
|
-
end
|
48
|
-
|
49
|
-
should "work without authentication using uri" do
|
50
|
-
MongoMapper.config = {
|
51
|
-
'development' => {'uri' => 'mongodb://127.0.0.1:27017/test'}
|
52
|
-
}
|
53
|
-
Mongo::Connection.expects(:new).with('127.0.0.1', 27017, {})
|
54
|
-
MongoMapper.expects(:database=).with('test')
|
55
|
-
Mongo::DB.any_instance.expects(:authenticate).never
|
56
|
-
MongoMapper.connect('development')
|
57
|
-
end
|
58
|
-
|
59
|
-
should "work with sinatra environment symbol" do
|
60
|
-
MongoMapper.config = {
|
61
|
-
'development' => {'host' => '127.0.0.1', 'port' => 27017, 'database' => 'test'}
|
62
|
-
}
|
63
|
-
Mongo::Connection.expects(:new).with('127.0.0.1', 27017, {})
|
64
|
-
MongoMapper.expects(:database=).with('test')
|
65
|
-
Mongo::DB.any_instance.expects(:authenticate).never
|
66
|
-
MongoMapper.connect(:development)
|
67
|
-
end
|
68
|
-
|
69
|
-
should "work with options" do
|
70
|
-
MongoMapper.config = {
|
71
|
-
'development' => {'host' => '127.0.0.1', 'port' => 27017, 'database' => 'test'}
|
72
|
-
}
|
73
|
-
connection, logger = mock('connection'), mock('logger')
|
74
|
-
Mongo::Connection.expects(:new).with('127.0.0.1', 27017, :logger => logger)
|
75
|
-
MongoMapper.connect('development', :logger => logger)
|
76
|
-
end
|
77
|
-
|
78
|
-
should "work with options from config" do
|
79
|
-
MongoMapper.config = {
|
80
|
-
'development' => {'host' => '192.168.1.1', 'port' => 2222, 'database' => 'test', 'options' => {'safe' => true}}
|
81
|
-
}
|
82
|
-
connection, logger = mock('connection'), mock('logger')
|
83
|
-
Mongo::Connection.expects(:new).with('192.168.1.1', 2222, :logger => logger, :safe => true)
|
84
|
-
MongoMapper.connect('development', :logger => logger)
|
85
|
-
end
|
86
|
-
|
87
|
-
should "work with options using uri" do
|
88
|
-
MongoMapper.config = {
|
89
|
-
'development' => {'uri' => 'mongodb://127.0.0.1:27017/test'}
|
90
|
-
}
|
91
|
-
connection, logger = mock('connection'), mock('logger')
|
92
|
-
Mongo::Connection.expects(:new).with('127.0.0.1', 27017, :logger => logger)
|
93
|
-
MongoMapper.connect('development', :logger => logger)
|
94
|
-
end
|
95
|
-
|
96
|
-
should "work with authentication" do
|
97
|
-
MongoMapper.config = {
|
98
|
-
'development' => {'host' => '127.0.0.1', 'port' => 27017, 'database' => 'test', 'username' => 'john', 'password' => 'secret'}
|
99
|
-
}
|
100
|
-
Mongo::DB.any_instance.expects(:authenticate).with('john', 'secret')
|
101
|
-
MongoMapper.connect('development')
|
102
|
-
end
|
103
|
-
|
104
|
-
should "work with authentication using uri" do
|
105
|
-
MongoMapper.config = {
|
106
|
-
'development' => {'uri' => 'mongodb://john:secret@127.0.0.1:27017/test'}
|
107
|
-
}
|
108
|
-
Mongo::DB.any_instance.expects(:authenticate).with('john', 'secret')
|
109
|
-
MongoMapper.connect('development')
|
110
|
-
end
|
111
|
-
|
112
|
-
should "raise error for invalid scheme" do
|
113
|
-
MongoMapper.config = {
|
114
|
-
'development' => {'uri' => 'mysql://127.0.0.1:5336/foo'}
|
115
|
-
}
|
116
|
-
assert_raises(MongoMapper::InvalidScheme) { MongoMapper.connect('development') }
|
117
|
-
end
|
118
|
-
|
119
|
-
should "create a replica set connection if config contains multiple hosts in the old format" do
|
120
|
-
MongoMapper.config = {
|
121
|
-
'development' => {
|
122
|
-
'hosts' => [ ['127.0.0.1', 27017], ['localhost', 27017] ],
|
123
|
-
'database' => 'test'
|
124
|
-
}
|
125
|
-
}
|
126
|
-
|
127
|
-
Mongo::ReplSetConnection.expects(:new).with( ['127.0.0.1', 27017], ['localhost', 27017], {'read_secondary' => true} )
|
128
|
-
MongoMapper.expects(:database=).with('test')
|
129
|
-
Mongo::DB.any_instance.expects(:authenticate).never
|
130
|
-
MongoMapper.connect('development', 'read_secondary' => true)
|
131
|
-
end
|
132
|
-
|
133
|
-
should "create a replica set connection if config contains multiple hosts in the new format" do
|
134
|
-
MongoMapper.config = {
|
135
|
-
'development' => {
|
136
|
-
'hosts' => ['127.0.0.1:27017', 'localhost:27017'],
|
137
|
-
'database' => 'test'
|
138
|
-
}
|
139
|
-
}
|
140
|
-
|
141
|
-
Mongo::ReplSetConnection.expects(:new).with( ['127.0.0.1:27017', 'localhost:27017'], {'read_secondary' => true} )
|
142
|
-
MongoMapper.expects(:database=).with('test')
|
143
|
-
Mongo::DB.any_instance.expects(:authenticate).never
|
144
|
-
MongoMapper.connect('development', 'read_secondary' => true)
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
context "setup" do
|
149
|
-
should "work as shortcut for setting config, environment and options" do
|
150
|
-
config, logger = mock('config'), mock('logger')
|
151
|
-
MongoMapper.expects(:config=).with(config)
|
152
|
-
MongoMapper.expects(:connect).with('development', :logger => logger)
|
153
|
-
MongoMapper.expects(:handle_passenger_forking).once
|
154
|
-
MongoMapper.setup(config, 'development', :logger => logger)
|
155
|
-
end
|
156
|
-
end
|
157
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class TestRailsCompatibility < Test::Unit::TestCase
|
4
|
-
class Item
|
5
|
-
include MongoMapper::EmbeddedDocument
|
6
|
-
key :for_all, String
|
7
|
-
end
|
8
|
-
|
9
|
-
class FirstItem < Item
|
10
|
-
key :first_only, String
|
11
|
-
many :second_items
|
12
|
-
end
|
13
|
-
|
14
|
-
class SecondItem < Item
|
15
|
-
key :second_only, String
|
16
|
-
end
|
17
|
-
|
18
|
-
context "EmbeddedDocument" do
|
19
|
-
should "alias many to has_many" do
|
20
|
-
FirstItem.should respond_to(:has_many)
|
21
|
-
end
|
22
|
-
|
23
|
-
should "alias one to has_one" do
|
24
|
-
FirstItem.should respond_to(:has_one)
|
25
|
-
end
|
26
|
-
|
27
|
-
should "have column names" do
|
28
|
-
Item.column_names.sort.should == ['_id', '_type', 'for_all']
|
29
|
-
FirstItem.column_names.sort.should == ['_id', '_type', 'first_only', 'for_all']
|
30
|
-
SecondItem.column_names.sort.should == ['_id', '_type', 'for_all', 'second_only']
|
31
|
-
end
|
32
|
-
|
33
|
-
should "alias new to new_record?" do
|
34
|
-
instance = Item.new
|
35
|
-
instance.new_record?.should == instance.new?
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
@@ -1,166 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class SerializationTest < Test::Unit::TestCase
|
4
|
-
def setup
|
5
|
-
@document = EDoc do
|
6
|
-
key :name, String
|
7
|
-
key :age, Integer
|
8
|
-
key :awesome, Boolean
|
9
|
-
key :preferences, Hash
|
10
|
-
key :created_at, Time
|
11
|
-
end
|
12
|
-
|
13
|
-
@instance = @document.new(
|
14
|
-
:name => 'John Doe',
|
15
|
-
:age => 25,
|
16
|
-
:awesome => true,
|
17
|
-
:preferences => {:language => 'Ruby'},
|
18
|
-
:created_at => Time.now.change(:usec => 0)
|
19
|
-
)
|
20
|
-
end
|
21
|
-
|
22
|
-
context "#serializable_hash" do
|
23
|
-
class List
|
24
|
-
include MongoMapper::Document
|
25
|
-
key :name
|
26
|
-
many :items, :class_name => 'SerializationTest::Item'
|
27
|
-
belongs_to :creator, :class_name => 'SerializationTest::User'
|
28
|
-
end
|
29
|
-
|
30
|
-
class Item
|
31
|
-
include MongoMapper::Document
|
32
|
-
|
33
|
-
key :title
|
34
|
-
key :description
|
35
|
-
many :assignments, :class_name => 'SerializationTest::Assignment'
|
36
|
-
|
37
|
-
def a_method
|
38
|
-
1
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
class Assignment
|
43
|
-
include MongoMapper::EmbeddedDocument
|
44
|
-
belongs_to :assigned_by, :class_name => 'SerializationTest::User'
|
45
|
-
belongs_to :user, :class_name => 'SerializationTest::User'
|
46
|
-
|
47
|
-
def serializable_hash(options = {})
|
48
|
-
super({:only => :user_id}.merge(options))
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
class User
|
53
|
-
include MongoMapper::Document
|
54
|
-
key :name, String
|
55
|
-
end
|
56
|
-
|
57
|
-
setup do
|
58
|
-
@user1 = User.new(:name => 'Brandon')
|
59
|
-
@user2 = User.new(:name => 'John')
|
60
|
-
@item = Item.new(
|
61
|
-
:title => 'Serialization',
|
62
|
-
:description => 'Make it work like magic!',
|
63
|
-
:assignments => [
|
64
|
-
Assignment.new(:assigned_by => @user1, :user => @user2)
|
65
|
-
]
|
66
|
-
)
|
67
|
-
end
|
68
|
-
|
69
|
-
should "only include specified attributes with :only option" do
|
70
|
-
@item.serializable_hash(:only => :title).should == {'title' => 'Serialization'}
|
71
|
-
end
|
72
|
-
|
73
|
-
should "exclude attributes specified with :except option" do
|
74
|
-
hash = @item.serializable_hash(:except => :description)
|
75
|
-
hash['title'].should_not be_nil
|
76
|
-
hash['description'].should be_nil
|
77
|
-
end
|
78
|
-
|
79
|
-
should "add :methods with :only option" do
|
80
|
-
@item.serializable_hash(:only => :title, :methods => :a_method).should == {
|
81
|
-
'title' => 'Serialization',
|
82
|
-
'a_method' => 1
|
83
|
-
}
|
84
|
-
end
|
85
|
-
|
86
|
-
should "call #serializable_hash on embedded many docs" do
|
87
|
-
@item.serializable_hash.should == {
|
88
|
-
'id' => @item.id,
|
89
|
-
'title' => 'Serialization',
|
90
|
-
'description' => 'Make it work like magic!',
|
91
|
-
'assignments' => [{'user_id' => @user2.id}]
|
92
|
-
}
|
93
|
-
end
|
94
|
-
|
95
|
-
context "with :include" do
|
96
|
-
setup do
|
97
|
-
@list = List.new(:title => 'MongoMapper', :items => [@item], :creator => @user1)
|
98
|
-
end
|
99
|
-
|
100
|
-
should "add many association" do
|
101
|
-
hash = @list.serializable_hash(:include => :items)
|
102
|
-
hash['items'].should be_instance_of(Array)
|
103
|
-
hash['items'].first['title'].should == 'Serialization'
|
104
|
-
end
|
105
|
-
|
106
|
-
should "add belongs_to association" do
|
107
|
-
hash = @list.serializable_hash(:include => :creator)
|
108
|
-
hash['creator'].should == @user1.serializable_hash
|
109
|
-
end
|
110
|
-
|
111
|
-
should "add one association" do
|
112
|
-
author_class = Doc do
|
113
|
-
key :post_id, ObjectId
|
114
|
-
end
|
115
|
-
post_class = Doc('Post') do
|
116
|
-
one :author, :class => author_class
|
117
|
-
end
|
118
|
-
|
119
|
-
author = author_class.new
|
120
|
-
hash = post_class.new(:author => author).serializable_hash(:include => :author)
|
121
|
-
hash['author'].should == author.serializable_hash
|
122
|
-
end
|
123
|
-
|
124
|
-
should "include multiple associations" do
|
125
|
-
hash = @list.serializable_hash(:include => [:items, :creator])
|
126
|
-
hash['items'].should be_instance_of(Array)
|
127
|
-
hash['creator'].should == @user1.serializable_hash
|
128
|
-
end
|
129
|
-
|
130
|
-
should "include multiple associations with options" do
|
131
|
-
hash = @list.serializable_hash(:include => {:creator => {:only => :name}})
|
132
|
-
hash['creator'].should == @user1.serializable_hash(:only => :name)
|
133
|
-
end
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
[:json, :xml].each do |format|
|
138
|
-
context format do
|
139
|
-
should "be reversable" do
|
140
|
-
serialized = @instance.send("to_#{format}")
|
141
|
-
unserialized = @document.send("from_#{format}", serialized)
|
142
|
-
|
143
|
-
assert_equal @instance, unserialized
|
144
|
-
end
|
145
|
-
|
146
|
-
should "allow attribute only filtering" do
|
147
|
-
serialized = @instance.send("to_#{format}", :only => [ :age, :name ])
|
148
|
-
unserialized = @document.send("from_#{format}", serialized)
|
149
|
-
|
150
|
-
assert_equal @instance.name, unserialized.name
|
151
|
-
assert_equal @instance.age, unserialized.age
|
152
|
-
assert ! unserialized.awesome
|
153
|
-
assert_nil unserialized.created_at
|
154
|
-
end
|
155
|
-
|
156
|
-
should "allow attribute except filtering" do
|
157
|
-
serialized = @instance.send("to_#{format}", :except => [ :age, :name ])
|
158
|
-
unserialized = @document.send("from_#{format}", serialized)
|
159
|
-
|
160
|
-
assert_nil unserialized.name
|
161
|
-
assert_nil unserialized.age
|
162
|
-
assert_equal @instance.awesome, unserialized.awesome
|
163
|
-
end
|
164
|
-
end
|
165
|
-
end
|
166
|
-
end
|