mongo_mapper 0.15.1 → 0.15.5

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 (57) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +22 -7
  3. data/lib/mongo_mapper/document.rb +1 -0
  4. data/lib/mongo_mapper/extensions/array.rb +1 -1
  5. data/lib/mongo_mapper/extensions/binary.rb +1 -1
  6. data/lib/mongo_mapper/extensions/date.rb +1 -1
  7. data/lib/mongo_mapper/extensions/float.rb +1 -1
  8. data/lib/mongo_mapper/extensions/hash.rb +1 -1
  9. data/lib/mongo_mapper/extensions/nil_class.rb +2 -2
  10. data/lib/mongo_mapper/extensions/object.rb +1 -1
  11. data/lib/mongo_mapper/extensions/object_id.rb +1 -1
  12. data/lib/mongo_mapper/extensions/set.rb +1 -1
  13. data/lib/mongo_mapper/extensions/string.rb +1 -1
  14. data/lib/mongo_mapper/plugins/associations/many_association.rb +2 -3
  15. data/lib/mongo_mapper/plugins/associations/{belongs_to_polymorphic_proxy.rb → proxy/belongs_to_polymorphic_proxy.rb} +0 -0
  16. data/lib/mongo_mapper/plugins/associations/{belongs_to_proxy.rb → proxy/belongs_to_proxy.rb} +6 -0
  17. data/lib/mongo_mapper/plugins/associations/proxy/collection.rb +55 -0
  18. data/lib/mongo_mapper/plugins/associations/{embedded_collection.rb → proxy/embedded_collection.rb} +0 -0
  19. data/lib/mongo_mapper/plugins/associations/{in_array_proxy.rb → proxy/in_array_proxy.rb} +0 -0
  20. data/lib/mongo_mapper/plugins/associations/{in_foreign_array_proxy.rb → proxy/in_foreign_array_proxy.rb} +0 -0
  21. data/lib/mongo_mapper/plugins/associations/{many_documents_as_proxy.rb → proxy/many_documents_as_proxy.rb} +0 -0
  22. data/lib/mongo_mapper/plugins/associations/{many_documents_proxy.rb → proxy/many_documents_proxy.rb} +0 -4
  23. data/lib/mongo_mapper/plugins/associations/{many_embedded_polymorphic_proxy.rb → proxy/many_embedded_polymorphic_proxy.rb} +0 -0
  24. data/lib/mongo_mapper/plugins/associations/{many_embedded_proxy.rb → proxy/many_embedded_proxy.rb} +0 -0
  25. data/lib/mongo_mapper/plugins/associations/{many_polymorphic_proxy.rb → proxy/many_polymorphic_proxy.rb} +0 -0
  26. data/lib/mongo_mapper/plugins/associations/{one_as_proxy.rb → proxy/one_as_proxy.rb} +0 -0
  27. data/lib/mongo_mapper/plugins/associations/{one_embedded_polymorphic_proxy.rb → proxy/one_embedded_polymorphic_proxy.rb} +0 -0
  28. data/lib/mongo_mapper/plugins/associations/{one_embedded_proxy.rb → proxy/one_embedded_proxy.rb} +3 -1
  29. data/lib/mongo_mapper/plugins/associations/{one_proxy.rb → proxy/one_proxy.rb} +0 -0
  30. data/lib/mongo_mapper/plugins/associations/{proxy.rb → proxy/proxy.rb} +69 -49
  31. data/lib/mongo_mapper/plugins/associations/single_association.rb +2 -11
  32. data/lib/mongo_mapper/plugins/dirty.rb +2 -2
  33. data/lib/mongo_mapper/plugins/embedded_document.rb +1 -1
  34. data/lib/mongo_mapper/plugins/keys/key.rb +9 -6
  35. data/lib/mongo_mapper/plugins/keys.rb +17 -7
  36. data/lib/mongo_mapper/plugins/querying.rb +2 -2
  37. data/lib/mongo_mapper/plugins/scopes.rb +19 -3
  38. data/lib/mongo_mapper/plugins/shardable.rb +30 -0
  39. data/lib/mongo_mapper/plugins/validations.rb +1 -1
  40. data/lib/mongo_mapper/version.rb +1 -1
  41. data/lib/mongo_mapper.rb +18 -18
  42. data/spec/examples.txt +1718 -1697
  43. data/spec/functional/associations/belongs_to_proxy_spec.rb +33 -0
  44. data/spec/functional/associations/one_embedded_proxy_spec.rb +28 -0
  45. data/spec/functional/associations/one_proxy_spec.rb +11 -1
  46. data/spec/functional/dirty_spec.rb +21 -0
  47. data/spec/functional/dirty_with_callbacks_spec.rb +59 -0
  48. data/spec/functional/keys_spec.rb +13 -0
  49. data/spec/functional/scopes_spec.rb +88 -0
  50. data/spec/functional/shardable_spec.rb +67 -0
  51. data/spec/spec_helper.rb +7 -0
  52. data/spec/unit/associations/proxy_spec.rb +30 -5
  53. data/spec/unit/extensions_spec.rb +9 -3
  54. data/spec/unit/inspect_spec.rb +1 -1
  55. data/spec/unit/key_spec.rb +7 -1
  56. metadata +36 -19
  57. data/lib/mongo_mapper/plugins/associations/collection.rb +0 -29
@@ -10,6 +10,14 @@ module MongoMapper
10
10
 
11
11
  module ClassMethods
12
12
  def scope(name, scope={})
13
+ if dangerous_class_method?(name)
14
+ raise ArgumentError, <<~end_message
15
+ You tried to define a scope named "#{name}"
16
+ on the model "#{self.name}", but MongoMapper::Document already defined
17
+ a class method with the same name.
18
+ end_message
19
+ end
20
+
13
21
  # Assign to _scopes instead of using []= to avoid mixing subclass scopes
14
22
  self._scopes = scopes.merge(name => scope)
15
23
 
@@ -23,7 +31,7 @@ module MongoMapper
23
31
  end
24
32
 
25
33
  def active_scopes
26
- @active_scopes ||= []
34
+ Thread.current["mongo_mapper_#{name}_active_scopes"] ||= []
27
35
  end
28
36
 
29
37
  def default_scopes
@@ -70,12 +78,12 @@ module MongoMapper
70
78
  old_active_scopes = active_scopes.dup
71
79
 
72
80
  @default_scopes = []
73
- @active_scopes = []
81
+ active_scopes.clear
74
82
 
75
83
  yield
76
84
  ensure
77
85
  @default_scopes = old_default_scopes
78
- @active_scopes = old_active_scopes
86
+ active_scopes.concat(old_active_scopes)
79
87
  end
80
88
 
81
89
  private
@@ -93,6 +101,14 @@ module MongoMapper
93
101
  def all_anonymous_scopes
94
102
  [default_scopes + active_scopes].flatten
95
103
  end
104
+
105
+ RESTRICTED_CLASS_METHODS = %w(private public protected allocate new name parent superclass)
106
+ private_constant :RESTRICTED_CLASS_METHODS
107
+
108
+ def dangerous_class_method?(method_name)
109
+ return true if RESTRICTED_CLASS_METHODS.include?(method_name.to_s)
110
+ Document.method_defined?(method_name)
111
+ end
96
112
  end
97
113
  end
98
114
  end
@@ -0,0 +1,30 @@
1
+ module MongoMapper
2
+ module Plugins
3
+ module Shardable
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ class_attribute :shard_key_fields
8
+ self.shard_key_fields = []
9
+ end
10
+
11
+ def shard_key_filter
12
+ filter = {}
13
+ shard_key_fields.each do |field|
14
+ filter[field] = if new_record?
15
+ send(field)
16
+ else
17
+ changed_attributes.key?(field) ? changed_attributes[field] : send(field)
18
+ end
19
+ end
20
+ filter
21
+ end
22
+
23
+ module ClassMethods
24
+ def shard_key(*fields)
25
+ self.shard_key_fields = fields.map(&:to_s).freeze
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -54,7 +54,7 @@ module MongoMapper
54
54
  conditions[:_id.ne] = record._id if record._id
55
55
 
56
56
  if @klass.exists?(conditions)
57
- record.errors.add(attribute, :taken, options.except(:case_sensitive, :scope).merge(:value => value))
57
+ record.errors.add(attribute, :taken, **options.except(:case_sensitive, :scope).merge(:value => value))
58
58
  end
59
59
  end
60
60
 
@@ -1,4 +1,4 @@
1
1
  # encoding: UTF-8
2
2
  module MongoMapper
3
- Version = '0.15.1'
3
+ Version = '0.15.5'
4
4
  end
data/lib/mongo_mapper.rb CHANGED
@@ -60,6 +60,7 @@ module MongoMapper
60
60
  autoload :Safe, 'mongo_mapper/plugins/safe'
61
61
  autoload :Sci, 'mongo_mapper/plugins/sci'
62
62
  autoload :Scopes, 'mongo_mapper/plugins/scopes'
63
+ autoload :Shardable, 'mongo_mapper/plugins/shardable'
63
64
  autoload :Serialization, 'mongo_mapper/plugins/serialization'
64
65
  autoload :Stats, 'mongo_mapper/plugins/stats'
65
66
  autoload :StrongParameters, 'mongo_mapper/plugins/strong_parameters'
@@ -70,25 +71,27 @@ module MongoMapper
70
71
 
71
72
  module Associations
72
73
  autoload :Base, 'mongo_mapper/plugins/associations/base'
73
- autoload :Collection, 'mongo_mapper/plugins/associations/collection'
74
- autoload :EmbeddedCollection, 'mongo_mapper/plugins/associations/embedded_collection'
75
74
  autoload :ManyAssociation, 'mongo_mapper/plugins/associations/many_association'
76
75
  autoload :SingleAssociation, 'mongo_mapper/plugins/associations/single_association'
77
76
  autoload :BelongsToAssociation, 'mongo_mapper/plugins/associations/belongs_to_association'
78
77
  autoload :OneAssociation, 'mongo_mapper/plugins/associations/one_association'
79
- autoload :ManyDocumentsProxy, 'mongo_mapper/plugins/associations/many_documents_proxy'
80
- autoload :BelongsToProxy, 'mongo_mapper/plugins/associations/belongs_to_proxy'
81
- autoload :BelongsToPolymorphicProxy, 'mongo_mapper/plugins/associations/belongs_to_polymorphic_proxy'
82
- autoload :ManyPolymorphicProxy, 'mongo_mapper/plugins/associations/many_polymorphic_proxy'
83
- autoload :ManyEmbeddedProxy, 'mongo_mapper/plugins/associations/many_embedded_proxy'
84
- autoload :ManyEmbeddedPolymorphicProxy, 'mongo_mapper/plugins/associations/many_embedded_polymorphic_proxy'
85
- autoload :ManyDocumentsAsProxy, 'mongo_mapper/plugins/associations/many_documents_as_proxy'
86
- autoload :OneProxy, 'mongo_mapper/plugins/associations/one_proxy'
87
- autoload :OneAsProxy, 'mongo_mapper/plugins/associations/one_as_proxy'
88
- autoload :OneEmbeddedProxy, 'mongo_mapper/plugins/associations/one_embedded_proxy'
89
- autoload :OneEmbeddedPolymorphicProxy, 'mongo_mapper/plugins/associations/one_embedded_polymorphic_proxy'
90
- autoload :InArrayProxy, 'mongo_mapper/plugins/associations/in_array_proxy'
91
- autoload :InForeignArrayProxy, 'mongo_mapper/plugins/associations/in_foreign_array_proxy'
78
+
79
+ autoload :Proxy, 'mongo_mapper/plugins/associations/proxy/proxy'
80
+ autoload :Collection, 'mongo_mapper/plugins/associations/proxy/collection'
81
+ autoload :EmbeddedCollection, 'mongo_mapper/plugins/associations/proxy/embedded_collection'
82
+ autoload :ManyDocumentsProxy, 'mongo_mapper/plugins/associations/proxy/many_documents_proxy'
83
+ autoload :BelongsToProxy, 'mongo_mapper/plugins/associations/proxy/belongs_to_proxy'
84
+ autoload :BelongsToPolymorphicProxy, 'mongo_mapper/plugins/associations/proxy/belongs_to_polymorphic_proxy'
85
+ autoload :ManyPolymorphicProxy, 'mongo_mapper/plugins/associations/proxy/many_polymorphic_proxy'
86
+ autoload :ManyEmbeddedProxy, 'mongo_mapper/plugins/associations/proxy/many_embedded_proxy'
87
+ autoload :ManyEmbeddedPolymorphicProxy, 'mongo_mapper/plugins/associations/proxy/many_embedded_polymorphic_proxy'
88
+ autoload :ManyDocumentsAsProxy, 'mongo_mapper/plugins/associations/proxy/many_documents_as_proxy'
89
+ autoload :OneProxy, 'mongo_mapper/plugins/associations/proxy/one_proxy'
90
+ autoload :OneAsProxy, 'mongo_mapper/plugins/associations/proxy/one_as_proxy'
91
+ autoload :OneEmbeddedProxy, 'mongo_mapper/plugins/associations/proxy/one_embedded_proxy'
92
+ autoload :OneEmbeddedPolymorphicProxy, 'mongo_mapper/plugins/associations/proxy/one_embedded_polymorphic_proxy'
93
+ autoload :InArrayProxy, 'mongo_mapper/plugins/associations/proxy/in_array_proxy'
94
+ autoload :InForeignArrayProxy, 'mongo_mapper/plugins/associations/proxy/in_foreign_array_proxy'
92
95
  end
93
96
  end
94
97
 
@@ -99,7 +102,4 @@ Dir[File.join(File.dirname(__FILE__), 'mongo_mapper', 'extensions', '*.rb')].eac
99
102
  require extension
100
103
  end
101
104
 
102
- # FIXME: autoload with proxy is failing, need to investigate
103
- require 'mongo_mapper/plugins/associations/proxy'
104
-
105
105
  ActiveSupport.run_load_hooks(:mongo_mapper, MongoMapper)