mongo_mapper_ign 0.7.7 → 0.7.8
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.
- data/LICENSE +20 -20
- data/README.rdoc +34 -34
- data/bin/mmconsole +60 -60
- data/lib/mongo_mapper.rb +123 -123
- data/lib/mongo_mapper/document.rb +292 -292
- data/lib/mongo_mapper/embedded_document.rb +71 -71
- data/lib/mongo_mapper/plugins.rb +36 -36
- data/lib/mongo_mapper/plugins/associations.rb +115 -115
- data/lib/mongo_mapper/plugins/associations/base.rb +124 -124
- data/lib/mongo_mapper/plugins/associations/belongs_to_polymorphic_proxy.rb +31 -31
- data/lib/mongo_mapper/plugins/associations/belongs_to_proxy.rb +26 -26
- data/lib/mongo_mapper/plugins/associations/collection.rb +21 -21
- data/lib/mongo_mapper/plugins/associations/embedded_collection.rb +39 -39
- data/lib/mongo_mapper/plugins/associations/in_array_proxy.rb +160 -144
- data/lib/mongo_mapper/plugins/associations/many_documents_as_proxy.rb +29 -29
- data/lib/mongo_mapper/plugins/associations/many_documents_proxy.rb +130 -130
- data/lib/mongo_mapper/plugins/associations/many_embedded_polymorphic_proxy.rb +32 -32
- data/lib/mongo_mapper/plugins/associations/many_embedded_proxy.rb +24 -24
- data/lib/mongo_mapper/plugins/associations/many_polymorphic_proxy.rb +14 -14
- data/lib/mongo_mapper/plugins/associations/one_embedded_proxy.rb +42 -42
- data/lib/mongo_mapper/plugins/associations/one_proxy.rb +70 -70
- data/lib/mongo_mapper/plugins/associations/proxy.rb +125 -125
- data/lib/mongo_mapper/plugins/callbacks.rb +241 -241
- data/lib/mongo_mapper/plugins/clone.rb +13 -13
- data/lib/mongo_mapper/plugins/descendants.rb +16 -16
- data/lib/mongo_mapper/plugins/dirty.rb +119 -119
- data/lib/mongo_mapper/plugins/equality.rb +23 -23
- data/lib/mongo_mapper/plugins/identity_map.rb +123 -123
- data/lib/mongo_mapper/plugins/inspect.rb +14 -14
- data/lib/mongo_mapper/plugins/keys.rb +322 -322
- data/lib/mongo_mapper/plugins/keys/key.rb +53 -53
- data/lib/mongo_mapper/plugins/logger.rb +17 -17
- data/lib/mongo_mapper/plugins/modifiers.rb +111 -111
- data/lib/mongo_mapper/plugins/pagination.rb +24 -24
- data/lib/mongo_mapper/plugins/pagination/proxy.rb +72 -72
- data/lib/mongo_mapper/plugins/persistence.rb +96 -96
- data/lib/mongo_mapper/plugins/protected.rb +46 -46
- data/lib/mongo_mapper/plugins/rails.rb +57 -57
- data/lib/mongo_mapper/plugins/serialization.rb +92 -92
- data/lib/mongo_mapper/plugins/serialization/array.rb +56 -56
- data/lib/mongo_mapper/plugins/serialization/xml_serializer.rb +239 -239
- data/lib/mongo_mapper/plugins/timestamps.rb +21 -21
- data/lib/mongo_mapper/plugins/userstamps.rb +14 -14
- data/lib/mongo_mapper/plugins/validations.rb +46 -46
- data/lib/mongo_mapper/query.rb +28 -28
- data/lib/mongo_mapper/support.rb +197 -197
- data/lib/mongo_mapper/support/descendant_appends.rb +46 -46
- data/lib/mongo_mapper/support/find.rb +77 -77
- data/lib/mongo_mapper/version.rb +3 -3
- metadata +4 -25
@@ -1,14 +1,14 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
module MongoMapper
|
3
|
-
module Plugins
|
4
|
-
module Clone
|
5
|
-
module InstanceMethods
|
6
|
-
def clone
|
7
|
-
clone_attributes = self.attributes
|
8
|
-
clone_attributes.delete("_id")
|
9
|
-
self.class.new(clone_attributes)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
1
|
+
# encoding: UTF-8
|
2
|
+
module MongoMapper
|
3
|
+
module Plugins
|
4
|
+
module Clone
|
5
|
+
module InstanceMethods
|
6
|
+
def clone
|
7
|
+
clone_attributes = self.attributes
|
8
|
+
clone_attributes.delete("_id")
|
9
|
+
self.class.new(clone_attributes)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
14
|
end
|
@@ -1,17 +1,17 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
module MongoMapper
|
3
|
-
module Plugins
|
4
|
-
module Descendants
|
5
|
-
module ClassMethods
|
6
|
-
def inherited(descendant)
|
7
|
-
descendants << descendant
|
8
|
-
super
|
9
|
-
end
|
10
|
-
|
11
|
-
def descendants
|
12
|
-
@descendants ||= []
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
1
|
+
# encoding: UTF-8
|
2
|
+
module MongoMapper
|
3
|
+
module Plugins
|
4
|
+
module Descendants
|
5
|
+
module ClassMethods
|
6
|
+
def inherited(descendant)
|
7
|
+
descendants << descendant
|
8
|
+
super
|
9
|
+
end
|
10
|
+
|
11
|
+
def descendants
|
12
|
+
@descendants ||= []
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
17
|
end
|
@@ -1,120 +1,120 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
module MongoMapper
|
3
|
-
module Plugins
|
4
|
-
module Dirty
|
5
|
-
module InstanceMethods
|
6
|
-
def method_missing(method, *args, &block)
|
7
|
-
if method.to_s =~ /(_changed\?|_change|_will_change!|_was)$/
|
8
|
-
method_suffix = $1
|
9
|
-
key = method.to_s.gsub(method_suffix, '')
|
10
|
-
|
11
|
-
if key_names.include?(key)
|
12
|
-
case method_suffix
|
13
|
-
when '_changed?'
|
14
|
-
key_changed?(key)
|
15
|
-
when '_change'
|
16
|
-
key_change(key)
|
17
|
-
when '_will_change!'
|
18
|
-
key_will_change!(key)
|
19
|
-
when '_was'
|
20
|
-
key_was(key)
|
21
|
-
end
|
22
|
-
else
|
23
|
-
super
|
24
|
-
end
|
25
|
-
else
|
26
|
-
super
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def changed?
|
31
|
-
!changed_keys.empty?
|
32
|
-
end
|
33
|
-
|
34
|
-
def changed
|
35
|
-
changed_keys.keys
|
36
|
-
end
|
37
|
-
|
38
|
-
def changes
|
39
|
-
changed.inject({}) { |h, key| h[key] = key_change(key); h }
|
40
|
-
end
|
41
|
-
|
42
|
-
def initialize(*args)
|
43
|
-
super
|
44
|
-
changed_keys.clear if args.first.blank? || !new?
|
45
|
-
end
|
46
|
-
|
47
|
-
def save(*args)
|
48
|
-
if status = super
|
49
|
-
changed_keys.clear
|
50
|
-
end
|
51
|
-
status
|
52
|
-
end
|
53
|
-
|
54
|
-
def save!(*args)
|
55
|
-
status = super
|
56
|
-
changed_keys.clear
|
57
|
-
status
|
58
|
-
end
|
59
|
-
|
60
|
-
def reload(*args)
|
61
|
-
document = super
|
62
|
-
changed_keys.clear
|
63
|
-
document
|
64
|
-
end
|
65
|
-
|
66
|
-
private
|
67
|
-
def clone_key_value(key)
|
68
|
-
value = read_key(key)
|
69
|
-
value.duplicable? ? value.clone : value
|
70
|
-
rescue TypeError, NoMethodError
|
71
|
-
value
|
72
|
-
end
|
73
|
-
|
74
|
-
def changed_keys
|
75
|
-
@changed_keys ||= {}
|
76
|
-
end
|
77
|
-
|
78
|
-
def key_changed?(key)
|
79
|
-
changed_keys.include?(key)
|
80
|
-
end
|
81
|
-
|
82
|
-
def key_change(key)
|
83
|
-
[changed_keys[key], __send__(key)] if key_changed?(key)
|
84
|
-
end
|
85
|
-
|
86
|
-
def key_was(key)
|
87
|
-
key_changed?(key) ? changed_keys[key] : __send__(key)
|
88
|
-
end
|
89
|
-
|
90
|
-
def key_will_change!(key)
|
91
|
-
changed_keys[key] = clone_key_value(key)
|
92
|
-
end
|
93
|
-
|
94
|
-
def write_key(key, value)
|
95
|
-
key = key.to_s
|
96
|
-
|
97
|
-
if changed_keys.include?(key)
|
98
|
-
old = changed_keys[key]
|
99
|
-
changed_keys.delete(key) unless value_changed?(key, old, value)
|
100
|
-
else
|
101
|
-
old = clone_key_value(key)
|
102
|
-
changed_keys[key] = old if value_changed?(key, old, value)
|
103
|
-
end
|
104
|
-
|
105
|
-
super(key, value)
|
106
|
-
end
|
107
|
-
|
108
|
-
def value_changed?(key_name, old, value)
|
109
|
-
key = keys[key_name]
|
110
|
-
|
111
|
-
if key.number? && value.blank?
|
112
|
-
value = nil
|
113
|
-
end
|
114
|
-
|
115
|
-
old != value
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
1
|
+
# encoding: UTF-8
|
2
|
+
module MongoMapper
|
3
|
+
module Plugins
|
4
|
+
module Dirty
|
5
|
+
module InstanceMethods
|
6
|
+
def method_missing(method, *args, &block)
|
7
|
+
if method.to_s =~ /(_changed\?|_change|_will_change!|_was)$/
|
8
|
+
method_suffix = $1
|
9
|
+
key = method.to_s.gsub(method_suffix, '')
|
10
|
+
|
11
|
+
if key_names.include?(key)
|
12
|
+
case method_suffix
|
13
|
+
when '_changed?'
|
14
|
+
key_changed?(key)
|
15
|
+
when '_change'
|
16
|
+
key_change(key)
|
17
|
+
when '_will_change!'
|
18
|
+
key_will_change!(key)
|
19
|
+
when '_was'
|
20
|
+
key_was(key)
|
21
|
+
end
|
22
|
+
else
|
23
|
+
super
|
24
|
+
end
|
25
|
+
else
|
26
|
+
super
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def changed?
|
31
|
+
!changed_keys.empty?
|
32
|
+
end
|
33
|
+
|
34
|
+
def changed
|
35
|
+
changed_keys.keys
|
36
|
+
end
|
37
|
+
|
38
|
+
def changes
|
39
|
+
changed.inject({}) { |h, key| h[key] = key_change(key); h }
|
40
|
+
end
|
41
|
+
|
42
|
+
def initialize(*args)
|
43
|
+
super
|
44
|
+
changed_keys.clear if args.first.blank? || !new?
|
45
|
+
end
|
46
|
+
|
47
|
+
def save(*args)
|
48
|
+
if status = super
|
49
|
+
changed_keys.clear
|
50
|
+
end
|
51
|
+
status
|
52
|
+
end
|
53
|
+
|
54
|
+
def save!(*args)
|
55
|
+
status = super
|
56
|
+
changed_keys.clear
|
57
|
+
status
|
58
|
+
end
|
59
|
+
|
60
|
+
def reload(*args)
|
61
|
+
document = super
|
62
|
+
changed_keys.clear
|
63
|
+
document
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
def clone_key_value(key)
|
68
|
+
value = read_key(key)
|
69
|
+
value.duplicable? ? value.clone : value
|
70
|
+
rescue TypeError, NoMethodError
|
71
|
+
value
|
72
|
+
end
|
73
|
+
|
74
|
+
def changed_keys
|
75
|
+
@changed_keys ||= {}
|
76
|
+
end
|
77
|
+
|
78
|
+
def key_changed?(key)
|
79
|
+
changed_keys.include?(key)
|
80
|
+
end
|
81
|
+
|
82
|
+
def key_change(key)
|
83
|
+
[changed_keys[key], __send__(key)] if key_changed?(key)
|
84
|
+
end
|
85
|
+
|
86
|
+
def key_was(key)
|
87
|
+
key_changed?(key) ? changed_keys[key] : __send__(key)
|
88
|
+
end
|
89
|
+
|
90
|
+
def key_will_change!(key)
|
91
|
+
changed_keys[key] = clone_key_value(key)
|
92
|
+
end
|
93
|
+
|
94
|
+
def write_key(key, value)
|
95
|
+
key = key.to_s
|
96
|
+
|
97
|
+
if changed_keys.include?(key)
|
98
|
+
old = changed_keys[key]
|
99
|
+
changed_keys.delete(key) unless value_changed?(key, old, value)
|
100
|
+
else
|
101
|
+
old = clone_key_value(key)
|
102
|
+
changed_keys[key] = old if value_changed?(key, old, value)
|
103
|
+
end
|
104
|
+
|
105
|
+
super(key, value)
|
106
|
+
end
|
107
|
+
|
108
|
+
def value_changed?(key_name, old, value)
|
109
|
+
key = keys[key_name]
|
110
|
+
|
111
|
+
if key.number? && value.blank?
|
112
|
+
value = nil
|
113
|
+
end
|
114
|
+
|
115
|
+
old != value
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
120
|
end
|
@@ -1,24 +1,24 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
module MongoMapper
|
3
|
-
module Plugins
|
4
|
-
module Equality
|
5
|
-
module InstanceMethods
|
6
|
-
def ==(other)
|
7
|
-
other.is_a?(self.class) && _id == other._id
|
8
|
-
end
|
9
|
-
|
10
|
-
def eql?(other)
|
11
|
-
self == other
|
12
|
-
end
|
13
|
-
|
14
|
-
def equal?(other)
|
15
|
-
object_id === other.object_id
|
16
|
-
end
|
17
|
-
|
18
|
-
def hash
|
19
|
-
_id.hash
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
1
|
+
# encoding: UTF-8
|
2
|
+
module MongoMapper
|
3
|
+
module Plugins
|
4
|
+
module Equality
|
5
|
+
module InstanceMethods
|
6
|
+
def ==(other)
|
7
|
+
other.is_a?(self.class) && _id == other._id
|
8
|
+
end
|
9
|
+
|
10
|
+
def eql?(other)
|
11
|
+
self == other
|
12
|
+
end
|
13
|
+
|
14
|
+
def equal?(other)
|
15
|
+
object_id === other.object_id
|
16
|
+
end
|
17
|
+
|
18
|
+
def hash
|
19
|
+
_id.hash
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
24
|
end
|
@@ -1,124 +1,124 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
module MongoMapper
|
3
|
-
module Plugins
|
4
|
-
module IdentityMap
|
5
|
-
def self.models
|
6
|
-
@models ||= Set.new
|
7
|
-
end
|
8
|
-
|
9
|
-
def self.clear
|
10
|
-
models.each { |m| m.identity_map.clear }
|
11
|
-
end
|
12
|
-
|
13
|
-
def self.configure(model)
|
14
|
-
IdentityMap.models << model
|
15
|
-
end
|
16
|
-
|
17
|
-
module ClassMethods
|
18
|
-
def inherited(descendant)
|
19
|
-
descendant.identity_map = identity_map
|
20
|
-
super
|
21
|
-
end
|
22
|
-
|
23
|
-
def identity_map
|
24
|
-
@identity_map ||= {}
|
25
|
-
end
|
26
|
-
|
27
|
-
def identity_map=(v)
|
28
|
-
@identity_map = v
|
29
|
-
end
|
30
|
-
|
31
|
-
def find_one(options={})
|
32
|
-
query = query(options)
|
33
|
-
criteria = query.criteria.to_hash
|
34
|
-
|
35
|
-
if simple_find?(criteria) && identity_map.key?(criteria[:_id])
|
36
|
-
identity_map[criteria[:_id]]
|
37
|
-
else
|
38
|
-
super.tap do |document|
|
39
|
-
remove_documents_from_map(document) if selecting_fields?(query.options)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def find_many(options)
|
45
|
-
super.tap do |documents|
|
46
|
-
remove_documents_from_map(documents) if selecting_fields?(query(options).options)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def load(attrs)
|
51
|
-
return nil if attrs.nil?
|
52
|
-
document = identity_map[attrs['_id']]
|
53
|
-
|
54
|
-
if document.nil? || identity_map_off?
|
55
|
-
document = super
|
56
|
-
identity_map[document._id] = document if identity_map_on?
|
57
|
-
end
|
58
|
-
|
59
|
-
document
|
60
|
-
end
|
61
|
-
|
62
|
-
def identity_map_status
|
63
|
-
defined?(@identity_map_status) ? @identity_map_status : true
|
64
|
-
end
|
65
|
-
|
66
|
-
def identity_map_on
|
67
|
-
@identity_map_status = true
|
68
|
-
end
|
69
|
-
|
70
|
-
def identity_map_off
|
71
|
-
@identity_map_status = false
|
72
|
-
end
|
73
|
-
|
74
|
-
def identity_map_on?
|
75
|
-
identity_map_status
|
76
|
-
end
|
77
|
-
|
78
|
-
def identity_map_off?
|
79
|
-
!identity_map_on?
|
80
|
-
end
|
81
|
-
|
82
|
-
def without_identity_map(&block)
|
83
|
-
identity_map_off
|
84
|
-
yield
|
85
|
-
ensure
|
86
|
-
identity_map_on
|
87
|
-
end
|
88
|
-
|
89
|
-
private
|
90
|
-
def remove_documents_from_map(*documents)
|
91
|
-
documents.flatten.compact.each do |document|
|
92
|
-
identity_map.delete(document._id)
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
def simple_find?(criteria)
|
97
|
-
criteria.keys == [:_id] || criteria.keys.to_set == [:_id, :_type].to_set
|
98
|
-
end
|
99
|
-
|
100
|
-
def selecting_fields?(options)
|
101
|
-
!options[:fields].nil?
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
module InstanceMethods
|
106
|
-
def identity_map
|
107
|
-
self.class.identity_map
|
108
|
-
end
|
109
|
-
|
110
|
-
def save(*args)
|
111
|
-
if result = super
|
112
|
-
identity_map[_id] = self if self.class.identity_map_on?
|
113
|
-
end
|
114
|
-
result
|
115
|
-
end
|
116
|
-
|
117
|
-
def delete
|
118
|
-
identity_map.delete(_id) if self.class.identity_map_on?
|
119
|
-
super
|
120
|
-
end
|
121
|
-
end
|
122
|
-
end
|
123
|
-
end
|
1
|
+
# encoding: UTF-8
|
2
|
+
module MongoMapper
|
3
|
+
module Plugins
|
4
|
+
module IdentityMap
|
5
|
+
def self.models
|
6
|
+
@models ||= Set.new
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.clear
|
10
|
+
models.each { |m| m.identity_map.clear }
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.configure(model)
|
14
|
+
IdentityMap.models << model
|
15
|
+
end
|
16
|
+
|
17
|
+
module ClassMethods
|
18
|
+
def inherited(descendant)
|
19
|
+
descendant.identity_map = identity_map
|
20
|
+
super
|
21
|
+
end
|
22
|
+
|
23
|
+
def identity_map
|
24
|
+
@identity_map ||= {}
|
25
|
+
end
|
26
|
+
|
27
|
+
def identity_map=(v)
|
28
|
+
@identity_map = v
|
29
|
+
end
|
30
|
+
|
31
|
+
def find_one(options={})
|
32
|
+
query = query(options)
|
33
|
+
criteria = query.criteria.to_hash
|
34
|
+
|
35
|
+
if simple_find?(criteria) && identity_map.key?(criteria[:_id])
|
36
|
+
identity_map[criteria[:_id]]
|
37
|
+
else
|
38
|
+
super.tap do |document|
|
39
|
+
remove_documents_from_map(document) if selecting_fields?(query.options)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def find_many(options)
|
45
|
+
super.tap do |documents|
|
46
|
+
remove_documents_from_map(documents) if selecting_fields?(query(options).options)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def load(attrs)
|
51
|
+
return nil if attrs.nil?
|
52
|
+
document = identity_map[attrs['_id']]
|
53
|
+
|
54
|
+
if document.nil? || identity_map_off?
|
55
|
+
document = super
|
56
|
+
identity_map[document._id] = document if identity_map_on?
|
57
|
+
end
|
58
|
+
|
59
|
+
document
|
60
|
+
end
|
61
|
+
|
62
|
+
def identity_map_status
|
63
|
+
defined?(@identity_map_status) ? @identity_map_status : true
|
64
|
+
end
|
65
|
+
|
66
|
+
def identity_map_on
|
67
|
+
@identity_map_status = true
|
68
|
+
end
|
69
|
+
|
70
|
+
def identity_map_off
|
71
|
+
@identity_map_status = false
|
72
|
+
end
|
73
|
+
|
74
|
+
def identity_map_on?
|
75
|
+
identity_map_status
|
76
|
+
end
|
77
|
+
|
78
|
+
def identity_map_off?
|
79
|
+
!identity_map_on?
|
80
|
+
end
|
81
|
+
|
82
|
+
def without_identity_map(&block)
|
83
|
+
identity_map_off
|
84
|
+
yield
|
85
|
+
ensure
|
86
|
+
identity_map_on
|
87
|
+
end
|
88
|
+
|
89
|
+
private
|
90
|
+
def remove_documents_from_map(*documents)
|
91
|
+
documents.flatten.compact.each do |document|
|
92
|
+
identity_map.delete(document._id)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def simple_find?(criteria)
|
97
|
+
criteria.keys == [:_id] || criteria.keys.to_set == [:_id, :_type].to_set
|
98
|
+
end
|
99
|
+
|
100
|
+
def selecting_fields?(options)
|
101
|
+
!options[:fields].nil?
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
module InstanceMethods
|
106
|
+
def identity_map
|
107
|
+
self.class.identity_map
|
108
|
+
end
|
109
|
+
|
110
|
+
def save(*args)
|
111
|
+
if result = super
|
112
|
+
identity_map[_id] = self if self.class.identity_map_on?
|
113
|
+
end
|
114
|
+
result
|
115
|
+
end
|
116
|
+
|
117
|
+
def delete
|
118
|
+
identity_map.delete(_id) if self.class.identity_map_on?
|
119
|
+
super
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
124
|
end
|