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
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={})
|