kakurenbo-puti 0.0.3 → 0.1.0
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.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/README.md +1 -0
- data/lib/kakurenbo_puti/active_record_base.rb +17 -3
- data/lib/kakurenbo_puti/version.rb +1 -1
- data/spec/kakurenbo_puti/active_record_base_spec.rb +40 -0
- data/spec/kakurenbo_puti/situations/deep_nest_spec.rb +123 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5a7a55e62643987f839573cbee301f3114176a2a
|
4
|
+
data.tar.gz: 440591cbabb762607202703a66c82b6d8c912b02
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ff003f0b53797305c1f7b78df14ca3ce00fef049ddb1fa1030b7927230ce2699546c59122f6e080291d1bd5ef7e68bdf68701c372bc11873db7d8cb385c338cb
|
7
|
+
data.tar.gz: 5481b3aa1fa467ffd822703f62c3d49a232949194bd69462ff14a552528c083bd775ac2ff455cb81430b5f0c19c0c93fc37f299b69e9e48e466c0d61586c2d1a
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -12,6 +12,7 @@ module KakurenboPuti
|
|
12
12
|
Initializers.create_scopes self, dependent_associations
|
13
13
|
|
14
14
|
include InstanceMethods
|
15
|
+
extend ClassMethods
|
15
16
|
end
|
16
17
|
|
17
18
|
module Initializers
|
@@ -40,14 +41,17 @@ module KakurenboPuti
|
|
40
41
|
def self.create_scopes(target_class, dependent_associations)
|
41
42
|
target_class.class_eval do
|
42
43
|
scope :only_soft_destroyed, -> { where.not(id: without_soft_destroyed.select(:id)) }
|
44
|
+
|
43
45
|
scope :without_soft_destroyed, (lambda do
|
44
46
|
dependent_associations.inject(where(soft_delete_column => nil)) do |relation, name|
|
45
47
|
association = relation.klass.reflect_on_all_associations.find{|a| a.name == name }
|
48
|
+
raise 'dependent association is usable only in `belongs_to`.' unless association.belongs_to?
|
49
|
+
|
50
|
+
parent_relation = association.klass.all
|
46
51
|
if association.klass.method_defined?(:soft_delete_column)
|
47
|
-
|
48
|
-
else
|
49
|
-
relation.joins(name).references(name)
|
52
|
+
parent_relation = parent_relation.without_soft_destroyed
|
50
53
|
end
|
54
|
+
relation.where(association.foreign_key => parent_relation.select(:id))
|
51
55
|
end
|
52
56
|
end)
|
53
57
|
end
|
@@ -89,5 +93,15 @@ module KakurenboPuti
|
|
89
93
|
self.class.only_soft_destroyed.where(id: id).exists?
|
90
94
|
end
|
91
95
|
end
|
96
|
+
|
97
|
+
module ClassMethods
|
98
|
+
def soft_destroy_all(conditions = nil)
|
99
|
+
if conditions
|
100
|
+
where(conditions).soft_destroy_all
|
101
|
+
else
|
102
|
+
all.each {|object| object.soft_destroy }
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
92
106
|
end
|
93
107
|
end
|
@@ -19,6 +19,7 @@ describe KakurenboPuti::ActiveRecordBase do
|
|
19
19
|
SoftDeleteModel.tap do |klass|
|
20
20
|
klass.class_eval do
|
21
21
|
soft_deletable options_cache
|
22
|
+
has_many :soft_delete_children
|
22
23
|
|
23
24
|
before_soft_destroy :cb_mock
|
24
25
|
after_soft_destroy :cb_mock
|
@@ -147,6 +148,16 @@ describe KakurenboPuti::ActiveRecordBase do
|
|
147
148
|
child_class.without_soft_destroyed
|
148
149
|
end
|
149
150
|
|
151
|
+
context 'When dependent association use in `has_many`' do
|
152
|
+
let :model_class_options do
|
153
|
+
{dependent_associations: [:soft_delete_children]}
|
154
|
+
end
|
155
|
+
|
156
|
+
it 'raise error' do
|
157
|
+
expect { subject }.to raise_error
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
150
161
|
context 'When soft-deleted' do
|
151
162
|
it 'Return a relation without soft-deleted model.' do
|
152
163
|
expect {
|
@@ -327,4 +338,33 @@ describe KakurenboPuti::ActiveRecordBase do
|
|
327
338
|
end
|
328
339
|
end
|
329
340
|
end
|
341
|
+
|
342
|
+
describe '.soft_destroy_all' do
|
343
|
+
subject do
|
344
|
+
model_class.soft_destroy_all
|
345
|
+
end
|
346
|
+
let!(:model_instance) { model_class.create! }
|
347
|
+
|
348
|
+
it 'SoftDelete model' do
|
349
|
+
expect {
|
350
|
+
subject
|
351
|
+
}.to change {
|
352
|
+
model_class.without_soft_destroyed.count
|
353
|
+
}.to(0)
|
354
|
+
end
|
355
|
+
|
356
|
+
context 'with conditions' do
|
357
|
+
subject do
|
358
|
+
model_class.soft_destroy_all(id: model_instance.id)
|
359
|
+
end
|
360
|
+
|
361
|
+
it 'SoftDelete model' do
|
362
|
+
expect {
|
363
|
+
subject
|
364
|
+
}.to change {
|
365
|
+
model_class.without_soft_destroyed.count
|
366
|
+
}.to(0)
|
367
|
+
end
|
368
|
+
end
|
369
|
+
end
|
330
370
|
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe KakurenboPuti::ActiveRecordBase do
|
4
|
+
define_active_record_model :Parent do |t|
|
5
|
+
t.datetime :soft_destroyed_at
|
6
|
+
end
|
7
|
+
|
8
|
+
define_active_record_model :OneChild do |t|
|
9
|
+
t.integer :parent_id
|
10
|
+
t.datetime :soft_destroyed_at
|
11
|
+
end
|
12
|
+
|
13
|
+
define_active_record_model :TwoChild do |t|
|
14
|
+
t.integer :one_child_id
|
15
|
+
t.datetime :soft_destroyed_at
|
16
|
+
end
|
17
|
+
|
18
|
+
define_active_record_model :ThreeChild do |t|
|
19
|
+
t.integer :two_child_id
|
20
|
+
t.datetime :soft_destroyed_at
|
21
|
+
end
|
22
|
+
|
23
|
+
define_active_record_model :FourChild do |t|
|
24
|
+
t.integer :three_child_id
|
25
|
+
t.datetime :soft_destroyed_at
|
26
|
+
end
|
27
|
+
|
28
|
+
define_active_record_model :FiveChild do |t|
|
29
|
+
t.integer :four_child_id
|
30
|
+
t.datetime :soft_destroyed_at
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
let :parent_class do
|
35
|
+
Parent.tap do |klass|
|
36
|
+
klass.class_eval { soft_deletable }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
let :one_child_class do
|
41
|
+
OneChild.tap do |klass|
|
42
|
+
klass.class_eval do
|
43
|
+
soft_deletable dependent_associations: [:parent]
|
44
|
+
belongs_to :parent
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
let :two_child_class do
|
50
|
+
TwoChild.tap do |klass|
|
51
|
+
klass.class_eval do
|
52
|
+
soft_deletable dependent_associations: [:one_child]
|
53
|
+
belongs_to :one_child
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
let :three_child_class do
|
59
|
+
ThreeChild.tap do |klass|
|
60
|
+
klass.class_eval do
|
61
|
+
soft_deletable dependent_associations: [:two_child]
|
62
|
+
belongs_to :two_child
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
let :four_child_class do
|
68
|
+
FourChild.tap do |klass|
|
69
|
+
klass.class_eval do
|
70
|
+
soft_deletable dependent_associations: [:three_child]
|
71
|
+
belongs_to :three_child
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
let :five_child_class do
|
77
|
+
FiveChild.tap do |klass|
|
78
|
+
klass.class_eval do
|
79
|
+
soft_deletable dependent_associations: [:four_child]
|
80
|
+
belongs_to :four_child
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
let :parent do
|
86
|
+
parent_class.create!
|
87
|
+
end
|
88
|
+
|
89
|
+
let :one_child do
|
90
|
+
one_child_class.create!(parent: parent)
|
91
|
+
end
|
92
|
+
|
93
|
+
let :two_child do
|
94
|
+
two_child_class.create!(one_child: one_child)
|
95
|
+
end
|
96
|
+
|
97
|
+
let :three_child do
|
98
|
+
three_child_class.create!(two_child: two_child)
|
99
|
+
end
|
100
|
+
|
101
|
+
let :four_child do
|
102
|
+
four_child_class.create(three_child: three_child)
|
103
|
+
end
|
104
|
+
|
105
|
+
let :five_child do
|
106
|
+
five_child_class.create(four_child: four_child)
|
107
|
+
end
|
108
|
+
|
109
|
+
|
110
|
+
context 'When delete root' do
|
111
|
+
subject do
|
112
|
+
parent.soft_destroy
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'SoftDestroy dependent tail.' do
|
116
|
+
expect {
|
117
|
+
subject
|
118
|
+
}.to change {
|
119
|
+
five_child.soft_destroyed?
|
120
|
+
}.from(false).to(true)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kakurenbo-puti
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- alfa-jpn
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-06-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -132,6 +132,7 @@ files:
|
|
132
132
|
- lib/kakurenbo_puti/active_record_base.rb
|
133
133
|
- lib/kakurenbo_puti/version.rb
|
134
134
|
- spec/kakurenbo_puti/active_record_base_spec.rb
|
135
|
+
- spec/kakurenbo_puti/situations/deep_nest_spec.rb
|
135
136
|
- spec/spec_helper.rb
|
136
137
|
- spec/supports/active_record_model.rb
|
137
138
|
- spec/supports/active_record_model_spec.rb
|
@@ -161,6 +162,7 @@ specification_version: 4
|
|
161
162
|
summary: Lightweight soft-delete gem.
|
162
163
|
test_files:
|
163
164
|
- spec/kakurenbo_puti/active_record_base_spec.rb
|
165
|
+
- spec/kakurenbo_puti/situations/deep_nest_spec.rb
|
164
166
|
- spec/spec_helper.rb
|
165
167
|
- spec/supports/active_record_model.rb
|
166
168
|
- spec/supports/active_record_model_spec.rb
|