poly_belongs_to 0.2.5 → 0.2.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/poly_belongs_to/core.rb +14 -8
- data/lib/poly_belongs_to/version.rb +1 -1
- data/test/core_test.rb +20 -1
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/test.log +5977 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d945fa7f779711426e5f3f4cf5cea436255a2403
|
4
|
+
data.tar.gz: 2bfbbeec531d122fa8520523b4b9fae25f4e52a3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 49341ba09d46570a56bfce7368927931fe3ab5787a412c1983544f30bcec6b74061f1165f6e3d6641bf783077bd66685de7ef50f9d53e81fed464159bc12deae
|
7
|
+
data.tar.gz: 710b7e8a888401bdf849969e84e9d7570ae88183f716d0428c02ff9d3574a4b0b7b3a07d9e20122b3e60a89dd0da03e84d751e719b66dbd0eb005bf8daf236bf
|
data/lib/poly_belongs_to/core.rb
CHANGED
@@ -5,7 +5,7 @@ module PolyBelongsTo
|
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
|
7
7
|
included do
|
8
|
-
# @return [Symbol] first belongs_to relation
|
8
|
+
# @return [Symbol, nil] first belongs_to relation
|
9
9
|
def self.pbt
|
10
10
|
reflect_on_all_associations(:belongs_to).first.try(:name)
|
11
11
|
end
|
@@ -84,7 +84,7 @@ module PolyBelongsTo
|
|
84
84
|
|
85
85
|
private
|
86
86
|
# Return Array of current Class polymorphic records that are orphaned from parents
|
87
|
-
# @return [Array<Object
|
87
|
+
# @return [Array<Object>] ActiveRecord orphan objects
|
88
88
|
def self._pbt_polymorphic_orphans
|
89
89
|
accumalitive = nil
|
90
90
|
pbt_valid_types.each do |type|
|
@@ -95,7 +95,7 @@ module PolyBelongsTo
|
|
95
95
|
end
|
96
96
|
|
97
97
|
# Return Array of current Class nonpolymorphic records that are orphaned from parents
|
98
|
-
# @return [Array<Object
|
98
|
+
# @return [Array<Object>] ActiveRecord orphan objects
|
99
99
|
def self._pbt_nonpolymorphic_orphans
|
100
100
|
where(["#{pbt_id_sym} NOT IN (?)", pbt.to_s.capitalize.constantize.pluck(:id)])
|
101
101
|
end
|
@@ -105,7 +105,7 @@ module PolyBelongsTo
|
|
105
105
|
end
|
106
106
|
end
|
107
107
|
|
108
|
-
# @return [Symbol] first belongs_to relation
|
108
|
+
# @return [Symbol, nil] first belongs_to relation
|
109
109
|
def pbt
|
110
110
|
self.class.pbt
|
111
111
|
end
|
@@ -135,14 +135,14 @@ module PolyBelongsTo
|
|
135
135
|
end
|
136
136
|
|
137
137
|
# Get the parent relation. Polymorphic relations are prioritized first.
|
138
|
-
# @return [Object] ActiveRecord object instasnce
|
138
|
+
# @return [Object, nil] ActiveRecord object instasnce
|
139
139
|
def pbt_parent
|
140
140
|
val = pbt
|
141
141
|
if val && !pbt_id.nil?
|
142
142
|
if poly?
|
143
|
-
"#{pbt_type}".constantize.
|
143
|
+
"#{pbt_type}".constantize.where(id: pbt_id).first
|
144
144
|
else
|
145
|
-
"#{val.capitalize}".constantize.
|
145
|
+
"#{val.capitalize}".constantize.where(id: pbt_id).first
|
146
146
|
end
|
147
147
|
else
|
148
148
|
nil
|
@@ -151,7 +151,7 @@ module PolyBelongsTo
|
|
151
151
|
|
152
152
|
# Climb up each parent object in the hierarchy until the top is reached.
|
153
153
|
# This has a no-repeat safety built in. Polymorphic parents have priority.
|
154
|
-
# @return [Object] top parent ActiveRecord object instace
|
154
|
+
# @return [Object, nil] top parent ActiveRecord object instace
|
155
155
|
def pbt_top_parent
|
156
156
|
record = self
|
157
157
|
return nil unless record.pbt_parent
|
@@ -193,5 +193,11 @@ module PolyBelongsTo
|
|
193
193
|
def pbt_params_name(allow_as_nested = true)
|
194
194
|
self.class.pbt_params_name(allow_as_nested)
|
195
195
|
end
|
196
|
+
|
197
|
+
# Return true or false on whether the record is orphaned
|
198
|
+
# @return [Boolean
|
199
|
+
def orphan?
|
200
|
+
pbts.present? && !pbt_parent.present?
|
201
|
+
end
|
196
202
|
end
|
197
203
|
end
|
data/test/core_test.rb
CHANGED
@@ -180,8 +180,13 @@ class CoreTest < ActiveSupport::TestCase
|
|
180
180
|
end
|
181
181
|
|
182
182
|
it "#pbt_parent returns nil if no ID is set for parent relationship" do
|
183
|
-
alpha = Alpha.new;
|
183
|
+
alpha = Alpha.new; alpha.save
|
184
|
+
beta = alpha.betas.build; beta.save
|
184
185
|
alpha.pbt_parent.must_be_nil
|
186
|
+
beta.pbt_parent.wont_be_nil
|
187
|
+
beta.pbt_parent.must_equal alpha
|
188
|
+
squishy = Squishy.create(Squishy.pbt_id_sym => 12345, Squishy.pbt_type_sym => "Address")
|
189
|
+
squishy.pbt_parent.must_be_nil
|
185
190
|
end
|
186
191
|
|
187
192
|
it "#pbt_top_parent climbs up belongs_to hierarchy to the top; polymorphic relationships first" do
|
@@ -287,5 +292,19 @@ class CoreTest < ActiveSupport::TestCase
|
|
287
292
|
Squishy.singleton_class.method_defined?(:_pbt_nonpolymorphic_orphans).must_be_same_as false
|
288
293
|
Squishy.method_defined?(:_pbt_nonpolymorphic_orphans).must_be_same_as false
|
289
294
|
end
|
295
|
+
|
296
|
+
it "#orphan? gives boolean if record is orphaned" do
|
297
|
+
Squishy.create(Squishy.pbt_id_sym => 12345, Squishy.pbt_type_sym => "Phone").must_be :orphan?
|
298
|
+
Squishy.create(Squishy.pbt_id_sym => 12345, Squishy.pbt_type_sym => "Address").must_be :orphan?
|
299
|
+
User.create().wont_be :orphan?
|
300
|
+
user = users(:bob)
|
301
|
+
profile = user.profiles.build
|
302
|
+
phone = profile.phones.build
|
303
|
+
profile.save
|
304
|
+
profile.wont_be :orphan?
|
305
|
+
phone.wont_be :orphan?
|
306
|
+
user.wont_be :orphan?
|
307
|
+
Alpha.create.must_be :orphan?
|
308
|
+
end
|
290
309
|
end
|
291
310
|
end
|
data/test/dummy/db/test.sqlite3
CHANGED
Binary file
|