soft_deletion 1.2.1 → 1.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 3a883342b62d3d6cac6e36c1f35f35be2afc8ee3
4
- data.tar.gz: 70d6426a71b9cfef3381785825912dcf816c2af3
2
+ SHA256:
3
+ metadata.gz: 33929145814e0bfca2a2ae9fe549f6e333e298ceae93eab756f2590e32ea9879
4
+ data.tar.gz: 32f843e02d0d918e7ad6c15c609babba2832b04e1e8cf4c32d88eb75e5bd489b
5
5
  SHA512:
6
- metadata.gz: 4f102e7785e14d602d78d95f5b380ab5094e5038acf69120974f5d0b827b5112f1fd6595b08324cd7ee5b68310ccd6294b7daaaa6191753948b9efa7f1e16208
7
- data.tar.gz: 191eeb73ace4df8d2e3392b09052a0ce72b5742adfdd6018cd33c5185d754a5bf35e5a511bc6d5d37fb16acff75d4962f1a8efe0c29b07575c5e0086736b1ab1
6
+ metadata.gz: 634ed1c15d3cd31744dbfa75f0df013decb6e1e27157a59224c3ffdf5bfc2f1b75db2643639b92b8099c96dc6e71be98543765e3640e1c933314ad3f59704ced
7
+ data.tar.gz: a02f8debc86470ef9793e833e1900dedd8d3374c10db8b0808ca38abe04a30f0919de5d5b45d5543d0c9d47fa011b7025ab1288e09f74bfe75b104906f0ef4e3
data/Readme.md CHANGED
@@ -26,7 +26,7 @@ end
26
26
  # soft delete them including all soft-deletable dependencies that are marked as :destroy, :delete_all, :nullify
27
27
  user = User.first
28
28
  user.products.count == 10
29
- user.soft_delete!
29
+ user.soft_delete!(validate: false)
30
30
  user.deleted? # true
31
31
 
32
32
  # use special with_deleted scope to find them ...
@@ -53,7 +53,7 @@ module SoftDeletion
53
53
  end
54
54
 
55
55
  models.each do |model|
56
- model.soft_delete_dependencies.each(&:soft_delete!)
56
+ model.soft_delete_dependencies.each { |dep| dep.execute_soft_delete(:soft_delete!, []) }
57
57
  model.run_callbacks :soft_delete
58
58
  end
59
59
  end
@@ -73,11 +73,11 @@ module SoftDeletion
73
73
  end
74
74
 
75
75
  def soft_delete!(*args)
76
- _run_soft_delete { save!(*args) } || soft_delete_hook_failed(:before_soft_delete)
76
+ _run_soft_delete(:soft_delete!, args) { save!(*args) } || soft_delete_hook_failed(:before_soft_delete)
77
77
  end
78
78
 
79
79
  def soft_delete(*args)
80
- _run_soft_delete{ save(*args) }
80
+ _run_soft_delete(:soft_delete, args) { save(*args) }
81
81
  end
82
82
 
83
83
  def soft_undelete
@@ -111,19 +111,21 @@ module SoftDeletion
111
111
  end
112
112
  end
113
113
 
114
- def _run_soft_delete(&block)
114
+ def _run_soft_delete(method, args, &block)
115
115
  result = false
116
- internal = lambda do
117
- mark_as_deleted
118
- soft_delete_dependencies.each(&:soft_delete!)
119
- result = block.call
120
- update_soft_delete_counter_caches(-1)
121
- end
122
-
123
116
  self.class.transaction do
117
+ internal = lambda do
118
+ mark_as_deleted
119
+ raise ActiveRecord::Rollback unless soft_delete_dependencies.all? { |dep| dep.execute_soft_delete(method, args) }
120
+ result = block.call
121
+ raise ActiveRecord::Rollback unless result
122
+ update_soft_delete_counter_caches(-1)
123
+ end
124
+
124
125
  run_callbacks :soft_delete, &internal
125
- end
126
126
 
127
+ result
128
+ end
127
129
  result
128
130
  end
129
131
 
@@ -134,7 +136,7 @@ module SoftDeletion
134
136
  limit = deleted_at - 1.hour
135
137
  internal = lambda do
136
138
  mark_as_undeleted
137
- soft_delete_dependencies.each { |m| m.soft_undelete!(limit)}
139
+ soft_delete_dependencies.each { |m| m.soft_undelete!(limit) }
138
140
  result = block.call
139
141
  update_soft_delete_counter_caches(1)
140
142
  end
@@ -7,14 +7,15 @@ module SoftDeletion
7
7
  @association_name = association_name
8
8
  end
9
9
 
10
- def soft_delete!
10
+ def execute_soft_delete(method, args)
11
11
  case association.options[:dependent]
12
12
  when :nullify
13
13
  nullify_dependencies
14
14
  when :delete_all
15
15
  dependency.update_all(dependency.mark_as_soft_deleted_sql)
16
+ true
16
17
  else
17
- dependencies.each(&:soft_delete!)
18
+ dependencies.all? { |dep| dep.send(method, *args) }
18
19
  end
19
20
  end
20
21
 
@@ -1,3 +1,3 @@
1
1
  module SoftDeletion
2
- VERSION = '1.2.1'
2
+ VERSION = '1.3.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: soft_deletion
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zendesk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-28 00:00:00.000000000 Z
11
+ date: 2018-02-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -174,7 +174,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
174
174
  version: '0'
175
175
  requirements: []
176
176
  rubyforge_project:
177
- rubygems_version: 2.5.1
177
+ rubygems_version: 2.7.4
178
178
  signing_key:
179
179
  specification_version: 4
180
180
  summary: Explicit soft deletion for ActiveRecord via deleted_at and default scope.