soft_deleter 0.1.0 → 0.2.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 +4 -4
- data/README.md +97 -5
- data/lib/soft_deleter/version.rb +1 -1
- data/lib/soft_deleter.rb +30 -0
- metadata +2 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3bf0adcc2f508e278c3297a8bb985e92713c1b834a2f456c97115eebb0fe564a
|
4
|
+
data.tar.gz: ff5ede62ab6f8259d0ac1cd23fdb7e6238b340944041b177b9f6557bd2bdd64c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 52b7566201dd79a969e4810a89041fda50d8c963c7e4d1208c7568c05adf9f8be21247cf8e331bccf0f45eb9946c8262b76744e8e652d7d18992240834272f48
|
7
|
+
data.tar.gz: d95528228aeb88ae76e460ad26cd111f5e401bcfa361ae03995f1c3654d6d389dd8bec4e227e2b0173f76e18408369ad942ed009303b34c4b99be4fb371ad556
|
data/README.md
CHANGED
@@ -1,8 +1,5 @@
|
|
1
1
|
# SoftDeleter
|
2
|
-
|
3
|
-
|
4
|
-
## Usage
|
5
|
-
How to use my plugin.
|
2
|
+
soft delete Rails plugin.
|
6
3
|
|
7
4
|
## Installation
|
8
5
|
Add this line to your application's Gemfile:
|
@@ -17,10 +14,105 @@ $ bundle
|
|
17
14
|
```
|
18
15
|
|
19
16
|
Or install it yourself as:
|
20
|
-
```
|
17
|
+
```
|
21
18
|
$ gem install soft_deleter
|
22
19
|
```
|
23
20
|
|
21
|
+
## Usage
|
22
|
+
### Introduce
|
23
|
+
Soft delete model User.
|
24
|
+
```
|
25
|
+
bundle exec rails g soft_deleter user
|
26
|
+
```
|
27
|
+
It creates migration file to create user with attributes which is needed to introduce soft delete.<br/>
|
28
|
+
Add some attributes to migration file, like name, email, age, ...etc.<br />
|
29
|
+
And excute `bundle exec rails db:migrate`. That's all.<br />
|
30
|
+
<br />
|
31
|
+
Or if you already have User model, and you want introduce soft delete in it,
|
32
|
+
create migration file and add lines like bellow
|
33
|
+
```ruby
|
34
|
+
class AddSoftDeleterAttributesToUsers < ActiveRecord::Migration[7.0]
|
35
|
+
def change
|
36
|
+
add_column :users, :deleter_type, :string
|
37
|
+
add_column :users, :deleter_id, :integer
|
38
|
+
add_column :users, :deleted_at, :timestamp
|
39
|
+
end
|
40
|
+
end
|
41
|
+
```
|
42
|
+
and excute `bundle exec rails db:migrate`<br />
|
43
|
+
Here, `deleter_type` and `deleter_id`, these are the infomations who soft delete.<br />
|
44
|
+
Like `current_admin`, when admin which is "Admin" class does soft delete user record, admin's class name and id can be recorded.
|
45
|
+
<br /><br />
|
46
|
+
And add line to model
|
47
|
+
```ruby
|
48
|
+
class User < ApplicationRecord
|
49
|
+
include SoftDeleter
|
50
|
+
end
|
51
|
+
```
|
52
|
+
This line is added automatically if you use `rails g soft_deleter user` command to make user model.
|
53
|
+
|
54
|
+
### scope
|
55
|
+
When you load users whitout soft deleted records, you need to scope like bellow.
|
56
|
+
```ruby
|
57
|
+
users = User.enabled.all
|
58
|
+
```
|
59
|
+
If you don't use enabled scope, you will load users in all records including soft deleted.<br />
|
60
|
+
Otherwise, if you need to load records with soft deleted, excute like bellow.
|
61
|
+
```ruby
|
62
|
+
deleted_users = User.deleted.all
|
63
|
+
```
|
64
|
+
|
65
|
+
### Soft delete
|
66
|
+
```ruby
|
67
|
+
user = User.enabled.first
|
68
|
+
user.soft_delete # soft delete
|
69
|
+
user.soft_delete! # soft delete or raise if fail to soft delete
|
70
|
+
user.restore # restore soft deleted user
|
71
|
+
```
|
72
|
+
If your app have some models other than user, like `Admin` model,<br />
|
73
|
+
and you need to record to that Admin user did soft delete.<br />
|
74
|
+
Then,
|
75
|
+
```ruby
|
76
|
+
user = User.enabled.first
|
77
|
+
|
78
|
+
admin = Admin.enabled.first # soft deleted by admin user
|
79
|
+
user.soft_delete(admin) # soft delete and set admin to deleter
|
80
|
+
user.soft_delete!(admin) # raise if fail to soft delete
|
81
|
+
|
82
|
+
user.deleter # => <Admin:0x00007f37f96a0c88
|
83
|
+
user.deleter_type # => Admin(id: integer, ...
|
84
|
+
user.deleter_id # => "admin.id" if deleter is not set, "user.id"
|
85
|
+
user.soft_deleted? # => true
|
86
|
+
user.alive? # => false
|
87
|
+
```
|
88
|
+
|
89
|
+
## Associations
|
90
|
+
If associations some models, User, Book, Section.
|
91
|
+
```ruby
|
92
|
+
# User model
|
93
|
+
class User < ApplicationRecord
|
94
|
+
include SoftDeleter
|
95
|
+
has_many :books, dependent: :destroy
|
96
|
+
end
|
97
|
+
|
98
|
+
# Book model
|
99
|
+
class Book < ApplicationRecord
|
100
|
+
include SoftDeleter
|
101
|
+
belongs_to :user
|
102
|
+
has_many :sections, dependent: :destroy
|
103
|
+
end
|
104
|
+
|
105
|
+
# Section model
|
106
|
+
class Section < ApplicationRecord
|
107
|
+
include SoftDeleter
|
108
|
+
belongs_to :book
|
109
|
+
end
|
110
|
+
```
|
111
|
+
So, if you excute `user.soft_delete`, then associations books, and sections are soft deleted.<br />
|
112
|
+
And excute `user.restore`, then associations books, and sections are restored.<br />
|
113
|
+
It works with dependent destroy descriptions. If not, it doesn't work.
|
114
|
+
|
115
|
+
|
24
116
|
## Contributing
|
25
117
|
Contribution directions go here.
|
26
118
|
|
data/lib/soft_deleter/version.rb
CHANGED
data/lib/soft_deleter.rb
CHANGED
@@ -33,6 +33,16 @@ module SoftDeleter
|
|
33
33
|
with_associations(:soft_delete_witout_associations, deleter)
|
34
34
|
end
|
35
35
|
|
36
|
+
true
|
37
|
+
rescue ActiveRecord::RecordInvalid
|
38
|
+
false
|
39
|
+
end
|
40
|
+
|
41
|
+
def restore!
|
42
|
+
ActiveRecord::Base.transaction do
|
43
|
+
with_associations(:restore_without_associations!)
|
44
|
+
end
|
45
|
+
|
36
46
|
true
|
37
47
|
end
|
38
48
|
|
@@ -40,6 +50,10 @@ module SoftDeleter
|
|
40
50
|
ActiveRecord::Base.transaction do
|
41
51
|
with_associations(:restore_without_associations)
|
42
52
|
end
|
53
|
+
|
54
|
+
true
|
55
|
+
rescue ActiveRecord::RecordInvalid
|
56
|
+
false
|
43
57
|
end
|
44
58
|
|
45
59
|
def deleter_type
|
@@ -75,6 +89,8 @@ module SoftDeleter
|
|
75
89
|
private
|
76
90
|
|
77
91
|
def soft_delete_witout_associations!(deleter)
|
92
|
+
raise ActiveRecord::RecordInvalid, self if invalid?
|
93
|
+
|
78
94
|
update!(
|
79
95
|
deleter_type: deleter.class.to_s,
|
80
96
|
deleter_id: deleter.id,
|
@@ -83,6 +99,8 @@ module SoftDeleter
|
|
83
99
|
end
|
84
100
|
|
85
101
|
def soft_delete_witout_associations(deleter)
|
102
|
+
raise ActiveRecord::RecordInvalid if invalid?
|
103
|
+
|
86
104
|
update(
|
87
105
|
deleter_type: deleter.class.to_s,
|
88
106
|
deleter_id: deleter.id,
|
@@ -90,7 +108,19 @@ module SoftDeleter
|
|
90
108
|
)
|
91
109
|
end
|
92
110
|
|
111
|
+
def restore_without_associations!
|
112
|
+
raise ActiveRecord::RecordInvalid, self if invalid?
|
113
|
+
|
114
|
+
update(
|
115
|
+
deleter_type: nil,
|
116
|
+
deleter_id: nil,
|
117
|
+
deleted_at: nil
|
118
|
+
)
|
119
|
+
end
|
120
|
+
|
93
121
|
def restore_without_associations
|
122
|
+
raise ActiveRecord::RecordInvalid if invalid?
|
123
|
+
|
94
124
|
update(
|
95
125
|
deleter_type: nil,
|
96
126
|
deleter_id: nil,
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: soft_deleter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- testCodeV01
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-09-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -24,20 +24,6 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 7.0.7
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: rspec-rails
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
27
|
description: SoftDeleter.
|
42
28
|
email:
|
43
29
|
- qft-tk-1213@tk-labo.com
|