glib-web 0.5.73 → 0.5.75

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2f4ae4213c1c8cd32dd3f1726335e8ad63f878ae480bc83792636f217b88cd5e
4
- data.tar.gz: 8b395ee2a1f16ae8c9c9b0af8ecaf9aca9e03b2c0cb819d8217281229b2cbc56
3
+ metadata.gz: 024cbfd3c136b878553f4f7cbeb484cd3b1591bcda6e77ef4b0c9c8fd9217712
4
+ data.tar.gz: e129fc931a5f85f4870a1e62706589fbd410fef4eb60c46527f335cfe7bc09dd
5
5
  SHA512:
6
- metadata.gz: 8c61abfa42bba5bcbd11d70ac9840b0e6aed1a1dae7b01e480615ff650161e330a4fae35937d7a2f1e9e513126b5f016a5828dfb85e91e362b80b4d7782a78dc
7
- data.tar.gz: 6432a393428e3568832d9c8e7e07ba851ac0326479277bdce8e80c7969f22752e5f7634953349f707dec71b5801cebdc9aa2bb117e9b4eabbccf42b6ba881cbd
6
+ metadata.gz: 68da687986a2806b6ac987beff6fe8aded090ad33b664846b28c40ca061b1f05361ed272483207e04c361af57ff292e1e6a8d473271d1b005f99de77f51616cc
7
+ data.tar.gz: 2fff915aaf95c1d3c2dddf6ddf02492e4a5f936c6ef8c03c702240108acacfe7e2eb872104e242f3c2e88262f4c75ed9b2770f4219ab2e4d05a96aa784174f97
@@ -0,0 +1,68 @@
1
+ module Glib
2
+ module SoftDeletable
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ default_scope { where(deleted_at: nil) }
7
+ scope :with_deleted, -> { unscope(where: :deleted_at) }
8
+
9
+ # "Soft delete" - set deleted_at if it is nil, actually destroy the record
10
+ # if forced.
11
+ #
12
+ # @param force [Boolean]
13
+ def destroy(force = nil)
14
+ return force_destroy_record if force == :force
15
+ return self if deleted?
16
+
17
+ soft_destroy_record
18
+ end
19
+
20
+ # Revive a soft-deleted record and associated records if soft-deleted,
21
+ # otherwise return self
22
+ def revive
23
+ return self unless deleted?
24
+
25
+ ActiveRecord::Base.transaction do
26
+ update(deleted_at: nil)
27
+ revive_associated_records
28
+ end
29
+ end
30
+
31
+ # Whether or not a record is deleted
32
+ def deleted?
33
+ deleted_at.present?
34
+ end
35
+
36
+ private
37
+ def force_destroy_record
38
+ ActiveRecord::Base.transaction do
39
+ destroy_associated_records(:force)
40
+ method(:destroy).super_method.call
41
+ end
42
+ end
43
+
44
+ def soft_destroy_record
45
+ ActiveRecord::Base.transaction do
46
+ destroy_associated_records
47
+ update(deleted_at: Time.zone.now)
48
+ end
49
+ end
50
+
51
+ def destroy_associated_records(force = nil)
52
+ associated_records.each { |r| r.destroy(force) }
53
+ end
54
+
55
+ def revive_associated_records
56
+ associated_records.each(&:revive)
57
+ end
58
+
59
+ # This should return an array of all associated records of an object that
60
+ # should be soft deleted with it (i.e. those that have dependent: :destroy
61
+ # set). In principle we could figure this out automatically but in the
62
+ # interest of simplicity we'll just define it manually for each class.
63
+ def associated_records
64
+ []
65
+ end
66
+ end
67
+ end
68
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glib-web
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.73
4
+ version: 0.5.75
5
5
  platform: ruby
6
6
  authors:
7
7
  - ''
@@ -113,6 +113,7 @@ files:
113
113
  - app/helpers/glib/json_ui/view_builder/fields.rb
114
114
  - app/helpers/glib/json_ui/view_builder/panels.rb
115
115
  - app/helpers/glib/urls_helper.rb
116
+ - app/models/concerns/glib/soft_deletable.rb
116
117
  - app/models/glib/active_storage/attachment.rb
117
118
  - app/models/glib/active_storage/blob.rb
118
119
  - app/models/glib/application_record.rb