mongoid-siblings 0.1.1 → 0.1.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.
- data/lib/mongoid/siblings.rb +36 -31
- metadata +10 -10
data/lib/mongoid/siblings.rb
CHANGED
@@ -13,7 +13,7 @@ module Mongoid
|
|
13
13
|
# @example Retrieve document's siblings
|
14
14
|
# book.siblings
|
15
15
|
#
|
16
|
-
# @see
|
16
|
+
# @see #siblings_and_self
|
17
17
|
def siblings(options = {})
|
18
18
|
self.siblings_and_self(options).excludes(id: self.id)
|
19
19
|
end
|
@@ -164,39 +164,44 @@ module Mongoid
|
|
164
164
|
self.save!
|
165
165
|
end
|
166
166
|
|
167
|
-
|
167
|
+
def intelligent_inverse(name, other = nil)
|
168
|
+
other ||= self.send(name)
|
168
169
|
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
}
|
183
|
-
else
|
184
|
-
inverse = inverses.find { |inverse|
|
185
|
-
other.send(inverse).include?(self)
|
186
|
-
}
|
187
|
-
end
|
188
|
-
|
189
|
-
return nil if inverse.nil?
|
190
|
-
|
191
|
-
other.send(inverse)
|
170
|
+
relation_metadata = self.reflect_on_association(name)
|
171
|
+
return nil if relation_metadata.nil?
|
172
|
+
inverses = relation_metadata.inverses(other)
|
173
|
+
|
174
|
+
return nil if inverses.nil? || inverses.empty?
|
175
|
+
|
176
|
+
if inverses.length == 1
|
177
|
+
inverses.first
|
178
|
+
elsif relation_metadata.polymorphic?
|
179
|
+
inverse_of = send(relation_metadata.inverse_of_field)
|
180
|
+
inverses.find { |inverse| inverse == inverse_of }
|
181
|
+
else
|
182
|
+
inverses.find { |inverse| other.send(inverse).include?(self) }
|
192
183
|
end
|
184
|
+
end
|
193
185
|
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
186
|
+
def intelligent_inverse_metadata(name, other = nil)
|
187
|
+
other ||= self.send(name)
|
188
|
+
|
189
|
+
other.reflect_on_association(self.intelligent_inverse(name, other))
|
190
|
+
end
|
191
|
+
|
192
|
+
def siblings_through_relation(name, other = nil)
|
193
|
+
inverse = self.intelligent_inverse(name, other)
|
194
|
+
return nil if inverse.nil?
|
195
|
+
|
196
|
+
other.send(inverse)
|
197
|
+
end
|
198
|
+
|
199
|
+
def base_document_class(doc = self)
|
200
|
+
base_document_klass = doc.class
|
201
|
+
while base_document_klass.superclass.include?(Mongoid::Document)
|
202
|
+
base_document_klass = base_document_klass.superclass
|
200
203
|
end
|
204
|
+
base_document_klass
|
205
|
+
end
|
201
206
|
end
|
202
207
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid-siblings
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-08-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mongoid
|
16
|
-
requirement: &
|
16
|
+
requirement: &70307288030900 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '3.0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70307288030900
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rake
|
27
|
-
requirement: &
|
27
|
+
requirement: &70307288030500 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70307288030500
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec
|
38
|
-
requirement: &
|
38
|
+
requirement: &70307288030040 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70307288030040
|
47
47
|
description: mongoid-siblings adds methods to enable you to easily access your Mongoid
|
48
48
|
document's siblings.
|
49
49
|
email: douwe@selenight.nl
|
@@ -74,7 +74,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
74
74
|
version: '0'
|
75
75
|
segments:
|
76
76
|
- 0
|
77
|
-
hash:
|
77
|
+
hash: 1581517259103189055
|
78
78
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
79
|
none: false
|
80
80
|
requirements:
|
@@ -83,7 +83,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
83
83
|
version: '0'
|
84
84
|
segments:
|
85
85
|
- 0
|
86
|
-
hash:
|
86
|
+
hash: 1581517259103189055
|
87
87
|
requirements: []
|
88
88
|
rubyforge_project:
|
89
89
|
rubygems_version: 1.8.6
|