kamikakushi 0.0.4 → 0.0.5
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/lib/kamikakushi.rb +3 -39
- data/lib/kamikakushi/active_record/base.rb +6 -0
- data/lib/kamikakushi/kamikakushi.rb +51 -0
- data/lib/kamikakushi/kaonashi.rb +50 -0
- data/lib/kamikakushi/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe1f9c0b54645b29b9914c3ecb90d7344fbbf7a9
|
4
|
+
data.tar.gz: a1525f1eabbfa2628a22ec705140bf49203cfa57
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6d078eeef09c06e42e45ef9047722c30c126b4c7c834c31a0b5d3ee0fda9b5337746d9beb401505b00987a17e12530395c3a738de12f36b31c89b38b3343bf9c
|
7
|
+
data.tar.gz: 945f0fd48cb350473bb37ae02cb26ec58605b2a6b36f6b591c8ef4baeb90fdf90770cc6ef651645218ac08a221fb1d28f958fce0f4d212eb5deea7988eae3c14
|
data/lib/kamikakushi.rb
CHANGED
@@ -1,39 +1,3 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
included do
|
5
|
-
default_scope { without_deleted }
|
6
|
-
alias_method_chain :destroy, :kamikakushi
|
7
|
-
alias_method_chain :destroyed?, :kamikakushi
|
8
|
-
|
9
|
-
scope :with_deleted, -> {
|
10
|
-
unscope(where: :deleted_at)
|
11
|
-
}
|
12
|
-
|
13
|
-
scope :without_deleted, -> {
|
14
|
-
where(deleted_at: nil)
|
15
|
-
}
|
16
|
-
|
17
|
-
scope :only_deleted, -> {
|
18
|
-
with_deleted.where.not(deleted_at: nil)
|
19
|
-
}
|
20
|
-
end
|
21
|
-
|
22
|
-
def destroy_with_kamikakushi
|
23
|
-
run_callbacks(:destroy) do
|
24
|
-
update_column(:deleted_at, Time.current)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def destroyed_with_kamikakushi?
|
29
|
-
self.deleted_at? || destroyed_without_kamikakushi?
|
30
|
-
end
|
31
|
-
|
32
|
-
def restore
|
33
|
-
update_column(:deleted_at, self.deleted_at = nil)
|
34
|
-
end
|
35
|
-
|
36
|
-
def purge
|
37
|
-
destroy_without_kamikakushi
|
38
|
-
end
|
39
|
-
end
|
1
|
+
require 'kamikakushi/kamikakushi'
|
2
|
+
require 'kamikakushi/kaonashi'
|
3
|
+
require 'kamikakushi/active_record/base'
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Kamikakushi
|
2
|
+
module Kamikakushi
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
end
|
7
|
+
|
8
|
+
module ClassMethods
|
9
|
+
def kamikakushi
|
10
|
+
class_eval do
|
11
|
+
include InstanceMethods
|
12
|
+
default_scope { without_deleted }
|
13
|
+
alias_method_chain :destroy, :kamikakushi
|
14
|
+
alias_method_chain :destroyed?, :kamikakushi
|
15
|
+
|
16
|
+
scope :with_deleted, -> {
|
17
|
+
unscope(where: :deleted_at)
|
18
|
+
}
|
19
|
+
|
20
|
+
scope :without_deleted, -> {
|
21
|
+
where(deleted_at: nil)
|
22
|
+
}
|
23
|
+
|
24
|
+
scope :only_deleted, -> {
|
25
|
+
with_deleted.where.not(deleted_at: nil)
|
26
|
+
}
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
module InstanceMethods
|
32
|
+
def destroy_with_kamikakushi
|
33
|
+
run_callbacks(:destroy) do
|
34
|
+
touch(:deleted_at)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def destroyed_with_kamikakushi?
|
39
|
+
self.deleted_at? || destroyed_without_kamikakushi?
|
40
|
+
end
|
41
|
+
|
42
|
+
def restore
|
43
|
+
update_column(:deleted_at, self.deleted_at = nil)
|
44
|
+
end
|
45
|
+
|
46
|
+
def purge
|
47
|
+
destroy_without_kamikakushi
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Kamikakushi
|
2
|
+
module Kaonashi
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
module ClassMethods
|
6
|
+
def kaonashi(options = {})
|
7
|
+
define_singleton_method(:dependent_parent_name) { options[:parent] }
|
8
|
+
return unless dependent_parent_name
|
9
|
+
|
10
|
+
class_eval do
|
11
|
+
include InstanceMethods
|
12
|
+
default_scope { without_deleted }
|
13
|
+
alias_method_chain :destroyed?, :kaonashi
|
14
|
+
|
15
|
+
scope :with_deleted, -> {
|
16
|
+
join_with_dependent_parent(dependent_parent_name, :with_deleted)
|
17
|
+
}
|
18
|
+
|
19
|
+
scope :without_deleted, -> {
|
20
|
+
join_with_dependent_parent(dependent_parent_name, :without_deleted)
|
21
|
+
}
|
22
|
+
|
23
|
+
scope :only_deleted, -> {
|
24
|
+
join_with_dependent_parent(dependent_parent_name, :only_deleted)
|
25
|
+
}
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def join_with_dependent_parent(dependent_parent_name, scope_name)
|
32
|
+
association = reflect_on_all_associations.find { |a| a.name == dependent_parent_name }
|
33
|
+
dependent_parent_class = association.klass
|
34
|
+
|
35
|
+
parent_arel = dependent_parent_class.arel_table
|
36
|
+
joins_conditions = arel_table.join(parent_arel)
|
37
|
+
.on(parent_arel[:id].eq arel_table[association.foreign_key])
|
38
|
+
.join_sources
|
39
|
+
joins(joins_conditions).merge(dependent_parent_class.__send__(scope_name))
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
module InstanceMethods
|
44
|
+
def destroyed_with_kaonashi?
|
45
|
+
association = self.class.reflect_on_all_associations.find { |a| a.name == self.class.dependent_parent_name }
|
46
|
+
association.klass.with_deleted.find(__send__(association.foreign_key)).destroyed?
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/lib/kamikakushi/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kamikakushi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ppworks
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-02-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -48,6 +48,9 @@ files:
|
|
48
48
|
- MIT-LICENSE
|
49
49
|
- Rakefile
|
50
50
|
- lib/kamikakushi.rb
|
51
|
+
- lib/kamikakushi/active_record/base.rb
|
52
|
+
- lib/kamikakushi/kamikakushi.rb
|
53
|
+
- lib/kamikakushi/kaonashi.rb
|
51
54
|
- lib/kamikakushi/version.rb
|
52
55
|
homepage: http://ppworks.jp
|
53
56
|
licenses:
|