mongo_mapper 0.12.0 → 0.13.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- 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
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 157572885e8b22a43d1585eb772fcbf1c95f6aa1
|
4
|
+
data.tar.gz: 29cff77a4aba848e0ec1bde7a7fe2ba3f68b767a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: cc75dcd206c828239a06f49cb9374497f9e0b425201921a5dcdcc169b5d1eba5a1005fbc2ad299ee908b311b046c42c2e5b97e339e668117f7a0c5ab815d98d4
|
7
|
+
data.tar.gz: 003c0ac6bb4aaec67634ee5aedaa252f4d81f9a40d6e496ab108b5c408d22891495ec969e07d9bdc8b8315d25e0e309ac1ccdd0f29c2feac70257857a2c0e2a5
|
data/README.rdoc
CHANGED
@@ -1,33 +1,55 @@
|
|
1
1
|
= MongoMapper
|
2
2
|
|
3
|
+
{<img src="https://badge.fury.io/rb/mongo_mapper.png" alt="RubyGem" />}[https://rubygems.org/gems/mongo_mapper]
|
4
|
+
{<img src="https://travis-ci.org/jnunemaker/mongomapper.png?branch=master" alt="Build Status" />}[https://travis-ci.org/jnunemaker/mongomapper]
|
5
|
+
{<img src="https://coveralls.io/repos/jnunemaker/mongomapper/badge.png" alt="Coverage Status" />}[https://coveralls.io/r/jnunemaker/mongomapper]
|
6
|
+
|
3
7
|
A Ruby Object Mapper for Mongo.
|
4
8
|
|
5
9
|
== Install
|
6
10
|
|
7
11
|
$ gem install mongo_mapper
|
8
12
|
|
9
|
-
==
|
13
|
+
== Documentation
|
10
14
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
15
|
+
http://mongomapper.com/documentation/
|
16
|
+
|
17
|
+
http://rdoc.info/github/jnunemaker/mongomapper
|
18
|
+
|
19
|
+
== Compatibility
|
20
|
+
|
21
|
+
MongoMapper is tested against:
|
16
22
|
|
17
|
-
|
23
|
+
* MRI 1.8.7
|
24
|
+
* MRI 1.9.3
|
25
|
+
* MRI 2.0.0
|
26
|
+
* JRuby (1.9)
|
18
27
|
|
19
|
-
|
28
|
+
Additionally, MongoMapper is tested against:
|
29
|
+
|
30
|
+
* Rails 3.0.x
|
31
|
+
* Rails 3.1.x
|
32
|
+
* Rails 3.2.x
|
33
|
+
* Rails 4.0.x
|
34
|
+
|
35
|
+
== Contributing & Development
|
36
|
+
|
37
|
+
$ git clone https://github.com/jnunemaker/mongomapper && cd mongomapper
|
20
38
|
$ bundle install
|
21
39
|
$ bundle exec rake
|
22
40
|
|
41
|
+
* Fork the project.
|
42
|
+
* Make your feature addition or bug fix. All specs should pass.
|
43
|
+
* Add specs for your changes. This is important so I don't break it in a future version unintentionally.
|
44
|
+
* Commit, do not mess with Rakefile, version, or history. If you want to have your own version, that is fine but bump version in a commit by itself in another branch so a maintainer ignore it when your pull request is merged.
|
45
|
+
* Send a pull request. Bonus points for topic branches.
|
46
|
+
|
23
47
|
== Problems or Questions?
|
24
48
|
|
25
|
-
Hit up the
|
26
|
-
http://groups.google.com/group/mongomapper
|
49
|
+
Hit up the Google group: http://groups.google.com/group/mongomapper
|
27
50
|
|
28
|
-
Hop on IRC:
|
29
|
-
irc://chat.freenode.net/#mongomapper
|
51
|
+
Hop on IRC: irc://chat.freenode.net/#mongomapper
|
30
52
|
|
31
|
-
== Copyright
|
53
|
+
== License & Copyright
|
32
54
|
|
33
55
|
See LICENSE for details.
|
data/bin/mmconsole
CHANGED
data/lib/mongo_mapper.rb
CHANGED
@@ -14,12 +14,15 @@ module MongoMapper
|
|
14
14
|
autoload :InvalidScheme, 'mongo_mapper/exceptions'
|
15
15
|
autoload :DocumentNotValid, 'mongo_mapper/exceptions'
|
16
16
|
autoload :AccessibleOrProtected, 'mongo_mapper/exceptions'
|
17
|
+
autoload :InvalidKey, 'mongo_mapper/exceptions'
|
18
|
+
autoload :NotSupported, 'mongo_mapper/exceptions'
|
17
19
|
|
18
20
|
autoload :Document, 'mongo_mapper/document'
|
19
21
|
autoload :EmbeddedDocument, 'mongo_mapper/embedded_document'
|
20
22
|
autoload :Plugins, 'mongo_mapper/plugins'
|
21
23
|
autoload :Translation, 'mongo_mapper/translation'
|
22
24
|
autoload :Version, 'mongo_mapper/version'
|
25
|
+
autoload :Utils, 'mongo_mapper/utils'
|
23
26
|
|
24
27
|
module Middleware
|
25
28
|
autoload :IdentityMap, 'mongo_mapper/middleware/identity_map'
|
@@ -35,6 +38,7 @@ module MongoMapper
|
|
35
38
|
autoload :Dirty, 'mongo_mapper/plugins/dirty'
|
36
39
|
autoload :Document, 'mongo_mapper/plugins/document'
|
37
40
|
autoload :DynamicQuerying, 'mongo_mapper/plugins/dynamic_querying'
|
41
|
+
autoload :Dumpable, 'mongo_mapper/plugins/dumpable'
|
38
42
|
autoload :EmbeddedCallbacks, 'mongo_mapper/plugins/embedded_callbacks'
|
39
43
|
autoload :EmbeddedDocument, 'mongo_mapper/plugins/embedded_document'
|
40
44
|
autoload :Equality, 'mongo_mapper/plugins/equality'
|
@@ -10,7 +10,11 @@ module MongoMapper
|
|
10
10
|
|
11
11
|
# @api public
|
12
12
|
def connection
|
13
|
-
@@connection ||= Mongo::
|
13
|
+
@@connection ||= Mongo::MongoClient.new
|
14
|
+
end
|
15
|
+
|
16
|
+
def connection?
|
17
|
+
!!@@connection
|
14
18
|
end
|
15
19
|
|
16
20
|
# @api public
|
@@ -65,18 +69,23 @@ module MongoMapper
|
|
65
69
|
raise 'Set config before connecting. MongoMapper.config = {...}' if config.blank?
|
66
70
|
env = config_for_environment(environment)
|
67
71
|
|
68
|
-
if env['options'].is_a?
|
72
|
+
if env['options'].is_a?(Hash)
|
69
73
|
options = env['options'].symbolize_keys.merge(options)
|
70
74
|
end
|
75
|
+
options[:read] = options[:read].to_sym if options[:read].is_a? String
|
76
|
+
|
77
|
+
if env.key?('ssl')
|
78
|
+
options[:ssl] = env['ssl']
|
79
|
+
end
|
71
80
|
|
72
81
|
MongoMapper.connection = if env['hosts']
|
73
82
|
if env['hosts'].first.is_a?(String)
|
74
|
-
Mongo::
|
83
|
+
Mongo::MongoReplicaSetClient.new( env['hosts'], options )
|
75
84
|
else
|
76
|
-
Mongo::
|
85
|
+
Mongo::MongoReplicaSetClient.new( *env['hosts'].push(options) )
|
77
86
|
end
|
78
87
|
else
|
79
|
-
Mongo::
|
88
|
+
Mongo::MongoClient.new(env['host'], env['port'], options)
|
80
89
|
end
|
81
90
|
|
82
91
|
MongoMapper.database = env['database']
|
@@ -90,11 +99,13 @@ module MongoMapper
|
|
90
99
|
end
|
91
100
|
|
92
101
|
def handle_passenger_forking
|
102
|
+
# :nocov:
|
93
103
|
if defined?(PhusionPassenger)
|
94
104
|
PhusionPassenger.on_event(:starting_worker_process) do |forked|
|
95
105
|
connection.connect if forked
|
96
106
|
end
|
97
107
|
end
|
108
|
+
# :nocov:
|
98
109
|
end
|
99
110
|
end
|
100
|
-
end
|
111
|
+
end
|
@@ -12,10 +12,13 @@ module MongoMapper
|
|
12
12
|
# raised when trying to do something not supported, mostly for edocs
|
13
13
|
class NotSupported < Error; end
|
14
14
|
|
15
|
+
# raised when trying to create a key with an invalid name
|
16
|
+
class InvalidKey < Error; end
|
17
|
+
|
15
18
|
# raised when document not valid and using !
|
16
19
|
class DocumentNotValid < Error
|
17
20
|
attr_reader :document
|
18
|
-
|
21
|
+
|
19
22
|
def initialize(document)
|
20
23
|
@document = document
|
21
24
|
super("Validation failed: #{document.errors.full_messages.join(", ")}")
|
@@ -3,37 +3,34 @@ module MongoMapper
|
|
3
3
|
module Extensions
|
4
4
|
module Boolean
|
5
5
|
Mapping = {
|
6
|
-
true => true,
|
7
|
-
'true' => true,
|
8
|
-
'TRUE' => true,
|
9
|
-
'True' => true,
|
10
|
-
't' => true,
|
11
|
-
'T' => true,
|
12
|
-
'1' => true,
|
13
|
-
1 => true,
|
6
|
+
true => true,
|
7
|
+
'true' => true,
|
8
|
+
'TRUE' => true,
|
9
|
+
'True' => true,
|
10
|
+
't' => true,
|
11
|
+
'T' => true,
|
12
|
+
'1' => true,
|
13
|
+
1 => true,
|
14
14
|
1.0 => true,
|
15
|
-
false => false,
|
16
|
-
'false' => false,
|
17
|
-
'FALSE' => false,
|
18
|
-
'False' => false,
|
19
|
-
'f' => false,
|
20
|
-
'F' => false,
|
21
|
-
'0' => false,
|
22
|
-
0 => false,
|
23
|
-
0.0 => false,
|
15
|
+
false => false,
|
16
|
+
'false' => false,
|
17
|
+
'FALSE' => false,
|
18
|
+
'False' => false,
|
19
|
+
'f' => false,
|
20
|
+
'F' => false,
|
21
|
+
'0' => false,
|
22
|
+
0 => false,
|
23
|
+
0.0 => false,
|
24
24
|
nil => nil
|
25
25
|
}
|
26
26
|
|
27
27
|
def to_mongo(value)
|
28
|
-
|
29
|
-
value
|
30
|
-
else
|
31
|
-
Mapping[value]
|
32
|
-
end
|
28
|
+
Mapping[value]
|
33
29
|
end
|
34
30
|
|
35
31
|
def from_mongo(value)
|
36
|
-
|
32
|
+
return nil if value == nil
|
33
|
+
!!value
|
37
34
|
end
|
38
35
|
end
|
39
36
|
end
|
@@ -3,10 +3,10 @@ module MongoMapper
|
|
3
3
|
module Extensions
|
4
4
|
module Date
|
5
5
|
def to_mongo(value)
|
6
|
-
if value.nil? || value
|
6
|
+
if value.nil? || (value.instance_of?(String) && '' === value)
|
7
7
|
nil
|
8
8
|
else
|
9
|
-
date = value.
|
9
|
+
date = value.instance_of?(::Date) || value.instance_of?(::Time) ? value : ::Date.parse(value.to_s)
|
10
10
|
::Time.utc(date.year, date.month, date.day)
|
11
11
|
end
|
12
12
|
rescue
|
@@ -14,7 +14,7 @@ module MongoMapper
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def from_mongo(value)
|
17
|
-
value.to_date if value
|
17
|
+
value.to_date if value
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
# This class exists to make sure that Hash's extensions don't end up giving us unordered hashes.
|
3
|
+
# :nocov:
|
4
|
+
if RUBY_VERSION < "1.9"
|
5
|
+
module MongoMapper
|
6
|
+
module Extensions
|
7
|
+
module OrderedHash
|
8
|
+
def to_mongo(value)
|
9
|
+
value
|
10
|
+
end
|
11
|
+
|
12
|
+
def from_mongo(value)
|
13
|
+
value
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class BSON::OrderedHash
|
20
|
+
extend MongoMapper::Extensions::OrderedHash
|
21
|
+
end
|
22
|
+
end
|
23
|
+
# :nocov:
|
@@ -1,20 +1,22 @@
|
|
1
|
+
require 'active_support/core_ext/time/zones'
|
2
|
+
|
1
3
|
# encoding: UTF-8
|
2
4
|
module MongoMapper
|
3
5
|
module Extensions
|
4
6
|
module Time
|
5
7
|
def to_mongo(value)
|
6
|
-
if value
|
8
|
+
if !value || '' == value
|
7
9
|
nil
|
8
10
|
else
|
9
|
-
time_class = ::Time.
|
11
|
+
time_class = ::Time.zone || ::Time
|
10
12
|
time = value.is_a?(::Time) ? value : time_class.parse(value.to_s)
|
11
|
-
at(time.
|
13
|
+
at(time.to_i, time.usec / 1000 * 1000).utc
|
12
14
|
end
|
13
15
|
end
|
14
16
|
|
15
17
|
def from_mongo(value)
|
16
|
-
if ::Time.
|
17
|
-
value.in_time_zone(
|
18
|
+
if value and zone = ::Time.zone
|
19
|
+
value.in_time_zone(zone)
|
18
20
|
else
|
19
21
|
value
|
20
22
|
end
|
@@ -9,15 +9,14 @@ module MongoMapper
|
|
9
9
|
# You have to insert after callbacks so the entire request is wrapped.
|
10
10
|
class IdentityMap
|
11
11
|
class Body
|
12
|
+
extend Forwardable
|
13
|
+
def_delegator :@target, :each
|
14
|
+
|
12
15
|
def initialize(target, original)
|
13
16
|
@target = target
|
14
17
|
@original = original
|
15
18
|
end
|
16
19
|
|
17
|
-
def each(&block)
|
18
|
-
@target.each(&block)
|
19
|
-
end
|
20
|
-
|
21
20
|
def close
|
22
21
|
@target.close if @target.respond_to?(:close)
|
23
22
|
ensure
|
data/lib/mongo_mapper/plugins.rb
CHANGED
@@ -27,15 +27,22 @@ module MongoMapper
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def associations=(hash)
|
30
|
+
@embedded_associations = nil
|
30
31
|
@associations = hash
|
31
32
|
end
|
32
33
|
|
34
|
+
def embedded_associations
|
35
|
+
@embedded_associations ||= associations.values.select { |assoc| assoc.embeddable? }
|
36
|
+
end
|
37
|
+
|
33
38
|
def associations_module_defined?
|
39
|
+
# :nocov:
|
34
40
|
if method(:const_defined?).arity == 1 # Ruby 1.9 compat check
|
35
41
|
const_defined?('MongoMapperAssociations')
|
36
42
|
else
|
37
43
|
const_defined?('MongoMapperAssociations', false)
|
38
44
|
end
|
45
|
+
# :nocov:
|
39
46
|
end
|
40
47
|
|
41
48
|
def associations_module
|
@@ -51,6 +58,7 @@ module MongoMapper
|
|
51
58
|
|
52
59
|
private
|
53
60
|
def create_association(association)
|
61
|
+
@embedded_associations = nil
|
54
62
|
associations[association.name] = association
|
55
63
|
association.setup(self)
|
56
64
|
end
|
@@ -61,7 +69,7 @@ module MongoMapper
|
|
61
69
|
end
|
62
70
|
|
63
71
|
def embedded_associations
|
64
|
-
|
72
|
+
self.class.embedded_associations
|
65
73
|
end
|
66
74
|
|
67
75
|
def build_proxy(association)
|
@@ -72,10 +80,8 @@ module MongoMapper
|
|
72
80
|
end
|
73
81
|
|
74
82
|
def get_proxy(association)
|
75
|
-
|
76
|
-
|
77
|
-
end
|
78
|
-
proxy
|
83
|
+
proxy = self.instance_variable_get(association.ivar) if instance_variable_defined?(association.ivar)
|
84
|
+
proxy ||= build_proxy(association)
|
79
85
|
end
|
80
86
|
|
81
87
|
def save_to_collection(options={})
|