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.
- checksums.yaml +4 -4
- data/README.md +22 -7
- data/lib/mongo_mapper/document.rb +1 -0
- data/lib/mongo_mapper/extensions/array.rb +1 -1
- data/lib/mongo_mapper/extensions/binary.rb +1 -1
- data/lib/mongo_mapper/extensions/date.rb +1 -1
- data/lib/mongo_mapper/extensions/float.rb +1 -1
- data/lib/mongo_mapper/extensions/hash.rb +1 -1
- data/lib/mongo_mapper/extensions/nil_class.rb +2 -2
- data/lib/mongo_mapper/extensions/object.rb +1 -1
- data/lib/mongo_mapper/extensions/object_id.rb +1 -1
- data/lib/mongo_mapper/extensions/set.rb +1 -1
- data/lib/mongo_mapper/extensions/string.rb +1 -1
- data/lib/mongo_mapper/plugins/associations/many_association.rb +2 -3
- data/lib/mongo_mapper/plugins/associations/{belongs_to_polymorphic_proxy.rb → proxy/belongs_to_polymorphic_proxy.rb} +0 -0
- data/lib/mongo_mapper/plugins/associations/{belongs_to_proxy.rb → proxy/belongs_to_proxy.rb} +6 -0
- data/lib/mongo_mapper/plugins/associations/proxy/collection.rb +55 -0
- data/lib/mongo_mapper/plugins/associations/{embedded_collection.rb → proxy/embedded_collection.rb} +0 -0
- data/lib/mongo_mapper/plugins/associations/{in_array_proxy.rb → proxy/in_array_proxy.rb} +0 -0
- data/lib/mongo_mapper/plugins/associations/{in_foreign_array_proxy.rb → proxy/in_foreign_array_proxy.rb} +0 -0
- data/lib/mongo_mapper/plugins/associations/{many_documents_as_proxy.rb → proxy/many_documents_as_proxy.rb} +0 -0
- data/lib/mongo_mapper/plugins/associations/{many_documents_proxy.rb → proxy/many_documents_proxy.rb} +0 -4
- data/lib/mongo_mapper/plugins/associations/{many_embedded_polymorphic_proxy.rb → proxy/many_embedded_polymorphic_proxy.rb} +0 -0
- data/lib/mongo_mapper/plugins/associations/{many_embedded_proxy.rb → proxy/many_embedded_proxy.rb} +0 -0
- data/lib/mongo_mapper/plugins/associations/{many_polymorphic_proxy.rb → proxy/many_polymorphic_proxy.rb} +0 -0
- data/lib/mongo_mapper/plugins/associations/{one_as_proxy.rb → proxy/one_as_proxy.rb} +0 -0
- data/lib/mongo_mapper/plugins/associations/{one_embedded_polymorphic_proxy.rb → proxy/one_embedded_polymorphic_proxy.rb} +0 -0
- data/lib/mongo_mapper/plugins/associations/{one_embedded_proxy.rb → proxy/one_embedded_proxy.rb} +3 -1
- data/lib/mongo_mapper/plugins/associations/{one_proxy.rb → proxy/one_proxy.rb} +0 -0
- data/lib/mongo_mapper/plugins/associations/{proxy.rb → proxy/proxy.rb} +69 -49
- data/lib/mongo_mapper/plugins/associations/single_association.rb +2 -11
- data/lib/mongo_mapper/plugins/dirty.rb +2 -2
- data/lib/mongo_mapper/plugins/embedded_document.rb +1 -1
- data/lib/mongo_mapper/plugins/keys/key.rb +9 -6
- data/lib/mongo_mapper/plugins/keys.rb +17 -7
- data/lib/mongo_mapper/plugins/querying.rb +2 -2
- data/lib/mongo_mapper/plugins/scopes.rb +19 -3
- data/lib/mongo_mapper/plugins/shardable.rb +30 -0
- data/lib/mongo_mapper/plugins/validations.rb +1 -1
- data/lib/mongo_mapper/version.rb +1 -1
- data/lib/mongo_mapper.rb +18 -18
- data/spec/examples.txt +1718 -1697
- data/spec/functional/associations/belongs_to_proxy_spec.rb +33 -0
- data/spec/functional/associations/one_embedded_proxy_spec.rb +28 -0
- data/spec/functional/associations/one_proxy_spec.rb +11 -1
- data/spec/functional/dirty_spec.rb +21 -0
- data/spec/functional/dirty_with_callbacks_spec.rb +59 -0
- data/spec/functional/keys_spec.rb +13 -0
- data/spec/functional/scopes_spec.rb +88 -0
- data/spec/functional/shardable_spec.rb +67 -0
- data/spec/spec_helper.rb +7 -0
- data/spec/unit/associations/proxy_spec.rb +30 -5
- data/spec/unit/extensions_spec.rb +9 -3
- data/spec/unit/inspect_spec.rb +1 -1
- data/spec/unit/key_spec.rb +7 -1
- metadata +36 -19
- 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
|
-
|
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
|
-
|
81
|
+
active_scopes.clear
|
74
82
|
|
75
83
|
yield
|
76
84
|
ensure
|
77
85
|
@default_scopes = old_default_scopes
|
78
|
-
|
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
|
|
data/lib/mongo_mapper/version.rb
CHANGED
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
|
-
|
80
|
-
autoload :
|
81
|
-
autoload :
|
82
|
-
autoload :
|
83
|
-
autoload :
|
84
|
-
autoload :
|
85
|
-
autoload :
|
86
|
-
autoload :
|
87
|
-
autoload :
|
88
|
-
autoload :
|
89
|
-
autoload :
|
90
|
-
autoload :
|
91
|
-
autoload :
|
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)
|