mongo_mapper 0.15.1 → 0.15.5

Sign up to get free protection for your applications and to get access to all the features.
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)