guard_against_physical_delete 1.0.2 → 2.1.1
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 +5 -5
- data/.github/workflows/master_and_pr.yml +30 -0
- data/.gitignore +0 -1
- data/CHANGELOG.md +44 -0
- data/README.md +50 -0
- data/bin/setup +8 -0
- data/bin/test +8 -0
- data/gemfiles/Gemfile_rails_5.0.rb +6 -0
- data/gemfiles/Gemfile_rails_5.0.rb.lock +75 -0
- data/gemfiles/Gemfile_rails_5.1.rb +5 -0
- data/gemfiles/Gemfile_rails_5.1.rb.lock +75 -0
- data/gemfiles/Gemfile_rails_5.2.rb +5 -0
- data/gemfiles/Gemfile_rails_5.2.rb.lock +75 -0
- data/gemfiles/Gemfile_rails_6.0.rb +5 -0
- data/gemfiles/Gemfile_rails_6.0.rb.lock +75 -0
- data/gemfiles/Gemfile_rails_6.1.rb +5 -0
- data/gemfiles/Gemfile_rails_6.1.rb.lock +74 -0
- data/guard_against_physical_delete.gemspec +12 -11
- data/lib/guard_against_physical_delete/base.rb +11 -1
- data/lib/guard_against_physical_delete/relation.rb +9 -8
- data/lib/guard_against_physical_delete/support_counter_cache/associations/builder/belongs_to.rb +41 -30
- data/lib/guard_against_physical_delete/support_counter_cache.rb +1 -12
- data/lib/guard_against_physical_delete/version.rb +3 -0
- data/lib/guard_against_physical_delete.rb +2 -2
- metadata +46 -42
- data/.travis.yml +0 -7
- data/Gemfile +0 -3
- data/README.rdoc +0 -17
- data/lib/guard_against_physical_delete/support_counter_cache/3.0.10/associations.rb +0 -43
- data/lib/guard_against_physical_delete/support_counter_cache/3.2_and_4.0/associations/builder/belongs_to.rb +0 -50
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: bf3003e9c60b6e19e0f13de9cfca5c1ccf85f8a5c33cbfb327bc60ead38c9332
|
4
|
+
data.tar.gz: 89f4cd9c51bb7bff0712215b6a5b503d7148b982694708a7a274423e59134a1b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 55d3b887dbaf294c6b262620dc24b0d7be5cf147798ad8899137121b6cce1fdb547569acfdd1cec363a3879b3dd5758396533cf8db2bc361fcdabe7492e1b2ae
|
7
|
+
data.tar.gz: b8e1c3941e184465eec596f0da8e8a662135c462bf5e42b66fbb4e5c1d52261407cb71b1433a4cd935efe8cc6ed78db826d23c61137092f2e981d91347246a4e
|
@@ -0,0 +1,30 @@
|
|
1
|
+
name: master & PR
|
2
|
+
|
3
|
+
on:
|
4
|
+
pull_request:
|
5
|
+
push:
|
6
|
+
branches:
|
7
|
+
- master
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
spec:
|
11
|
+
runs-on: ubuntu-latest
|
12
|
+
strategy:
|
13
|
+
matrix:
|
14
|
+
rails_version:
|
15
|
+
- "5.0"
|
16
|
+
- "5.1"
|
17
|
+
- "5.2"
|
18
|
+
- "6.0"
|
19
|
+
- "6.1"
|
20
|
+
name: Test on Rails ${{ matrix.rails_version }}
|
21
|
+
env:
|
22
|
+
BUNDLE_GEMFILE: gemfiles/Gemfile_rails_${{ matrix.rails_version }}.rb
|
23
|
+
steps:
|
24
|
+
- uses: actions/checkout@v2
|
25
|
+
- uses: ruby/setup-ruby@v1
|
26
|
+
with:
|
27
|
+
ruby-version: 2.7
|
28
|
+
bundler-cache: true
|
29
|
+
- name: rspec
|
30
|
+
run: bundle exec rspec
|
data/.gitignore
CHANGED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
## Unreleased
|
4
|
+
|
5
|
+
## 2.1.1 - 2022-05-26
|
6
|
+
|
7
|
+
### Added
|
8
|
+
|
9
|
+
- Support activerecord 6.1.
|
10
|
+
|
11
|
+
## 2.1.0 - 2021-12-02
|
12
|
+
|
13
|
+
### Added
|
14
|
+
|
15
|
+
- Support activerecord 6.0.
|
16
|
+
|
17
|
+
### Fixed
|
18
|
+
|
19
|
+
- Fix bug that it doesn't guard `#destroy` on activerecord 5.2.
|
20
|
+
|
21
|
+
## 2.0.0 - 2021-08-04
|
22
|
+
|
23
|
+
### Added
|
24
|
+
|
25
|
+
- Support activerecord 5.
|
26
|
+
|
27
|
+
### Removed
|
28
|
+
|
29
|
+
- Drop support for ruby < 2.0.
|
30
|
+
- Drop support for activerecord < 5.
|
31
|
+
|
32
|
+
## 1.0.2 - 2017-03-16
|
33
|
+
|
34
|
+
## 1.0.1 - 2017-03-09
|
35
|
+
|
36
|
+
### Fixed
|
37
|
+
|
38
|
+
- Fix files in gemspec.
|
39
|
+
|
40
|
+
## 1.0.0 - 2017-03-09
|
41
|
+
|
42
|
+
### Added
|
43
|
+
|
44
|
+
- Initial release.
|
data/README.md
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
# guard_against_physical_delete
|
2
|
+
|
3
|
+
[](https://rubygems.org/gems/guard_against_physical_delete)
|
4
|
+
|
5
|
+
A monkey patch for ActiveRecord to prevent physical deletion.
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Add this line to your Rails application's Gemfile:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
gem 'guard_against_physical_delete'
|
13
|
+
```
|
14
|
+
|
15
|
+
And then execute:
|
16
|
+
|
17
|
+
```shell
|
18
|
+
bundle install
|
19
|
+
```
|
20
|
+
|
21
|
+
## Usage
|
22
|
+
|
23
|
+
If there is a record with a column named `deleted_at`,
|
24
|
+
an exception is automatically raised on the methods that are likely to perform physical deletion.
|
25
|
+
|
26
|
+
```ruby
|
27
|
+
# This will raise `GuardAgainstPhysicalDelete::PhysicalDeleteError`.
|
28
|
+
user.delete
|
29
|
+
|
30
|
+
# To allow phsycal deletion, do it in `physical_delete { ... }` block.
|
31
|
+
user.class.physical_delete do
|
32
|
+
user.delete
|
33
|
+
end
|
34
|
+
```
|
35
|
+
|
36
|
+
### Configuration
|
37
|
+
|
38
|
+
If you want to use a column name other than `deleted_at`,
|
39
|
+
you can change it as follows:
|
40
|
+
|
41
|
+
```ruby
|
42
|
+
class User < ApplicationRecord
|
43
|
+
self.logical_delete_column = :removed_at
|
44
|
+
end
|
45
|
+
```
|
46
|
+
|
47
|
+
## License
|
48
|
+
|
49
|
+
This gem is available as open source under the terms of the MIT License.
|
50
|
+
See [License.txt](/License.txt) for more details.
|
data/bin/setup
ADDED
data/bin/test
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
PATH
|
2
|
+
remote: ..
|
3
|
+
specs:
|
4
|
+
guard_against_physical_delete (2.1.0)
|
5
|
+
activerecord (>= 5, < 6.2)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
activemodel (5.0.7.2)
|
11
|
+
activesupport (= 5.0.7.2)
|
12
|
+
activerecord (5.0.7.2)
|
13
|
+
activemodel (= 5.0.7.2)
|
14
|
+
activesupport (= 5.0.7.2)
|
15
|
+
arel (~> 7.0)
|
16
|
+
activesupport (5.0.7.2)
|
17
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
18
|
+
i18n (>= 0.7, < 2)
|
19
|
+
minitest (~> 5.1)
|
20
|
+
tzinfo (~> 1.1)
|
21
|
+
arel (7.1.4)
|
22
|
+
concurrent-ruby (1.1.9)
|
23
|
+
countdownlatch (1.0.0)
|
24
|
+
database_cleaner (2.0.1)
|
25
|
+
database_cleaner-active_record (~> 2.0.0)
|
26
|
+
database_cleaner-active_record (2.0.1)
|
27
|
+
activerecord (>= 5.a)
|
28
|
+
database_cleaner-core (~> 2.0.0)
|
29
|
+
database_cleaner-core (2.0.1)
|
30
|
+
diff-lcs (1.4.4)
|
31
|
+
docile (1.4.0)
|
32
|
+
i18n (1.8.11)
|
33
|
+
concurrent-ruby (~> 1.0)
|
34
|
+
minitest (5.14.4)
|
35
|
+
rake (13.0.6)
|
36
|
+
rspec (3.10.0)
|
37
|
+
rspec-core (~> 3.10.0)
|
38
|
+
rspec-expectations (~> 3.10.0)
|
39
|
+
rspec-mocks (~> 3.10.0)
|
40
|
+
rspec-core (3.10.1)
|
41
|
+
rspec-support (~> 3.10.0)
|
42
|
+
rspec-expectations (3.10.1)
|
43
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
44
|
+
rspec-support (~> 3.10.0)
|
45
|
+
rspec-mocks (3.10.2)
|
46
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
47
|
+
rspec-support (~> 3.10.0)
|
48
|
+
rspec-support (3.10.3)
|
49
|
+
simplecov (0.21.2)
|
50
|
+
docile (~> 1.1)
|
51
|
+
simplecov-html (~> 0.11)
|
52
|
+
simplecov_json_formatter (~> 0.1)
|
53
|
+
simplecov-html (0.12.3)
|
54
|
+
simplecov_json_formatter (0.1.3)
|
55
|
+
sqlite3 (1.3.13)
|
56
|
+
thread_safe (0.3.6)
|
57
|
+
tzinfo (1.2.9)
|
58
|
+
thread_safe (~> 0.1)
|
59
|
+
|
60
|
+
PLATFORMS
|
61
|
+
x86_64-linux
|
62
|
+
|
63
|
+
DEPENDENCIES
|
64
|
+
activerecord (~> 5.0.0)
|
65
|
+
bundler
|
66
|
+
countdownlatch
|
67
|
+
database_cleaner
|
68
|
+
guard_against_physical_delete!
|
69
|
+
rake (~> 13)
|
70
|
+
rspec (~> 3)
|
71
|
+
simplecov
|
72
|
+
sqlite3 (~> 1.3.0)
|
73
|
+
|
74
|
+
BUNDLED WITH
|
75
|
+
2.2.29
|
@@ -0,0 +1,75 @@
|
|
1
|
+
PATH
|
2
|
+
remote: ..
|
3
|
+
specs:
|
4
|
+
guard_against_physical_delete (2.1.0)
|
5
|
+
activerecord (>= 5, < 6.2)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
activemodel (5.1.7)
|
11
|
+
activesupport (= 5.1.7)
|
12
|
+
activerecord (5.1.7)
|
13
|
+
activemodel (= 5.1.7)
|
14
|
+
activesupport (= 5.1.7)
|
15
|
+
arel (~> 8.0)
|
16
|
+
activesupport (5.1.7)
|
17
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
18
|
+
i18n (>= 0.7, < 2)
|
19
|
+
minitest (~> 5.1)
|
20
|
+
tzinfo (~> 1.1)
|
21
|
+
arel (8.0.0)
|
22
|
+
concurrent-ruby (1.1.9)
|
23
|
+
countdownlatch (1.0.0)
|
24
|
+
database_cleaner (2.0.1)
|
25
|
+
database_cleaner-active_record (~> 2.0.0)
|
26
|
+
database_cleaner-active_record (2.0.1)
|
27
|
+
activerecord (>= 5.a)
|
28
|
+
database_cleaner-core (~> 2.0.0)
|
29
|
+
database_cleaner-core (2.0.1)
|
30
|
+
diff-lcs (1.4.4)
|
31
|
+
docile (1.4.0)
|
32
|
+
i18n (1.8.11)
|
33
|
+
concurrent-ruby (~> 1.0)
|
34
|
+
minitest (5.14.4)
|
35
|
+
rake (13.0.6)
|
36
|
+
rspec (3.10.0)
|
37
|
+
rspec-core (~> 3.10.0)
|
38
|
+
rspec-expectations (~> 3.10.0)
|
39
|
+
rspec-mocks (~> 3.10.0)
|
40
|
+
rspec-core (3.10.1)
|
41
|
+
rspec-support (~> 3.10.0)
|
42
|
+
rspec-expectations (3.10.1)
|
43
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
44
|
+
rspec-support (~> 3.10.0)
|
45
|
+
rspec-mocks (3.10.2)
|
46
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
47
|
+
rspec-support (~> 3.10.0)
|
48
|
+
rspec-support (3.10.3)
|
49
|
+
simplecov (0.21.2)
|
50
|
+
docile (~> 1.1)
|
51
|
+
simplecov-html (~> 0.11)
|
52
|
+
simplecov_json_formatter (~> 0.1)
|
53
|
+
simplecov-html (0.12.3)
|
54
|
+
simplecov_json_formatter (0.1.3)
|
55
|
+
sqlite3 (1.4.2)
|
56
|
+
thread_safe (0.3.6)
|
57
|
+
tzinfo (1.2.9)
|
58
|
+
thread_safe (~> 0.1)
|
59
|
+
|
60
|
+
PLATFORMS
|
61
|
+
x86_64-linux
|
62
|
+
|
63
|
+
DEPENDENCIES
|
64
|
+
activerecord (~> 5.1.0)
|
65
|
+
bundler
|
66
|
+
countdownlatch
|
67
|
+
database_cleaner
|
68
|
+
guard_against_physical_delete!
|
69
|
+
rake (~> 13)
|
70
|
+
rspec (~> 3)
|
71
|
+
simplecov
|
72
|
+
sqlite3 (~> 1.4)
|
73
|
+
|
74
|
+
BUNDLED WITH
|
75
|
+
2.2.29
|
@@ -0,0 +1,75 @@
|
|
1
|
+
PATH
|
2
|
+
remote: ..
|
3
|
+
specs:
|
4
|
+
guard_against_physical_delete (2.1.0)
|
5
|
+
activerecord (>= 5, < 6.2)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
activemodel (5.2.6)
|
11
|
+
activesupport (= 5.2.6)
|
12
|
+
activerecord (5.2.6)
|
13
|
+
activemodel (= 5.2.6)
|
14
|
+
activesupport (= 5.2.6)
|
15
|
+
arel (>= 9.0)
|
16
|
+
activesupport (5.2.6)
|
17
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
18
|
+
i18n (>= 0.7, < 2)
|
19
|
+
minitest (~> 5.1)
|
20
|
+
tzinfo (~> 1.1)
|
21
|
+
arel (9.0.0)
|
22
|
+
concurrent-ruby (1.1.9)
|
23
|
+
countdownlatch (1.0.0)
|
24
|
+
database_cleaner (2.0.1)
|
25
|
+
database_cleaner-active_record (~> 2.0.0)
|
26
|
+
database_cleaner-active_record (2.0.1)
|
27
|
+
activerecord (>= 5.a)
|
28
|
+
database_cleaner-core (~> 2.0.0)
|
29
|
+
database_cleaner-core (2.0.1)
|
30
|
+
diff-lcs (1.4.4)
|
31
|
+
docile (1.4.0)
|
32
|
+
i18n (1.8.11)
|
33
|
+
concurrent-ruby (~> 1.0)
|
34
|
+
minitest (5.14.4)
|
35
|
+
rake (13.0.6)
|
36
|
+
rspec (3.10.0)
|
37
|
+
rspec-core (~> 3.10.0)
|
38
|
+
rspec-expectations (~> 3.10.0)
|
39
|
+
rspec-mocks (~> 3.10.0)
|
40
|
+
rspec-core (3.10.1)
|
41
|
+
rspec-support (~> 3.10.0)
|
42
|
+
rspec-expectations (3.10.1)
|
43
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
44
|
+
rspec-support (~> 3.10.0)
|
45
|
+
rspec-mocks (3.10.2)
|
46
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
47
|
+
rspec-support (~> 3.10.0)
|
48
|
+
rspec-support (3.10.3)
|
49
|
+
simplecov (0.21.2)
|
50
|
+
docile (~> 1.1)
|
51
|
+
simplecov-html (~> 0.11)
|
52
|
+
simplecov_json_formatter (~> 0.1)
|
53
|
+
simplecov-html (0.12.3)
|
54
|
+
simplecov_json_formatter (0.1.3)
|
55
|
+
sqlite3 (1.4.2)
|
56
|
+
thread_safe (0.3.6)
|
57
|
+
tzinfo (1.2.9)
|
58
|
+
thread_safe (~> 0.1)
|
59
|
+
|
60
|
+
PLATFORMS
|
61
|
+
x86_64-linux
|
62
|
+
|
63
|
+
DEPENDENCIES
|
64
|
+
activerecord (~> 5.2.0)
|
65
|
+
bundler
|
66
|
+
countdownlatch
|
67
|
+
database_cleaner
|
68
|
+
guard_against_physical_delete!
|
69
|
+
rake (~> 13)
|
70
|
+
rspec (~> 3)
|
71
|
+
simplecov
|
72
|
+
sqlite3 (~> 1.4)
|
73
|
+
|
74
|
+
BUNDLED WITH
|
75
|
+
2.2.29
|
@@ -0,0 +1,75 @@
|
|
1
|
+
PATH
|
2
|
+
remote: ..
|
3
|
+
specs:
|
4
|
+
guard_against_physical_delete (2.1.0)
|
5
|
+
activerecord (>= 5, < 6.2)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
activemodel (6.0.4.1)
|
11
|
+
activesupport (= 6.0.4.1)
|
12
|
+
activerecord (6.0.4.1)
|
13
|
+
activemodel (= 6.0.4.1)
|
14
|
+
activesupport (= 6.0.4.1)
|
15
|
+
activesupport (6.0.4.1)
|
16
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
17
|
+
i18n (>= 0.7, < 2)
|
18
|
+
minitest (~> 5.1)
|
19
|
+
tzinfo (~> 1.1)
|
20
|
+
zeitwerk (~> 2.2, >= 2.2.2)
|
21
|
+
concurrent-ruby (1.1.9)
|
22
|
+
countdownlatch (1.0.0)
|
23
|
+
database_cleaner (2.0.1)
|
24
|
+
database_cleaner-active_record (~> 2.0.0)
|
25
|
+
database_cleaner-active_record (2.0.1)
|
26
|
+
activerecord (>= 5.a)
|
27
|
+
database_cleaner-core (~> 2.0.0)
|
28
|
+
database_cleaner-core (2.0.1)
|
29
|
+
diff-lcs (1.4.4)
|
30
|
+
docile (1.4.0)
|
31
|
+
i18n (1.8.11)
|
32
|
+
concurrent-ruby (~> 1.0)
|
33
|
+
minitest (5.14.4)
|
34
|
+
rake (13.0.6)
|
35
|
+
rspec (3.10.0)
|
36
|
+
rspec-core (~> 3.10.0)
|
37
|
+
rspec-expectations (~> 3.10.0)
|
38
|
+
rspec-mocks (~> 3.10.0)
|
39
|
+
rspec-core (3.10.1)
|
40
|
+
rspec-support (~> 3.10.0)
|
41
|
+
rspec-expectations (3.10.1)
|
42
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
43
|
+
rspec-support (~> 3.10.0)
|
44
|
+
rspec-mocks (3.10.2)
|
45
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
46
|
+
rspec-support (~> 3.10.0)
|
47
|
+
rspec-support (3.10.3)
|
48
|
+
simplecov (0.21.2)
|
49
|
+
docile (~> 1.1)
|
50
|
+
simplecov-html (~> 0.11)
|
51
|
+
simplecov_json_formatter (~> 0.1)
|
52
|
+
simplecov-html (0.12.3)
|
53
|
+
simplecov_json_formatter (0.1.3)
|
54
|
+
sqlite3 (1.4.2)
|
55
|
+
thread_safe (0.3.6)
|
56
|
+
tzinfo (1.2.9)
|
57
|
+
thread_safe (~> 0.1)
|
58
|
+
zeitwerk (2.5.1)
|
59
|
+
|
60
|
+
PLATFORMS
|
61
|
+
x86_64-linux
|
62
|
+
|
63
|
+
DEPENDENCIES
|
64
|
+
activerecord (~> 6.0.0)
|
65
|
+
bundler
|
66
|
+
countdownlatch
|
67
|
+
database_cleaner
|
68
|
+
guard_against_physical_delete!
|
69
|
+
rake (~> 13)
|
70
|
+
rspec (~> 3)
|
71
|
+
simplecov
|
72
|
+
sqlite3 (~> 1.4)
|
73
|
+
|
74
|
+
BUNDLED WITH
|
75
|
+
2.2.29
|
@@ -0,0 +1,74 @@
|
|
1
|
+
PATH
|
2
|
+
remote: ..
|
3
|
+
specs:
|
4
|
+
guard_against_physical_delete (2.1.0)
|
5
|
+
activerecord (>= 5, < 6.2)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
activemodel (6.1.4.1)
|
11
|
+
activesupport (= 6.1.4.1)
|
12
|
+
activerecord (6.1.4.1)
|
13
|
+
activemodel (= 6.1.4.1)
|
14
|
+
activesupport (= 6.1.4.1)
|
15
|
+
activesupport (6.1.4.1)
|
16
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
17
|
+
i18n (>= 1.6, < 2)
|
18
|
+
minitest (>= 5.1)
|
19
|
+
tzinfo (~> 2.0)
|
20
|
+
zeitwerk (~> 2.3)
|
21
|
+
concurrent-ruby (1.1.9)
|
22
|
+
countdownlatch (1.0.0)
|
23
|
+
database_cleaner (2.0.1)
|
24
|
+
database_cleaner-active_record (~> 2.0.0)
|
25
|
+
database_cleaner-active_record (2.0.1)
|
26
|
+
activerecord (>= 5.a)
|
27
|
+
database_cleaner-core (~> 2.0.0)
|
28
|
+
database_cleaner-core (2.0.1)
|
29
|
+
diff-lcs (1.4.4)
|
30
|
+
docile (1.4.0)
|
31
|
+
i18n (1.8.11)
|
32
|
+
concurrent-ruby (~> 1.0)
|
33
|
+
minitest (5.14.4)
|
34
|
+
rake (13.0.6)
|
35
|
+
rspec (3.10.0)
|
36
|
+
rspec-core (~> 3.10.0)
|
37
|
+
rspec-expectations (~> 3.10.0)
|
38
|
+
rspec-mocks (~> 3.10.0)
|
39
|
+
rspec-core (3.10.1)
|
40
|
+
rspec-support (~> 3.10.0)
|
41
|
+
rspec-expectations (3.10.1)
|
42
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
43
|
+
rspec-support (~> 3.10.0)
|
44
|
+
rspec-mocks (3.10.2)
|
45
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
46
|
+
rspec-support (~> 3.10.0)
|
47
|
+
rspec-support (3.10.3)
|
48
|
+
simplecov (0.21.2)
|
49
|
+
docile (~> 1.1)
|
50
|
+
simplecov-html (~> 0.11)
|
51
|
+
simplecov_json_formatter (~> 0.1)
|
52
|
+
simplecov-html (0.12.3)
|
53
|
+
simplecov_json_formatter (0.1.3)
|
54
|
+
sqlite3 (1.4.2)
|
55
|
+
tzinfo (2.0.4)
|
56
|
+
concurrent-ruby (~> 1.0)
|
57
|
+
zeitwerk (2.5.1)
|
58
|
+
|
59
|
+
PLATFORMS
|
60
|
+
x86_64-linux
|
61
|
+
|
62
|
+
DEPENDENCIES
|
63
|
+
activerecord (~> 6.1.0)
|
64
|
+
bundler
|
65
|
+
countdownlatch
|
66
|
+
database_cleaner
|
67
|
+
guard_against_physical_delete!
|
68
|
+
rake (~> 13)
|
69
|
+
rspec (~> 3)
|
70
|
+
simplecov
|
71
|
+
sqlite3 (~> 1.4)
|
72
|
+
|
73
|
+
BUNDLED WITH
|
74
|
+
2.2.29
|
@@ -1,28 +1,29 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
|
3
|
+
require_relative "lib/guard_against_physical_delete/version"
|
4
|
+
|
3
5
|
Gem::Specification.new do |s|
|
4
6
|
s.name = "guard_against_physical_delete"
|
5
|
-
s.version =
|
7
|
+
s.version = GuardAgainstPhysicalDelete::VERSION
|
6
8
|
|
7
9
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
10
|
s.authors = ["MORITA shingo"]
|
9
11
|
s.date = "2012-03-06"
|
10
|
-
s.description = "Guard against physical delete"
|
11
12
|
s.email = "morita@cookpad.com"
|
12
|
-
s.extra_rdoc_files = [
|
13
|
-
"README.rdoc"
|
14
|
-
]
|
15
13
|
s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^spec/}) }
|
16
14
|
s.homepage = "http://github.com/cookpad/guard_against_physical_delete"
|
17
15
|
s.require_paths = ["lib"]
|
18
16
|
s.rubygems_version = "1.8.15"
|
19
|
-
s.summary = "
|
17
|
+
s.summary = "A monkey patch for ActiveRecord to prevent physical deletion."
|
18
|
+
|
19
|
+
s.metadata["changelog_uri"] = "#{s.homepage}/blob/master/CHANGELOG.md"
|
20
|
+
s.metadata["homepage_uri"] = s.homepage
|
21
|
+
s.metadata["source_code_uri"] = s.homepage
|
20
22
|
|
21
|
-
s.add_runtime_dependency "activerecord", ">=
|
22
|
-
s.add_development_dependency "rake", "
|
23
|
-
s.add_development_dependency "rspec", "
|
24
|
-
s.add_development_dependency "sqlite3"
|
25
|
-
s.add_development_dependency "rdoc", "~> 3.12"
|
23
|
+
s.add_runtime_dependency "activerecord", ">= 5", "< 6.2"
|
24
|
+
s.add_development_dependency "rake", "~> 13"
|
25
|
+
s.add_development_dependency "rspec", "~> 3"
|
26
|
+
s.add_development_dependency "sqlite3", "~> 1.4"
|
26
27
|
s.add_development_dependency "bundler"
|
27
28
|
s.add_development_dependency "database_cleaner"
|
28
29
|
s.add_development_dependency "simplecov"
|
@@ -36,7 +36,7 @@ module GuardAgainstPhysicalDelete
|
|
36
36
|
private
|
37
37
|
|
38
38
|
THREAD_LOCAL_KEY = :__GuardAgainstPhysicalDelete__thread_local_permission__
|
39
|
-
private_constant :THREAD_LOCAL_KEY
|
39
|
+
private_constant :THREAD_LOCAL_KEY
|
40
40
|
|
41
41
|
def physical_delete_permission
|
42
42
|
Thread.current[THREAD_LOCAL_KEY] ||= Hash.new { |h,k| h[k] = 0 }
|
@@ -44,6 +44,16 @@ module GuardAgainstPhysicalDelete
|
|
44
44
|
end
|
45
45
|
|
46
46
|
module InstanceMethods
|
47
|
+
if ::ActiveRecord.version >= ::Gem::Version.new('5.2')
|
48
|
+
def _delete_row
|
49
|
+
unless self.class.delete_permitted?
|
50
|
+
raise ::GuardAgainstPhysicalDelete::PhysicalDeleteError, self.class.name
|
51
|
+
end
|
52
|
+
|
53
|
+
super
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
47
57
|
def hard_delete
|
48
58
|
self.class.physical_delete { destroy }
|
49
59
|
end
|
@@ -1,15 +1,16 @@
|
|
1
1
|
module GuardAgainstPhysicalDelete
|
2
2
|
module Relation
|
3
|
-
def self.included(
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
3
|
+
def self.included(base)
|
4
|
+
base.prepend MethodOverrides
|
5
|
+
end
|
6
|
+
|
7
|
+
module MethodOverrides
|
8
|
+
def delete_all
|
9
|
+
unless klass.delete_permitted?
|
10
|
+
raise GuardAgainstPhysicalDelete::PhysicalDeleteError, klass.name
|
10
11
|
end
|
11
12
|
|
12
|
-
|
13
|
+
super
|
13
14
|
end
|
14
15
|
end
|
15
16
|
end
|
data/lib/guard_against_physical_delete/support_counter_cache/associations/builder/belongs_to.rb
CHANGED
@@ -5,51 +5,62 @@ module GuardAgainstPhysicalDelete
|
|
5
5
|
module BelongsTo
|
6
6
|
def self.included(obj)
|
7
7
|
class << obj
|
8
|
+
prepend MethodOverrides
|
9
|
+
|
8
10
|
private
|
9
|
-
def add_counter_cache_methods_with_logical_delete(mixin)
|
10
|
-
add_counter_cache_methods_without_logical_delete mixin
|
11
|
-
add_logical_delete_counter_cache_methods(mixin)
|
12
|
-
end
|
13
|
-
alias_method_chain :add_counter_cache_methods, :logical_delete
|
14
11
|
|
15
12
|
def add_logical_delete_counter_cache_methods(mixin)
|
16
13
|
mixin.class_eval do
|
17
|
-
def
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
14
|
+
def adjust_counter_caches_for_logical_deletion(reflection)
|
15
|
+
if attribute_before_last_save(logical_delete_column).nil? && read_attribute(logical_delete_column)
|
16
|
+
reflection.klass.decrement_counter(
|
17
|
+
reflection.counter_cache_column,
|
18
|
+
attribute_before_last_save(reflection.foreign_key)
|
19
|
+
)
|
20
|
+
elsif attribute_before_last_save(logical_delete_column) && read_attribute(logical_delete_column).nil?
|
21
|
+
reflection.klass.increment_counter(
|
22
|
+
reflection.counter_cache_column,
|
23
|
+
attribute_before_last_save(reflection.foreign_key)
|
24
|
+
)
|
25
|
+
end
|
25
26
|
end
|
26
27
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
return
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
28
|
+
# Polyfill for Rails < 5.1, not that it's perfectly compatible.
|
29
|
+
if ActiveRecord.version < Gem::Version.new('5.1.0')
|
30
|
+
# @param [#to_s] attr_name
|
31
|
+
# @return [Object]
|
32
|
+
def attribute_before_last_save(attr_name)
|
33
|
+
__send__("#{attr_name}_was")
|
34
|
+
end
|
35
|
+
|
36
|
+
# @param [#to_s] attr_name
|
37
|
+
# @return [Boolean]
|
38
|
+
def saved_change_to_attribute?(attr_name)
|
39
|
+
__send__("#{attr_name}_changed?")
|
40
|
+
end
|
35
41
|
end
|
36
42
|
end
|
43
|
+
|
37
44
|
mixin.redefine_method("belongs_to_counter_cache_after_update_for_#{name}") do
|
38
45
|
# do nothing
|
39
46
|
end if mixin.method_defined?("belongs_to_counter_cache_after_update_for_#{name}")
|
40
47
|
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
41
51
|
|
42
|
-
|
43
|
-
|
52
|
+
module MethodOverrides
|
53
|
+
private
|
44
54
|
|
45
|
-
|
55
|
+
def add_counter_cache_callbacks(model, reflection)
|
56
|
+
super(model, reflection)
|
46
57
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
58
|
+
return unless model.logical_delete?
|
59
|
+
|
60
|
+
add_logical_delete_counter_cache_methods(model)
|
61
|
+
|
62
|
+
model.after_update -> record do
|
63
|
+
record.adjust_counter_caches_for_logical_deletion(reflection)
|
53
64
|
end
|
54
65
|
end
|
55
66
|
end
|
@@ -1,12 +1 @@
|
|
1
|
-
|
2
|
-
require 'guard_against_physical_delete/support_counter_cache/associations/builder/belongs_to'
|
3
|
-
ActiveRecord::Associations::Builder::BelongsTo.send(:include, GuardAgainstPhysicalDelete::SupportCounterCache::Associations::Builder::BelongsTo)
|
4
|
-
elsif ActiveRecord::VERSION::STRING >= "3.2"
|
5
|
-
require 'guard_against_physical_delete/support_counter_cache/3.2_and_4.0/associations/builder/belongs_to'
|
6
|
-
ActiveRecord::Associations::Builder::BelongsTo.send(:include, GuardAgainstPhysicalDelete::SupportCounterCache::Associations::Builder::BelongsTo)
|
7
|
-
elsif ActiveRecord::VERSION::STRING == "3.0.10"
|
8
|
-
require 'guard_against_physical_delete/support_counter_cache/3.0.10/associations'
|
9
|
-
ActiveRecord::Base.send(:include, GuardAgainstPhysicalDelete::SupportCounterCache::Associations)
|
10
|
-
else
|
11
|
-
raise "guard_against_physical_delete doesn't support ActiveRecord version #{ActiveRecord::VERSION::STRING}"
|
12
|
-
end
|
1
|
+
require 'guard_against_physical_delete/support_counter_cache/associations/builder/belongs_to'
|
@@ -2,10 +2,10 @@ require 'active_record'
|
|
2
2
|
require 'guard_against_physical_delete/physical_delete_error'
|
3
3
|
require 'guard_against_physical_delete/relation'
|
4
4
|
require 'guard_against_physical_delete/base'
|
5
|
+
require 'guard_against_physical_delete/support_counter_cache'
|
5
6
|
|
6
7
|
ActiveSupport.on_load :active_record do
|
7
8
|
ActiveRecord::Base.send(:include, GuardAgainstPhysicalDelete::Base)
|
8
9
|
ActiveRecord::Relation.send(:include, GuardAgainstPhysicalDelete::Relation)
|
9
|
-
|
10
|
-
require 'guard_against_physical_delete/support_counter_cache'
|
10
|
+
ActiveRecord::Associations::Builder::BelongsTo.send(:include, GuardAgainstPhysicalDelete::SupportCounterCache::Associations::Builder::BelongsTo)
|
11
11
|
end
|
metadata
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: guard_against_physical_delete
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 2.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- MORITA shingo
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
date: 2012-03-06 00:00:00.000000000 Z
|
@@ -16,70 +16,62 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: '5'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '6.2'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
27
|
- - ">="
|
25
28
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
29
|
+
version: '5'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '6.2'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: rake
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
30
36
|
requirements:
|
31
|
-
- - "
|
37
|
+
- - "~>"
|
32
38
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
39
|
+
version: '13'
|
34
40
|
type: :development
|
35
41
|
prerelease: false
|
36
42
|
version_requirements: !ruby/object:Gem::Requirement
|
37
43
|
requirements:
|
38
|
-
- - "
|
44
|
+
- - "~>"
|
39
45
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
46
|
+
version: '13'
|
41
47
|
- !ruby/object:Gem::Dependency
|
42
48
|
name: rspec
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
44
50
|
requirements:
|
45
|
-
- - "
|
51
|
+
- - "~>"
|
46
52
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
53
|
+
version: '3'
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
51
57
|
requirements:
|
52
|
-
- - "
|
58
|
+
- - "~>"
|
53
59
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
60
|
+
version: '3'
|
55
61
|
- !ruby/object:Gem::Dependency
|
56
62
|
name: sqlite3
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - ">="
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: rdoc
|
71
63
|
requirement: !ruby/object:Gem::Requirement
|
72
64
|
requirements:
|
73
65
|
- - "~>"
|
74
66
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
67
|
+
version: '1.4'
|
76
68
|
type: :development
|
77
69
|
prerelease: false
|
78
70
|
version_requirements: !ruby/object:Gem::Requirement
|
79
71
|
requirements:
|
80
72
|
- - "~>"
|
81
73
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
74
|
+
version: '1.4'
|
83
75
|
- !ruby/object:Gem::Dependency
|
84
76
|
name: bundler
|
85
77
|
requirement: !ruby/object:Gem::Requirement
|
@@ -136,32 +128,45 @@ dependencies:
|
|
136
128
|
- - ">="
|
137
129
|
- !ruby/object:Gem::Version
|
138
130
|
version: '0'
|
139
|
-
description:
|
131
|
+
description:
|
140
132
|
email: morita@cookpad.com
|
141
133
|
executables: []
|
142
134
|
extensions: []
|
143
|
-
extra_rdoc_files:
|
144
|
-
- README.rdoc
|
135
|
+
extra_rdoc_files: []
|
145
136
|
files:
|
137
|
+
- ".github/workflows/master_and_pr.yml"
|
146
138
|
- ".gitignore"
|
147
|
-
-
|
148
|
-
- Gemfile
|
139
|
+
- CHANGELOG.md
|
149
140
|
- License.txt
|
150
|
-
- README.
|
141
|
+
- README.md
|
151
142
|
- Rakefile
|
143
|
+
- bin/setup
|
144
|
+
- bin/test
|
145
|
+
- gemfiles/Gemfile_rails_5.0.rb
|
146
|
+
- gemfiles/Gemfile_rails_5.0.rb.lock
|
147
|
+
- gemfiles/Gemfile_rails_5.1.rb
|
148
|
+
- gemfiles/Gemfile_rails_5.1.rb.lock
|
149
|
+
- gemfiles/Gemfile_rails_5.2.rb
|
150
|
+
- gemfiles/Gemfile_rails_5.2.rb.lock
|
151
|
+
- gemfiles/Gemfile_rails_6.0.rb
|
152
|
+
- gemfiles/Gemfile_rails_6.0.rb.lock
|
153
|
+
- gemfiles/Gemfile_rails_6.1.rb
|
154
|
+
- gemfiles/Gemfile_rails_6.1.rb.lock
|
152
155
|
- guard_against_physical_delete.gemspec
|
153
156
|
- lib/guard_against_physical_delete.rb
|
154
157
|
- lib/guard_against_physical_delete/base.rb
|
155
158
|
- lib/guard_against_physical_delete/physical_delete_error.rb
|
156
159
|
- lib/guard_against_physical_delete/relation.rb
|
157
160
|
- lib/guard_against_physical_delete/support_counter_cache.rb
|
158
|
-
- lib/guard_against_physical_delete/support_counter_cache/3.0.10/associations.rb
|
159
|
-
- lib/guard_against_physical_delete/support_counter_cache/3.2_and_4.0/associations/builder/belongs_to.rb
|
160
161
|
- lib/guard_against_physical_delete/support_counter_cache/associations/builder/belongs_to.rb
|
162
|
+
- lib/guard_against_physical_delete/version.rb
|
161
163
|
homepage: http://github.com/cookpad/guard_against_physical_delete
|
162
164
|
licenses: []
|
163
|
-
metadata:
|
164
|
-
|
165
|
+
metadata:
|
166
|
+
changelog_uri: http://github.com/cookpad/guard_against_physical_delete/blob/master/CHANGELOG.md
|
167
|
+
homepage_uri: http://github.com/cookpad/guard_against_physical_delete
|
168
|
+
source_code_uri: http://github.com/cookpad/guard_against_physical_delete
|
169
|
+
post_install_message:
|
165
170
|
rdoc_options: []
|
166
171
|
require_paths:
|
167
172
|
- lib
|
@@ -176,9 +181,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
176
181
|
- !ruby/object:Gem::Version
|
177
182
|
version: '0'
|
178
183
|
requirements: []
|
179
|
-
|
180
|
-
|
181
|
-
signing_key:
|
184
|
+
rubygems_version: 3.3.7
|
185
|
+
signing_key:
|
182
186
|
specification_version: 4
|
183
|
-
summary:
|
187
|
+
summary: A monkey patch for ActiveRecord to prevent physical deletion.
|
184
188
|
test_files: []
|
data/.travis.yml
DELETED
data/Gemfile
DELETED
data/README.rdoc
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
= guard_against_physical_delete
|
2
|
-
|
3
|
-
guard_against_physical_delete is monkey patch for ActiveRecord.
|
4
|
-
This patch prevent deleting record physically.
|
5
|
-
set logical delete column name. (default is :deleted_at)
|
6
|
-
Logical.logical_delete_column = :removed_at
|
7
|
-
Logical.first.delete #=> raise GuardAgainstPhysicalDelete::PhysicalDeleteError
|
8
|
-
Logical.physical_delete { Logical.first.delete } #=> allow physical_delete
|
9
|
-
|
10
|
-
== Support
|
11
|
-
active_record 3.0.10, >= 3.2
|
12
|
-
|
13
|
-
== Copyright
|
14
|
-
|
15
|
-
Copyright (c) 2012 morita shingo. See License.txt for
|
16
|
-
further details.
|
17
|
-
|
@@ -1,43 +0,0 @@
|
|
1
|
-
module GuardAgainstPhysicalDelete
|
2
|
-
module SupportCounterCache
|
3
|
-
module Associations
|
4
|
-
def self.included(obj)
|
5
|
-
class << obj
|
6
|
-
def add_counter_cache_callbacks_with_logical_delete(reflection)
|
7
|
-
add_counter_cache_callbacks_without_logical_delete(reflection)
|
8
|
-
return unless logical_delete?
|
9
|
-
add_logical_delete_counter_cache_callback(reflection)
|
10
|
-
end
|
11
|
-
alias_method_chain :add_counter_cache_callbacks, :logical_delete
|
12
|
-
|
13
|
-
def add_logical_delete_counter_cache_callback(reflection)
|
14
|
-
cache_column = reflection.counter_cache_column
|
15
|
-
|
16
|
-
logical_delete_method_name = "belongs_to_counter_cache_before_logical_delete_for_#{reflection.name}".to_sym
|
17
|
-
define_method(logical_delete_method_name) do
|
18
|
-
delete_column = self.logical_delete_column
|
19
|
-
next unless send("#{delete_column}_changed?")
|
20
|
-
next unless send("#{delete_column}_was").nil?
|
21
|
-
association = send(reflection.name)
|
22
|
-
association.class.decrement_counter(cache_column, association.id) unless association.nil?
|
23
|
-
end
|
24
|
-
|
25
|
-
revive_method_name = "belongs_to_counter_cache_before_revive_for_#{reflection.name}".to_sym
|
26
|
-
define_method(revive_method_name) do
|
27
|
-
delete_column = self.logical_delete_column
|
28
|
-
next unless send("#{delete_column}_changed?")
|
29
|
-
next if send("#{delete_column}_was").nil?
|
30
|
-
next unless send(delete_column).nil?
|
31
|
-
|
32
|
-
clear_association_cache
|
33
|
-
association = send(reflection.name)
|
34
|
-
association.class.increment_counter(cache_column, association.id) unless association.nil?
|
35
|
-
end
|
36
|
-
|
37
|
-
before_update(logical_delete_method_name, revive_method_name)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
@@ -1,50 +0,0 @@
|
|
1
|
-
module GuardAgainstPhysicalDelete
|
2
|
-
module SupportCounterCache
|
3
|
-
module Associations
|
4
|
-
module Builder
|
5
|
-
module BelongsTo
|
6
|
-
def self.included(obj)
|
7
|
-
obj.class_eval do
|
8
|
-
def add_counter_cache_callbacks_with_logical_delete(reflection)
|
9
|
-
add_counter_cache_callbacks_without_logical_delete(reflection)
|
10
|
-
return unless model.logical_delete?
|
11
|
-
add_logical_delete_counter_cache_callback(reflection)
|
12
|
-
end
|
13
|
-
alias_method_chain :add_counter_cache_callbacks, :logical_delete
|
14
|
-
|
15
|
-
def add_logical_delete_counter_cache_callback(reflection)
|
16
|
-
cache_column = reflection.counter_cache_column
|
17
|
-
name = self.name
|
18
|
-
|
19
|
-
logical_delete_method_name = "belongs_to_counter_cache_after_logical_delete_for_#{name}".to_sym
|
20
|
-
mixin.redefine_method(logical_delete_method_name) do
|
21
|
-
delete_column = self.logical_delete_column
|
22
|
-
next unless send("#{delete_column}_changed?")
|
23
|
-
next unless send("#{delete_column}_was").nil?
|
24
|
-
record = send(name)
|
25
|
-
record.class.decrement_counter(cache_column, record.id) unless record.nil?
|
26
|
-
end
|
27
|
-
|
28
|
-
mixin.redefine_method("belongs_to_counter_cache_after_update_for_#{name}") do
|
29
|
-
# do nothing
|
30
|
-
end if mixin.method_defined?("belongs_to_counter_cache_after_update_for_#{name}")
|
31
|
-
|
32
|
-
revive_method_name = "belongs_to_counter_cache_after_revive_for_#{name}".to_sym
|
33
|
-
|
34
|
-
mixin.redefine_method(revive_method_name) do
|
35
|
-
delete_column = self.logical_delete_column
|
36
|
-
next unless send("#{delete_column}_changed?")
|
37
|
-
next if send("#{delete_column}_was").nil?
|
38
|
-
next unless send(delete_column).nil?
|
39
|
-
record = send(name)
|
40
|
-
record.class.increment_counter(cache_column, record.id) unless record.nil?
|
41
|
-
end
|
42
|
-
model.after_update(logical_delete_method_name, revive_method_name)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|