mongo_mapper 0.13.0.beta2 → 0.15.0
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 +5 -5
- data/LICENSE +1 -1
- data/README.md +64 -0
- data/examples/keys.rb +3 -3
- data/examples/modifiers/set.rb +2 -2
- data/examples/querying.rb +3 -3
- data/examples/safe.rb +2 -2
- data/examples/scopes.rb +1 -1
- data/lib/mongo_mapper.rb +5 -0
- data/lib/mongo_mapper/connection.rb +16 -37
- data/lib/mongo_mapper/document.rb +4 -0
- data/lib/mongo_mapper/extensions/array.rb +14 -6
- data/lib/mongo_mapper/extensions/hash.rb +15 -3
- data/lib/mongo_mapper/extensions/object.rb +4 -0
- data/lib/mongo_mapper/extensions/object_id.rb +5 -1
- data/lib/mongo_mapper/extensions/string.rb +13 -5
- data/lib/mongo_mapper/extensions/symbol.rb +18 -0
- data/lib/mongo_mapper/plugins/accessible.rb +14 -4
- data/lib/mongo_mapper/plugins/associations.rb +7 -6
- data/lib/mongo_mapper/plugins/associations/base.rb +18 -13
- data/lib/mongo_mapper/plugins/associations/belongs_to_association.rb +10 -1
- data/lib/mongo_mapper/plugins/associations/belongs_to_polymorphic_proxy.rb +9 -8
- data/lib/mongo_mapper/plugins/associations/belongs_to_proxy.rb +12 -11
- data/lib/mongo_mapper/plugins/associations/embedded_collection.rb +4 -4
- data/lib/mongo_mapper/plugins/associations/in_array_proxy.rb +24 -23
- data/lib/mongo_mapper/plugins/associations/many_documents_as_proxy.rb +18 -16
- data/lib/mongo_mapper/plugins/associations/many_documents_proxy.rb +55 -48
- data/lib/mongo_mapper/plugins/associations/many_embedded_polymorphic_proxy.rb +14 -13
- data/lib/mongo_mapper/plugins/associations/many_embedded_proxy.rb +7 -6
- data/lib/mongo_mapper/plugins/associations/many_polymorphic_proxy.rb +7 -5
- data/lib/mongo_mapper/plugins/associations/one_as_proxy.rb +17 -14
- data/lib/mongo_mapper/plugins/associations/one_embedded_polymorphic_proxy.rb +14 -13
- data/lib/mongo_mapper/plugins/associations/one_embedded_proxy.rb +9 -9
- data/lib/mongo_mapper/plugins/associations/one_proxy.rb +27 -26
- data/lib/mongo_mapper/plugins/associations/proxy.rb +31 -28
- data/lib/mongo_mapper/plugins/callbacks.rb +14 -1
- data/lib/mongo_mapper/plugins/counter_cache.rb +97 -0
- data/lib/mongo_mapper/plugins/dirty.rb +29 -37
- data/lib/mongo_mapper/plugins/document.rb +1 -1
- data/lib/mongo_mapper/plugins/dynamic_querying.rb +10 -9
- data/lib/mongo_mapper/plugins/dynamic_querying/dynamic_finder.rb +18 -17
- data/lib/mongo_mapper/plugins/embedded_callbacks.rb +2 -1
- data/lib/mongo_mapper/plugins/embedded_document.rb +1 -1
- data/lib/mongo_mapper/plugins/identity_map.rb +1 -1
- data/lib/mongo_mapper/plugins/indexes.rb +37 -2
- data/lib/mongo_mapper/plugins/keys.rb +202 -142
- data/lib/mongo_mapper/plugins/keys/key.rb +22 -13
- data/lib/mongo_mapper/plugins/keys/static.rb +45 -0
- data/lib/mongo_mapper/plugins/modifiers.rb +59 -28
- data/lib/mongo_mapper/plugins/partial_updates.rb +86 -0
- data/lib/mongo_mapper/plugins/persistence.rb +13 -8
- data/lib/mongo_mapper/plugins/protected.rb +6 -5
- data/lib/mongo_mapper/plugins/querying.rb +85 -42
- data/lib/mongo_mapper/plugins/querying/decorated_plucky_query.rb +32 -9
- data/lib/mongo_mapper/plugins/rails.rb +1 -0
- data/lib/mongo_mapper/plugins/safe.rb +10 -4
- data/lib/mongo_mapper/plugins/sci.rb +4 -1
- data/lib/mongo_mapper/plugins/scopes.rb +78 -7
- data/lib/mongo_mapper/plugins/stats.rb +17 -0
- data/lib/mongo_mapper/plugins/timestamps.rb +1 -0
- data/lib/mongo_mapper/plugins/touch.rb +1 -1
- data/lib/mongo_mapper/plugins/validations.rb +7 -2
- data/lib/mongo_mapper/railtie.rb +20 -0
- data/lib/mongo_mapper/railtie/database.rake +1 -1
- data/lib/mongo_mapper/utils.rb +2 -2
- data/lib/mongo_mapper/version.rb +1 -1
- data/lib/rails/generators/mongo_mapper/config/config_generator.rb +12 -13
- data/lib/rails/generators/mongo_mapper/model/model_generator.rb +9 -9
- data/spec/examples.txt +1643 -0
- data/spec/functional/accessible_spec.rb +13 -13
- data/spec/functional/associations/belongs_to_polymorphic_proxy_spec.rb +13 -13
- data/spec/functional/associations/belongs_to_proxy_spec.rb +18 -19
- data/spec/functional/associations/in_array_proxy_spec.rb +10 -10
- data/spec/functional/associations/many_documents_as_proxy_spec.rb +6 -6
- data/spec/functional/associations/many_documents_proxy_spec.rb +85 -14
- data/spec/functional/associations/many_embedded_polymorphic_proxy_spec.rb +13 -13
- data/spec/functional/associations/many_embedded_proxy_spec.rb +1 -1
- data/spec/functional/associations/many_polymorphic_proxy_spec.rb +4 -4
- data/spec/functional/associations/one_as_proxy_spec.rb +10 -10
- data/spec/functional/associations/one_embedded_polymorphic_proxy_spec.rb +9 -9
- data/spec/functional/associations/one_embedded_proxy_spec.rb +3 -3
- data/spec/functional/associations/one_proxy_spec.rb +10 -10
- data/spec/functional/associations_spec.rb +3 -3
- data/spec/functional/binary_spec.rb +2 -2
- data/spec/functional/caching_spec.rb +8 -15
- data/spec/functional/callbacks_spec.rb +89 -2
- data/spec/functional/counter_cache_spec.rb +235 -0
- data/spec/functional/dirty_spec.rb +63 -46
- data/spec/functional/document_spec.rb +30 -2
- data/spec/functional/dumpable_spec.rb +1 -1
- data/spec/functional/embedded_document_spec.rb +18 -18
- data/spec/functional/identity_map_spec.rb +27 -14
- data/spec/functional/indexes_spec.rb +44 -19
- data/spec/functional/keys_spec.rb +117 -15
- data/spec/functional/logger_spec.rb +3 -3
- data/spec/functional/modifiers_spec.rb +67 -19
- data/spec/functional/partial_updates_spec.rb +577 -0
- data/spec/functional/protected_spec.rb +14 -14
- data/spec/functional/querying_spec.rb +55 -28
- data/spec/functional/safe_spec.rb +23 -27
- data/spec/functional/sci_spec.rb +49 -14
- data/spec/functional/scopes_spec.rb +235 -2
- data/spec/functional/static_keys_spec.rb +153 -0
- data/spec/functional/stats_spec.rb +86 -0
- data/spec/functional/touch_spec.rb +6 -6
- data/spec/functional/validations_spec.rb +51 -57
- data/spec/quality_spec.rb +51 -0
- data/spec/spec_helper.rb +37 -9
- data/spec/support/matchers.rb +5 -14
- data/spec/unit/associations/base_spec.rb +12 -12
- data/spec/unit/associations/belongs_to_association_spec.rb +2 -2
- data/spec/unit/associations/many_association_spec.rb +2 -2
- data/spec/unit/associations/one_association_spec.rb +2 -2
- data/spec/unit/associations/proxy_spec.rb +19 -16
- data/spec/unit/clone_spec.rb +1 -1
- data/spec/unit/document_spec.rb +8 -8
- data/spec/unit/dynamic_finder_spec.rb +8 -8
- data/spec/unit/embedded_document_spec.rb +18 -19
- data/spec/unit/extensions_spec.rb +41 -17
- data/spec/unit/identity_map_middleware_spec.rb +65 -96
- data/spec/unit/inspect_spec.rb +4 -4
- data/spec/unit/key_spec.rb +28 -26
- data/spec/unit/keys_spec.rb +10 -10
- data/spec/unit/model_generator_spec.rb +2 -4
- data/spec/unit/mongo_mapper_spec.rb +38 -85
- data/spec/unit/rails_spec.rb +5 -0
- data/spec/unit/serialization_spec.rb +1 -1
- data/spec/unit/time_zones_spec.rb +2 -2
- data/spec/unit/validations_spec.rb +28 -15
- metadata +188 -161
- data/README.rdoc +0 -55
- data/lib/mongo_mapper/extensions/ordered_hash.rb +0 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 143438e47efd4cc910b443067a35aff261a7c32baa12bbe8836b0505edb6c8ad
|
4
|
+
data.tar.gz: 0d8d33172da4805fa47544585d2ea5369a82e9154be19dcd9be2789b5c2747cb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 50b970107ed41cc982e24fe9d171fed471847c593db3c5239b7e60fa88fb67ef799473eb1a088d2eb92d6d2cda49d8ec391b61a24e92bb5b9a9e7eea399ed61b
|
7
|
+
data.tar.gz: 1674cc8cdc27d2f3bc7460a8f32017903bde7263feeae62bf3074386d5fa0b080b3fc52c4407c200a7b4df8fb083fd917e6b5611b19f8538ec10033c789667ab
|
data/LICENSE
CHANGED
data/README.md
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
# MongoMapper
|
2
|
+
|
3
|
+
A Ruby Object Mapper for Mongo.
|
4
|
+
|
5
|
+
[<img src="https://badge.fury.io/rb/mongo_mapper.png" alt="RubyGems">](https://rubygems.org/gems/mongo_mapper)
|
6
|
+
|
7
|
+
[<img src="https://travis-ci.org/mongomapper/mongomapper.png?branch=master" alt="Build Status" />](https://travis-ci.org/mongomapper/mongomapper)
|
8
|
+
|
9
|
+
[<img src="https://coveralls.io/repos/mongomapper/mongomapper/badge.png" alt="Coverage Status" />](https://coveralls.io/r/mongomapper/mongomapper)
|
10
|
+
|
11
|
+
## Install
|
12
|
+
|
13
|
+
$ gem install mongo_mapper
|
14
|
+
|
15
|
+
## Documentation
|
16
|
+
|
17
|
+
http://mongomapper.com/documentation/
|
18
|
+
|
19
|
+
http://rdoc.info/github/mongomapper/mongomapper
|
20
|
+
|
21
|
+
## Compatibility
|
22
|
+
|
23
|
+
MongoMapper is tested against:
|
24
|
+
|
25
|
+
* MRI 2.4 - 2.7
|
26
|
+
* JRuby (Versions with 1.9 compatibility)
|
27
|
+
|
28
|
+
Additionally, MongoMapper is tested against:
|
29
|
+
|
30
|
+
* Rails 5.0+ - 6.0
|
31
|
+
|
32
|
+
## Contributing & Development
|
33
|
+
|
34
|
+
$ git clone https://github.com/mongomapper/mongomapper && cd mongomapper
|
35
|
+
$ bundle install
|
36
|
+
$ bundle exec rake
|
37
|
+
|
38
|
+
* Fork the project.
|
39
|
+
* Make your feature addition or bug fix. All specs should pass.
|
40
|
+
* Add specs for your changes. This is important so I don't break it in a future version unintentionally.
|
41
|
+
* 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.
|
42
|
+
* Send a pull request. Bonus points for topic branches.
|
43
|
+
|
44
|
+
## Problems or Questions?
|
45
|
+
|
46
|
+
Hit up the Google group: http://groups.google.com/group/mongomapper
|
47
|
+
|
48
|
+
Hop on IRC: irc://chat.freenode.net/#mongomapper
|
49
|
+
|
50
|
+
## Copyright
|
51
|
+
|
52
|
+
Copyright (c) 2009-2020 MongoMapper. See LICENSE for details.
|
53
|
+
|
54
|
+
## Contributors
|
55
|
+
|
56
|
+
MongoMapper/Plucky is:
|
57
|
+
|
58
|
+
* John Nunemaker
|
59
|
+
* Chris Heald
|
60
|
+
* Scott Taylor
|
61
|
+
|
62
|
+
With contributions from:
|
63
|
+
|
64
|
+
* Frederick Cheung
|
data/examples/keys.rb
CHANGED
@@ -16,7 +16,7 @@ class User
|
|
16
16
|
key :links, Hash
|
17
17
|
timestamps!
|
18
18
|
end
|
19
|
-
User.collection.
|
19
|
+
User.collection.drop # empties collection
|
20
20
|
|
21
21
|
john = User.create({
|
22
22
|
:first_name => 'John',
|
@@ -24,7 +24,7 @@ john = User.create({
|
|
24
24
|
:age => 28,
|
25
25
|
:skills => ['ruby', 'mongo', 'javascript'],
|
26
26
|
:links => {"Google" => "http://www.google.com"}
|
27
|
-
})
|
27
|
+
})
|
28
28
|
|
29
29
|
steve = User.create({
|
30
30
|
:first_name => 'Steve',
|
@@ -37,4 +37,4 @@ john.friend_ids << steve.id.to_s # will get typecast to ObjectId
|
|
37
37
|
john.links["Ruby on Rails"] = "http://www.rubyonrails.com"
|
38
38
|
john.save
|
39
39
|
|
40
|
-
pp john
|
40
|
+
pp john
|
data/examples/modifiers/set.rb
CHANGED
@@ -6,11 +6,11 @@ MongoMapper.database = 'testing'
|
|
6
6
|
|
7
7
|
class User
|
8
8
|
include MongoMapper::Document
|
9
|
-
|
9
|
+
|
10
10
|
key :name, String
|
11
11
|
key :tags, Array
|
12
12
|
end
|
13
|
-
User.collection.
|
13
|
+
User.collection.drop # empties collection
|
14
14
|
|
15
15
|
john = User.create(:name => 'John', :tags => %w[ruby mongo], :age => 28)
|
16
16
|
bill = User.create(:name => 'Bill', :tags => %w[ruby mongo], :age => 30)
|
data/examples/querying.rb
CHANGED
@@ -6,11 +6,11 @@ MongoMapper.database = 'testing'
|
|
6
6
|
|
7
7
|
class User
|
8
8
|
include MongoMapper::Document
|
9
|
-
|
9
|
+
|
10
10
|
key :name, String
|
11
11
|
key :tags, Array
|
12
12
|
end
|
13
|
-
User.collection.
|
13
|
+
User.collection.drop # empties collection
|
14
14
|
|
15
15
|
User.create(:name => 'John', :tags => %w[ruby mongo], :age => 28)
|
16
16
|
User.create(:name => 'Bill', :tags => %w[ruby mongo], :age => 30)
|
@@ -32,4 +32,4 @@ User.create(:name => 'Steve', :tags => %w[html5 css3], :age => 27)
|
|
32
32
|
].each do |result|
|
33
33
|
pp result
|
34
34
|
puts
|
35
|
-
end
|
35
|
+
end
|
data/examples/safe.rb
CHANGED
@@ -22,7 +22,7 @@ puts
|
|
22
22
|
begin
|
23
23
|
user = User.new(:email => 'nunemaker@gmail.com')
|
24
24
|
user.save(:safe => true)
|
25
|
-
rescue Mongo::OperationFailure => e
|
25
|
+
rescue Mongo::Error::OperationFailure => e
|
26
26
|
puts 'Mongo Operation failure raised because duplicate email was entered'
|
27
27
|
puts e.inspect
|
28
28
|
puts
|
@@ -37,7 +37,7 @@ User.safe
|
|
37
37
|
|
38
38
|
begin
|
39
39
|
User.create(:email => 'nunemaker@gmail.com')
|
40
|
-
rescue Mongo::OperationFailure => e
|
40
|
+
rescue Mongo::Error::OperationFailure => e
|
41
41
|
puts 'Mongo Operation failure raised because duplicate email was entered'
|
42
42
|
puts e.inspect
|
43
43
|
end
|
data/examples/scopes.rb
CHANGED
@@ -28,7 +28,7 @@ class User
|
|
28
28
|
key :name, String
|
29
29
|
key :tags, Array
|
30
30
|
end
|
31
|
-
User.collection.
|
31
|
+
User.collection.drop # empties collection
|
32
32
|
|
33
33
|
User.create(:name => 'John', :tags => %w[ruby mongo], :age => 28)
|
34
34
|
User.create(:name => 'Bill', :tags => %w[ruby mongo], :age => 30)
|
data/lib/mongo_mapper.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
require 'plucky'
|
3
|
+
require 'active_support'
|
3
4
|
require 'active_support/core_ext'
|
4
5
|
require 'active_model'
|
6
|
+
require 'activemodel-serializers-xml'
|
5
7
|
require "mongo_mapper/railtie" if defined?(Rails)
|
6
8
|
|
7
9
|
I18n.load_path << File.expand_path('../mongo_mapper/locale/en.yml', __FILE__)
|
@@ -35,6 +37,7 @@ module MongoMapper
|
|
35
37
|
autoload :Callbacks, 'mongo_mapper/plugins/callbacks'
|
36
38
|
autoload :Caching, 'mongo_mapper/plugins/caching'
|
37
39
|
autoload :Clone, 'mongo_mapper/plugins/clone'
|
40
|
+
autoload :CounterCache, 'mongo_mapper/plugins/counter_cache'
|
38
41
|
autoload :Dirty, 'mongo_mapper/plugins/dirty'
|
39
42
|
autoload :Document, 'mongo_mapper/plugins/document'
|
40
43
|
autoload :DynamicQuerying, 'mongo_mapper/plugins/dynamic_querying'
|
@@ -49,6 +52,7 @@ module MongoMapper
|
|
49
52
|
autoload :Logger, 'mongo_mapper/plugins/logger'
|
50
53
|
autoload :Modifiers, 'mongo_mapper/plugins/modifiers'
|
51
54
|
autoload :Pagination, 'mongo_mapper/plugins/pagination'
|
55
|
+
autoload :PartialUpdates, 'mongo_mapper/plugins/partial_updates'
|
52
56
|
autoload :Persistence, 'mongo_mapper/plugins/persistence'
|
53
57
|
autoload :Protected, 'mongo_mapper/plugins/protected'
|
54
58
|
autoload :Querying, 'mongo_mapper/plugins/querying'
|
@@ -57,6 +61,7 @@ module MongoMapper
|
|
57
61
|
autoload :Sci, 'mongo_mapper/plugins/sci'
|
58
62
|
autoload :Scopes, 'mongo_mapper/plugins/scopes'
|
59
63
|
autoload :Serialization, 'mongo_mapper/plugins/serialization'
|
64
|
+
autoload :Stats, 'mongo_mapper/plugins/stats'
|
60
65
|
autoload :Timestamps, 'mongo_mapper/plugins/timestamps'
|
61
66
|
autoload :Userstamps, 'mongo_mapper/plugins/userstamps'
|
62
67
|
autoload :Validations, 'mongo_mapper/plugins/validations'
|
@@ -4,13 +4,12 @@ require 'uri'
|
|
4
4
|
module MongoMapper
|
5
5
|
module Connection
|
6
6
|
@@connection = nil
|
7
|
-
@@database = nil
|
8
|
-
@@database_name = nil
|
9
7
|
@@config = nil
|
8
|
+
@@database = nil
|
10
9
|
|
11
10
|
# @api public
|
12
11
|
def connection
|
13
|
-
@@connection ||= Mongo::
|
12
|
+
@@connection ||= Mongo::Client.new ['127.0.0.1:27017']
|
14
13
|
end
|
15
14
|
|
16
15
|
def connection?
|
@@ -29,15 +28,12 @@ module MongoMapper
|
|
29
28
|
|
30
29
|
# @api public
|
31
30
|
def database=(name)
|
32
|
-
@@database =
|
33
|
-
@@database_name = name
|
31
|
+
@@database = connection.use(name).database
|
34
32
|
end
|
35
33
|
|
36
34
|
# @api public
|
37
35
|
def database
|
38
|
-
|
39
|
-
|
40
|
-
@@database ||= MongoMapper.connection.db(@@database_name)
|
36
|
+
@@database ||= connection.database
|
41
37
|
end
|
42
38
|
|
43
39
|
def config=(hash)
|
@@ -51,45 +47,28 @@ module MongoMapper
|
|
51
47
|
|
52
48
|
# @api private
|
53
49
|
def config_for_environment(environment)
|
54
|
-
|
55
|
-
return env if env['uri'].blank?
|
56
|
-
|
57
|
-
uri = URI.parse(env['uri'])
|
58
|
-
raise InvalidScheme.new('must be mongodb') unless uri.scheme == 'mongodb'
|
59
|
-
{
|
60
|
-
'host' => uri.host,
|
61
|
-
'port' => uri.port,
|
62
|
-
'database' => uri.path.gsub(/^\//, ''),
|
63
|
-
'username' => uri.user,
|
64
|
-
'password' => uri.password,
|
65
|
-
}
|
50
|
+
config[environment.to_s]
|
66
51
|
end
|
67
52
|
|
68
53
|
def connect(environment, options={})
|
69
54
|
raise 'Set config before connecting. MongoMapper.config = {...}' if config.blank?
|
70
|
-
env = config_for_environment(environment)
|
55
|
+
env = config_for_environment(environment).dup
|
56
|
+
addresses_or_uri = env.delete('hosts') ||
|
57
|
+
env.delete('uri') ||
|
58
|
+
[env.delete('host')].compact
|
71
59
|
|
72
60
|
if env['options'].is_a?(Hash)
|
73
|
-
options = env
|
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']
|
61
|
+
options = env.delete('options').symbolize_keys.merge(options)
|
79
62
|
end
|
63
|
+
#database etc are all options to Mongo::Client.new now
|
64
|
+
options = env.symbolize_keys.merge(options)
|
80
65
|
|
81
|
-
|
82
|
-
|
83
|
-
Mongo::MongoReplicaSetClient.new( env['hosts'], options )
|
84
|
-
else
|
85
|
-
Mongo::MongoReplicaSetClient.new( *env['hosts'].push(options) )
|
86
|
-
end
|
87
|
-
else
|
88
|
-
Mongo::MongoClient.new(env['host'], env['port'], options)
|
66
|
+
if options[:port]
|
67
|
+
raise "port should be specified as part of the host or uri"
|
89
68
|
end
|
90
69
|
|
91
|
-
|
92
|
-
MongoMapper.
|
70
|
+
options[:read] = options[:read].to_sym if options[:read].is_a? String
|
71
|
+
MongoMapper.connection = Mongo::Client.new(addresses_or_uri, options)
|
93
72
|
end
|
94
73
|
|
95
74
|
def setup(config, environment, options={})
|
@@ -16,6 +16,7 @@ module MongoMapper
|
|
16
16
|
include Plugins::Inspect
|
17
17
|
include Plugins::Indexes
|
18
18
|
include Plugins::Keys
|
19
|
+
include Plugins::Keys::Static
|
19
20
|
include Plugins::Dirty # for now dirty needs to be after keys
|
20
21
|
include Plugins::Logger
|
21
22
|
include Plugins::Modifiers
|
@@ -28,13 +29,16 @@ module MongoMapper
|
|
28
29
|
include Plugins::Sci
|
29
30
|
include Plugins::Scopes
|
30
31
|
include Plugins::Serialization
|
32
|
+
include Plugins::Stats
|
31
33
|
include Plugins::Timestamps
|
32
34
|
include Plugins::Userstamps
|
33
35
|
include Plugins::Touch
|
34
36
|
include Plugins::Validations
|
35
37
|
include Plugins::EmbeddedCallbacks
|
36
38
|
include Plugins::Callbacks # for now callbacks needs to be after validations
|
39
|
+
include Plugins::PartialUpdates
|
37
40
|
include Plugins::IdentityMap
|
41
|
+
include Plugins::CounterCache
|
38
42
|
|
39
43
|
included do
|
40
44
|
extend Plugins
|
@@ -2,18 +2,26 @@
|
|
2
2
|
module MongoMapper
|
3
3
|
module Extensions
|
4
4
|
module Array
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
module ClassMethods
|
8
|
+
def to_mongo(value)
|
9
|
+
value = value.respond_to?(:lines) ? value.lines : value
|
10
|
+
value.to_a
|
11
|
+
end
|
12
|
+
|
13
|
+
def from_mongo(value)
|
14
|
+
value || []
|
15
|
+
end
|
8
16
|
end
|
9
17
|
|
10
|
-
def
|
11
|
-
value
|
18
|
+
def _mongo_mapper_deep_copy_
|
19
|
+
map { |value| value._mongo_mapper_deep_copy_ }
|
12
20
|
end
|
13
21
|
end
|
14
22
|
end
|
15
23
|
end
|
16
24
|
|
17
25
|
class Array
|
18
|
-
|
26
|
+
include MongoMapper::Extensions::Array
|
19
27
|
end
|
@@ -2,13 +2,25 @@
|
|
2
2
|
module MongoMapper
|
3
3
|
module Extensions
|
4
4
|
module Hash
|
5
|
-
|
6
|
-
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
module ClassMethods
|
8
|
+
def from_mongo(value)
|
9
|
+
HashWithIndifferentAccess.new(value || {})
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def _mongo_mapper_deep_copy_
|
14
|
+
self.class.new.tap do |new_hash|
|
15
|
+
each do |key, value|
|
16
|
+
new_hash[key._mongo_mapper_deep_copy_] = value._mongo_mapper_deep_copy_
|
17
|
+
end
|
18
|
+
end
|
7
19
|
end
|
8
20
|
end
|
9
21
|
end
|
10
22
|
end
|
11
23
|
|
12
24
|
class Hash
|
13
|
-
|
25
|
+
include MongoMapper::Extensions::Hash
|
14
26
|
end
|
@@ -18,7 +18,7 @@ class ObjectId
|
|
18
18
|
end
|
19
19
|
|
20
20
|
class BSON::ObjectId
|
21
|
-
alias_method :
|
21
|
+
alias_method :original_as_json, :as_json
|
22
22
|
|
23
23
|
def as_json(options=nil)
|
24
24
|
to_s
|
@@ -29,4 +29,8 @@ class BSON::ObjectId
|
|
29
29
|
end
|
30
30
|
|
31
31
|
alias to_str to_s
|
32
|
+
|
33
|
+
def original_to_json(*args)
|
34
|
+
original_as_json.to_json(*args)
|
35
|
+
end
|
32
36
|
end
|
@@ -2,17 +2,25 @@
|
|
2
2
|
module MongoMapper
|
3
3
|
module Extensions
|
4
4
|
module String
|
5
|
-
|
6
|
-
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
module ClassMethods
|
8
|
+
def to_mongo(value)
|
9
|
+
value && value.to_s
|
10
|
+
end
|
11
|
+
|
12
|
+
def from_mongo(value)
|
13
|
+
value && value.to_s
|
14
|
+
end
|
7
15
|
end
|
8
16
|
|
9
|
-
def
|
10
|
-
|
17
|
+
def _mongo_mapper_deep_copy_
|
18
|
+
self.dup
|
11
19
|
end
|
12
20
|
end
|
13
21
|
end
|
14
22
|
end
|
15
23
|
|
16
24
|
class String
|
17
|
-
|
25
|
+
include MongoMapper::Extensions::String
|
18
26
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
module MongoMapper
|
3
|
+
module Extensions
|
4
|
+
module Symbol
|
5
|
+
def to_mongo(value)
|
6
|
+
value && value.to_s.to_sym
|
7
|
+
end
|
8
|
+
|
9
|
+
def from_mongo(value)
|
10
|
+
value && value.to_s.to_sym
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Symbol
|
17
|
+
extend MongoMapper::Extensions::Symbol
|
18
|
+
end
|