mongo_mapper 0.13.1 → 0.15.2

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.
Files changed (133) hide show
  1. checksums.yaml +5 -5
  2. data/LICENSE +1 -1
  3. data/README.md +61 -0
  4. data/examples/keys.rb +1 -1
  5. data/examples/modifiers/set.rb +1 -1
  6. data/examples/querying.rb +1 -1
  7. data/examples/safe.rb +2 -2
  8. data/examples/scopes.rb +1 -1
  9. data/lib/mongo_mapper.rb +4 -0
  10. data/lib/mongo_mapper/connection.rb +16 -38
  11. data/lib/mongo_mapper/document.rb +2 -0
  12. data/lib/mongo_mapper/extensions/array.rb +14 -6
  13. data/lib/mongo_mapper/extensions/hash.rb +15 -3
  14. data/lib/mongo_mapper/extensions/object.rb +4 -0
  15. data/lib/mongo_mapper/extensions/object_id.rb +5 -1
  16. data/lib/mongo_mapper/extensions/string.rb +13 -5
  17. data/lib/mongo_mapper/plugins/accessible.rb +13 -12
  18. data/lib/mongo_mapper/plugins/associations.rb +7 -6
  19. data/lib/mongo_mapper/plugins/associations/base.rb +23 -14
  20. data/lib/mongo_mapper/plugins/associations/belongs_to_association.rb +1 -1
  21. data/lib/mongo_mapper/plugins/associations/belongs_to_polymorphic_proxy.rb +9 -8
  22. data/lib/mongo_mapper/plugins/associations/belongs_to_proxy.rb +18 -11
  23. data/lib/mongo_mapper/plugins/associations/embedded_collection.rb +4 -4
  24. data/lib/mongo_mapper/plugins/associations/in_array_proxy.rb +60 -29
  25. data/lib/mongo_mapper/plugins/associations/in_foreign_array_proxy.rb +136 -0
  26. data/lib/mongo_mapper/plugins/associations/many_association.rb +4 -2
  27. data/lib/mongo_mapper/plugins/associations/many_documents_as_proxy.rb +18 -16
  28. data/lib/mongo_mapper/plugins/associations/many_documents_proxy.rb +55 -48
  29. data/lib/mongo_mapper/plugins/associations/many_embedded_polymorphic_proxy.rb +14 -13
  30. data/lib/mongo_mapper/plugins/associations/many_embedded_proxy.rb +7 -6
  31. data/lib/mongo_mapper/plugins/associations/many_polymorphic_proxy.rb +7 -5
  32. data/lib/mongo_mapper/plugins/associations/one_as_proxy.rb +14 -11
  33. data/lib/mongo_mapper/plugins/associations/one_embedded_polymorphic_proxy.rb +14 -13
  34. data/lib/mongo_mapper/plugins/associations/one_embedded_proxy.rb +12 -10
  35. data/lib/mongo_mapper/plugins/associations/one_proxy.rb +27 -26
  36. data/lib/mongo_mapper/plugins/associations/proxy.rb +38 -27
  37. data/lib/mongo_mapper/plugins/associations/single_association.rb +5 -4
  38. data/lib/mongo_mapper/plugins/callbacks.rb +13 -0
  39. data/lib/mongo_mapper/plugins/counter_cache.rb +23 -4
  40. data/lib/mongo_mapper/plugins/dirty.rb +29 -37
  41. data/lib/mongo_mapper/plugins/document.rb +1 -1
  42. data/lib/mongo_mapper/plugins/dynamic_querying.rb +10 -9
  43. data/lib/mongo_mapper/plugins/dynamic_querying/dynamic_finder.rb +18 -17
  44. data/lib/mongo_mapper/plugins/embedded_callbacks.rb +2 -1
  45. data/lib/mongo_mapper/plugins/embedded_document.rb +2 -2
  46. data/lib/mongo_mapper/plugins/identity_map.rb +4 -2
  47. data/lib/mongo_mapper/plugins/indexes.rb +14 -7
  48. data/lib/mongo_mapper/plugins/keys.rb +164 -159
  49. data/lib/mongo_mapper/plugins/keys/key.rb +27 -16
  50. data/lib/mongo_mapper/plugins/keys/static.rb +45 -0
  51. data/lib/mongo_mapper/plugins/modifiers.rb +64 -38
  52. data/lib/mongo_mapper/plugins/partial_updates.rb +86 -0
  53. data/lib/mongo_mapper/plugins/persistence.rb +13 -8
  54. data/lib/mongo_mapper/plugins/protected.rb +6 -5
  55. data/lib/mongo_mapper/plugins/querying.rb +85 -42
  56. data/lib/mongo_mapper/plugins/querying/decorated_plucky_query.rb +20 -15
  57. data/lib/mongo_mapper/plugins/safe.rb +10 -4
  58. data/lib/mongo_mapper/plugins/scopes.rb +94 -7
  59. data/lib/mongo_mapper/plugins/stats.rb +1 -3
  60. data/lib/mongo_mapper/plugins/strong_parameters.rb +26 -0
  61. data/lib/mongo_mapper/plugins/timestamps.rb +1 -0
  62. data/lib/mongo_mapper/plugins/validations.rb +0 -0
  63. data/lib/mongo_mapper/railtie.rb +1 -0
  64. data/lib/mongo_mapper/utils.rb +2 -2
  65. data/lib/mongo_mapper/version.rb +1 -1
  66. data/lib/rails/generators/mongo_mapper/config/config_generator.rb +12 -13
  67. data/lib/rails/generators/mongo_mapper/model/model_generator.rb +9 -9
  68. data/spec/examples.txt +1728 -0
  69. data/spec/functional/accessible_spec.rb +19 -13
  70. data/spec/functional/associations/belongs_to_polymorphic_proxy_spec.rb +13 -13
  71. data/spec/functional/associations/belongs_to_proxy_spec.rb +54 -20
  72. data/spec/functional/associations/in_array_proxy_spec.rb +145 -10
  73. data/spec/functional/associations/in_foreign_array_proxy_spec.rb +321 -0
  74. data/spec/functional/associations/many_documents_as_proxy_spec.rb +6 -6
  75. data/spec/functional/associations/many_documents_proxy_spec.rb +85 -14
  76. data/spec/functional/associations/many_embedded_polymorphic_proxy_spec.rb +13 -13
  77. data/spec/functional/associations/many_embedded_proxy_spec.rb +1 -1
  78. data/spec/functional/associations/many_polymorphic_proxy_spec.rb +4 -4
  79. data/spec/functional/associations/one_as_proxy_spec.rb +10 -10
  80. data/spec/functional/associations/one_embedded_polymorphic_proxy_spec.rb +9 -9
  81. data/spec/functional/associations/one_embedded_proxy_spec.rb +31 -3
  82. data/spec/functional/associations/one_proxy_spec.rb +21 -11
  83. data/spec/functional/associations_spec.rb +3 -3
  84. data/spec/functional/binary_spec.rb +2 -2
  85. data/spec/functional/caching_spec.rb +8 -15
  86. data/spec/functional/callbacks_spec.rb +89 -2
  87. data/spec/functional/counter_cache_spec.rb +89 -0
  88. data/spec/functional/dirty_spec.rb +84 -46
  89. data/spec/functional/dirty_with_callbacks_spec.rb +59 -0
  90. data/spec/functional/document_spec.rb +2 -5
  91. data/spec/functional/dumpable_spec.rb +1 -1
  92. data/spec/functional/embedded_document_spec.rb +17 -17
  93. data/spec/functional/identity_map_spec.rb +29 -16
  94. data/spec/functional/indexes_spec.rb +19 -18
  95. data/spec/functional/keys_spec.rb +55 -28
  96. data/spec/functional/logger_spec.rb +3 -3
  97. data/spec/functional/modifiers_spec.rb +81 -19
  98. data/spec/functional/partial_updates_spec.rb +577 -0
  99. data/spec/functional/protected_spec.rb +14 -14
  100. data/spec/functional/querying_spec.rb +77 -28
  101. data/spec/functional/safe_spec.rb +23 -27
  102. data/spec/functional/sci_spec.rb +9 -9
  103. data/spec/functional/scopes_spec.rb +323 -2
  104. data/spec/functional/static_keys_spec.rb +153 -0
  105. data/spec/functional/stats_spec.rb +28 -16
  106. data/spec/functional/strong_parameters_spec.rb +49 -0
  107. data/spec/functional/touch_spec.rb +1 -1
  108. data/spec/functional/validations_spec.rb +51 -57
  109. data/spec/quality_spec.rb +2 -2
  110. data/spec/spec_helper.rb +37 -9
  111. data/spec/support/matchers.rb +5 -14
  112. data/spec/unit/associations/base_spec.rb +12 -12
  113. data/spec/unit/associations/belongs_to_association_spec.rb +2 -2
  114. data/spec/unit/associations/many_association_spec.rb +2 -2
  115. data/spec/unit/associations/one_association_spec.rb +2 -2
  116. data/spec/unit/associations/proxy_spec.rb +26 -20
  117. data/spec/unit/clone_spec.rb +1 -1
  118. data/spec/unit/document_spec.rb +8 -8
  119. data/spec/unit/dynamic_finder_spec.rb +8 -8
  120. data/spec/unit/embedded_document_spec.rb +18 -19
  121. data/spec/unit/extensions_spec.rb +17 -17
  122. data/spec/unit/identity_map_middleware_spec.rb +65 -96
  123. data/spec/unit/key_spec.rb +28 -26
  124. data/spec/unit/keys_spec.rb +20 -11
  125. data/spec/unit/mongo_mapper_spec.rb +38 -85
  126. data/spec/unit/serialization_spec.rb +1 -1
  127. data/spec/unit/time_zones_spec.rb +2 -2
  128. data/spec/unit/validations_spec.rb +46 -33
  129. metadata +56 -32
  130. data/README.rdoc +0 -59
  131. data/lib/mongo_mapper/connections/10gen.rb +0 -0
  132. data/lib/mongo_mapper/connections/moped.rb +0 -0
  133. data/lib/mongo_mapper/extensions/ordered_hash.rb +0 -23
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 3e78985587a63e18283384630db3c316ee260b20
4
- data.tar.gz: 5f2d55cbe5df4c2f8322088cb9f0edfaa84a69e9
2
+ SHA256:
3
+ metadata.gz: 2dcd83285ce83c4a5ec23c9be6002f4c087fec9127c969fd56c2bfdc8432bcad
4
+ data.tar.gz: ff9d93653ff5de87861066e6db917844df1dddac50d85e3391644027004f612c
5
5
  SHA512:
6
- metadata.gz: cf19d01f18a16676486f87db3e0db2c6894c6542f8492ed63b72cd9dbb24ae4dd90f26c5ec226a98fdc1636539a5a9a410c813bffba5923fa95a06fcc873bc4b
7
- data.tar.gz: 0b915ec964c1bafa1c3432061d91800029f291ce7799945830129d5c4109b1c2c21902ed8eb31ebb6c5648cb46c4775fe692d46614078ba001dabc95606ca3d0
6
+ metadata.gz: a56ec47e5b59e28043df1efe8289acbedce15d18ca1b1943d07ed3eea0d9e8ba4c1135bf9ad620433e29129b3edd3ca0f8f5020c87a1e0ea0f51fc214697bf21
7
+ data.tar.gz: 54efdd91e8956e9bc892ab0e31237e1ba9dd9f649abec6f978e1837144e281c333ff41db089c1637d6ccb37879eece8bfc12da663055fdeb1cda462a6017b75d
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2009 John Nunemaker
1
+ Copyright (c) 2009-2020 MongoMapper: John Nunemaker, Chris Heald, Scott Taylor
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -0,0 +1,61 @@
1
+ # MongoMapper
2
+
3
+ A Ruby Object Mapper for Mongo.
4
+
5
+ [<img src="https://badge.fury.io/rb/mongo_mapper.svg" alt="RubyGems">](https://rubygems.org/gems/mongo_mapper)
6
+
7
+ [<img src="https://github.com/mongomapper/mongomapper/workflows/Ruby/badge.svg?branch=master" alt="Build Status" />](https://github.com/mongomapper/mongomapper/actions?query=workflow%3ARuby+branch%3Amaster)
8
+
9
+ [<img src="https://coveralls.io/repos/mongomapper/mongomapper/badge.svg" 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
+ ## Copyright
49
+
50
+ Copyright (c) 2009-2020 MongoMapper. See LICENSE for details.
51
+
52
+ ## Contributors
53
+
54
+ MongoMapper/Plucky is:
55
+
56
+ * John Nunemaker
57
+ * Chris Heald
58
+ * Scott Taylor
59
+
60
+ But all open source projects are a team effort and could not happen without
61
+ everyone who has contributed. See `CONTRIBUTORS` for the full list. Thank you!
@@ -16,7 +16,7 @@ class User
16
16
  key :links, Hash
17
17
  timestamps!
18
18
  end
19
- User.collection.remove # empties collection
19
+ User.collection.drop # empties collection
20
20
 
21
21
  john = User.create({
22
22
  :first_name => 'John',
@@ -10,7 +10,7 @@ class User
10
10
  key :name, String
11
11
  key :tags, Array
12
12
  end
13
- User.collection.remove # empties 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)
@@ -10,7 +10,7 @@ class User
10
10
  key :name, String
11
11
  key :tags, Array
12
12
  end
13
- User.collection.remove # empties 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)
@@ -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
@@ -28,7 +28,7 @@ class User
28
28
  key :name, String
29
29
  key :tags, Array
30
30
  end
31
- User.collection.remove # empties 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)
@@ -3,6 +3,7 @@ require 'plucky'
3
3
  require 'active_support'
4
4
  require 'active_support/core_ext'
5
5
  require 'active_model'
6
+ require 'activemodel-serializers-xml'
6
7
  require "mongo_mapper/railtie" if defined?(Rails)
7
8
 
8
9
  I18n.load_path << File.expand_path('../mongo_mapper/locale/en.yml', __FILE__)
@@ -51,6 +52,7 @@ module MongoMapper
51
52
  autoload :Logger, 'mongo_mapper/plugins/logger'
52
53
  autoload :Modifiers, 'mongo_mapper/plugins/modifiers'
53
54
  autoload :Pagination, 'mongo_mapper/plugins/pagination'
55
+ autoload :PartialUpdates, 'mongo_mapper/plugins/partial_updates'
54
56
  autoload :Persistence, 'mongo_mapper/plugins/persistence'
55
57
  autoload :Protected, 'mongo_mapper/plugins/protected'
56
58
  autoload :Querying, 'mongo_mapper/plugins/querying'
@@ -60,6 +62,7 @@ module MongoMapper
60
62
  autoload :Scopes, 'mongo_mapper/plugins/scopes'
61
63
  autoload :Serialization, 'mongo_mapper/plugins/serialization'
62
64
  autoload :Stats, 'mongo_mapper/plugins/stats'
65
+ autoload :StrongParameters, 'mongo_mapper/plugins/strong_parameters'
63
66
  autoload :Timestamps, 'mongo_mapper/plugins/timestamps'
64
67
  autoload :Userstamps, 'mongo_mapper/plugins/userstamps'
65
68
  autoload :Validations, 'mongo_mapper/plugins/validations'
@@ -85,6 +88,7 @@ module MongoMapper
85
88
  autoload :OneEmbeddedProxy, 'mongo_mapper/plugins/associations/one_embedded_proxy'
86
89
  autoload :OneEmbeddedPolymorphicProxy, 'mongo_mapper/plugins/associations/one_embedded_polymorphic_proxy'
87
90
  autoload :InArrayProxy, 'mongo_mapper/plugins/associations/in_array_proxy'
91
+ autoload :InForeignArrayProxy, 'mongo_mapper/plugins/associations/in_foreign_array_proxy'
88
92
  end
89
93
  end
90
94
 
@@ -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::MongoClient.new
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 = nil
33
- @@database_name = name
31
+ @@database = connection.use(name).database
34
32
  end
35
33
 
36
34
  # @api public
37
35
  def database
38
- return nil if @@database_name.blank?
39
-
40
- @@database ||= MongoMapper.connection.db(@@database_name)
36
+ @@database ||= connection.database
41
37
  end
42
38
 
43
39
  def config=(hash)
@@ -51,46 +47,28 @@ module MongoMapper
51
47
 
52
48
  # @api private
53
49
  def config_for_environment(environment)
54
- env = config[environment.to_s] || {}
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['options'].symbolize_keys.merge(options)
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
- MongoMapper.connection = if env.key?('hosts')
82
- klass = (env.key?("mongos") || env.key?("sharded")) ? Mongo::MongoShardedClient : Mongo::MongoReplicaSetClient
83
- if env['hosts'].first.is_a?(String)
84
- klass.new( env['hosts'], options )
85
- else
86
- klass.new( *env['hosts'].push(options) )
87
- end
88
- else
89
- 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"
90
68
  end
91
69
 
92
- MongoMapper.database = env['database']
93
- MongoMapper.database.authenticate(env['username'], env['password']) if env['username'] && env['password']
70
+ options[:read] = options[:read].to_sym if options[:read].is_a? String
71
+ MongoMapper.connection = Mongo::Client.new(addresses_or_uri, options)
94
72
  end
95
73
 
96
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
@@ -35,6 +36,7 @@ module MongoMapper
35
36
  include Plugins::Validations
36
37
  include Plugins::EmbeddedCallbacks
37
38
  include Plugins::Callbacks # for now callbacks needs to be after validations
39
+ include Plugins::PartialUpdates
38
40
  include Plugins::IdentityMap
39
41
  include Plugins::CounterCache
40
42
 
@@ -2,18 +2,26 @@
2
2
  module MongoMapper
3
3
  module Extensions
4
4
  module Array
5
- def to_mongo(value)
6
- value = value.respond_to?(:lines) ? value.lines : value
7
- value.to_a
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 from_mongo(value)
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
- extend MongoMapper::Extensions::Array
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
- def from_mongo(value)
6
- HashWithIndifferentAccess.new(value || {})
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
- extend MongoMapper::Extensions::Hash
25
+ include MongoMapper::Extensions::Hash
14
26
  end
@@ -17,6 +17,10 @@ module MongoMapper
17
17
  def to_mongo
18
18
  self.class.to_mongo(self)
19
19
  end
20
+
21
+ def _mongo_mapper_deep_copy_
22
+ self
23
+ end
20
24
  end
21
25
  end
22
26
  end
@@ -18,7 +18,7 @@ class ObjectId
18
18
  end
19
19
 
20
20
  class BSON::ObjectId
21
- alias_method :original_to_json, :to_json
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
- def to_mongo(value)
6
- value && value.to_s
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 from_mongo(value)
10
- value && value.to_s
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
- extend MongoMapper::Extensions::String
25
+ include MongoMapper::Extensions::String
18
26
  end
@@ -42,20 +42,21 @@ module MongoMapper
42
42
  self.class.accessible_attributes?
43
43
  end
44
44
 
45
- protected
46
- def filter_inaccessible_attrs(attrs)
47
- return attrs if !accessible_attributes? || attrs.blank?
48
- attrs.dup.delete_if { |key, val| attribute_inaccessible?(key.to_sym) }
49
- end
45
+ protected
46
+
47
+ def filter_inaccessible_attrs(attrs)
48
+ return attrs if !accessible_attributes? || attrs.blank?
49
+ attrs.dup.delete_if { |key, val| attribute_inaccessible?(key.to_sym) }
50
+ end
50
51
 
51
- def attribute_inaccessible?(attribute)
52
- unless accessible_attributes.include?(attribute)
53
- message = "Can't mass-assign protected attribute: #{attribute}"
54
- MongoMapper.logger ? MongoMapper.logger.warn(message) : puts(message)
52
+ def attribute_inaccessible?(attribute)
53
+ unless accessible_attributes.include?(attribute)
54
+ message = "Can't mass-assign protected attribute: #{attribute}"
55
+ MongoMapper.logger ? MongoMapper.logger.warn(message) : puts(message)
55
56
 
56
- return true
57
- end
57
+ return true
58
58
  end
59
+ end
59
60
  end
60
61
  end
61
- end
62
+ end
@@ -56,12 +56,13 @@ module MongoMapper
56
56
  end
57
57
  end
58
58
 
59
- private
60
- def create_association(association)
61
- @embedded_associations = nil
62
- associations[association.name] = association
63
- association.setup(self)
64
- end
59
+ private
60
+
61
+ def create_association(association)
62
+ @embedded_associations = nil
63
+ associations[association.name] = association
64
+ association.setup(self)
65
+ end
65
66
  end
66
67
 
67
68
  def associations