active_model_cachers 2.1.2 → 2.1.3
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/CHANGELOG.md +3 -0
- data/lib/active_model_cachers/active_record/extension.rb +14 -0
- data/lib/active_model_cachers/active_record/global_callbacks.rb +59 -0
- data/lib/active_model_cachers/active_record/patch_rails_3.rb +8 -15
- data/lib/active_model_cachers/cache_service.rb +19 -14
- data/lib/active_model_cachers/hook/associations.rb +9 -4
- data/lib/active_model_cachers/hook/on_model_delete.rb +5 -31
- data/lib/active_model_cachers/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 22fbf696d9d01bea8d59d1c885ef7e0724bc46894d263ae0bd59023fcbf3d034
|
4
|
+
data.tar.gz: f4b2166e69e896992e3fe0352201473faec0050f40253ace399a64af35ff8e71
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2c397c8098e6190ee501b91794bdadde52d561560cb1916c45a1da3ae60b24c1b7137b7cb0ebfe49ca5d9dc760e7052345dc4d9930e53face0be7e57bc831ad4
|
7
|
+
data.tar.gz: 2ddab829f8dbe887e5757d3a674a9468b9811fe0f363a27bf548d55a7b8b5ffd22c0e05e41f49e0e6a41e6277fd6480f8c22fd1627ed7e4f7c8d7cf08163e986
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
## Change Log
|
2
2
|
|
3
|
+
### [v2.1.2](https://github.com/khiav223577/active_model_cachers/compare/v2.1.1...v2.1.2) 2018/06/01
|
4
|
+
- [#37](https://github.com/khiav223577/active_model_cachers/pull/37) Fix: ModelName cant be referred to in development (@khiav223577)
|
5
|
+
|
3
6
|
### [v2.1.1](https://github.com/khiav223577/active_model_cachers/compare/v2.1.0...v2.1.1) 2018/05/25
|
4
7
|
- [#35](https://github.com/khiav223577/active_model_cachers/pull/35) Preventing registering same callbacks in some cases (@khiav223577)
|
5
8
|
- [#34](https://github.com/khiav223577/active_model_cachers/pull/34) Enhance - automatically clean cache when `#touch` (@ff2248)
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
require 'active_model_cachers/active_record/global_callbacks'
|
2
3
|
require 'active_model_cachers/active_record/attr_model'
|
3
4
|
require 'active_model_cachers/active_record/cacher'
|
4
5
|
require 'active_model_cachers/hook/dependencies'
|
@@ -83,6 +84,19 @@ module ActiveModelCachers
|
|
83
84
|
service_klasses << cache_self
|
84
85
|
end
|
85
86
|
end
|
87
|
+
|
88
|
+
@global_callbacks = GlobalCallbacks.new
|
89
|
+
def self.global_callbacks
|
90
|
+
@global_callbacks
|
91
|
+
end
|
92
|
+
|
93
|
+
def self.extended(base)
|
94
|
+
global_callbacks = @global_callbacks
|
95
|
+
base.instance_exec do
|
96
|
+
after_commit ->{ global_callbacks.after_commit.exec(self, self.class) }
|
97
|
+
after_touch ->{ global_callbacks.after_touch.exec(self, self.class) }
|
98
|
+
end
|
99
|
+
end
|
86
100
|
end
|
87
101
|
end
|
88
102
|
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module ActiveModelCachers
|
2
|
+
module ActiveRecord
|
3
|
+
class GlobalCallbacks
|
4
|
+
def initialize
|
5
|
+
@type_callbacks = {}
|
6
|
+
end
|
7
|
+
|
8
|
+
def pre_before_delete(class_name = nil, &block)
|
9
|
+
define_callbacks(:pre_before_delete, class_name, &block)
|
10
|
+
end
|
11
|
+
|
12
|
+
def before_delete(class_name = nil, &block)
|
13
|
+
define_callbacks(:before_delete, class_name, &block)
|
14
|
+
end
|
15
|
+
|
16
|
+
def after_delete(class_name = nil, &block)
|
17
|
+
define_callbacks(:after_delete, class_name, &block)
|
18
|
+
end
|
19
|
+
|
20
|
+
def on_nullify(class_name = nil, &block)
|
21
|
+
define_callbacks(:on_nullify, class_name, &block)
|
22
|
+
end
|
23
|
+
|
24
|
+
def after_commit(class_name = nil, &block)
|
25
|
+
define_callbacks(:after_commit, class_name, &block)
|
26
|
+
end
|
27
|
+
|
28
|
+
def after_touch(class_name = nil, &block)
|
29
|
+
define_callbacks(:after_touch, class_name, &block)
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def define_callbacks(type, class_name, &block)
|
35
|
+
(@type_callbacks[type] ||= ClassCallbacks.new).tap do |s|
|
36
|
+
s.add_callback(class_name, &block) if class_name
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
class ClassCallbacks
|
42
|
+
def initialize
|
43
|
+
@class_callbacks = Hash.new{|h, k| h[k] = [] }
|
44
|
+
end
|
45
|
+
|
46
|
+
def callbacks_at(class_name)
|
47
|
+
@class_callbacks[class_name]
|
48
|
+
end
|
49
|
+
|
50
|
+
def add_callback(class_name, &block)
|
51
|
+
callbacks_at(class_name) << block
|
52
|
+
end
|
53
|
+
|
54
|
+
def exec(scope, klass, *args)
|
55
|
+
callbacks_at(klass.name).each{|s| scope.instance_exec(*args, &s) }
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -6,22 +6,15 @@ module ActiveModelCachers
|
|
6
6
|
def find_by(*args)
|
7
7
|
where(*args).order('').first
|
8
8
|
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
9
12
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
# after_commit ->{ ... }, on: :create
|
16
|
-
# after_commit ->{ ... }, on: :destroy
|
17
|
-
|
18
|
-
def after_commit(*args, &block) # mass-assign protected attributes `id` In Rails 3
|
19
|
-
if args.last.is_a?(Hash)
|
20
|
-
if (on = args.last[:on]).is_a?(Array)
|
21
|
-
return on.each{|s| after_commit(*[*args[0...-1], { **args[-1], on: s }], &block) }
|
22
|
-
end
|
23
|
-
end
|
24
|
-
super
|
13
|
+
module ActiveRecord
|
14
|
+
module Transactions
|
15
|
+
if not method_defined?(:transaction_include_any_action?)
|
16
|
+
def transaction_include_any_action?(fire_on)
|
17
|
+
fire_on.any?{|s| transaction_include_action?(s) }
|
25
18
|
end
|
26
19
|
end
|
27
20
|
end
|
@@ -24,31 +24,36 @@ module ActiveModelCachers
|
|
24
24
|
@callbacks_defined = true
|
25
25
|
|
26
26
|
clean = ->(id){ clean_at(with_id ? id : nil) }
|
27
|
+
clean_ids = []
|
28
|
+
fire_on = Array(on) if on
|
27
29
|
|
28
|
-
|
29
|
-
|
30
|
+
ActiveRecord::Extension.global_callbacks.instance_exec do
|
31
|
+
on_nullify(class_name) do |nullified_column, get_ids|
|
32
|
+
get_ids.call.each{|s| clean.call(s) } if nullified_column == column
|
33
|
+
end
|
34
|
+
|
35
|
+
after_touch(class_name) do
|
36
|
+
clean.call(send(foreign_key))
|
37
|
+
end
|
38
|
+
|
39
|
+
after_commit(class_name) do # TODO: on
|
40
|
+
next if fire_on and not transaction_include_any_action?(fire_on)
|
41
|
+
changed = column ? previous_changes.key?(column) : previous_changes.present?
|
42
|
+
clean.call(send(foreign_key)) if changed || destroyed?
|
43
|
+
end
|
30
44
|
|
31
|
-
|
45
|
+
pre_before_delete(class_name) do |id, model|
|
32
46
|
clean_ids << @@column_value_cache.add(self, class_name, id, foreign_key, model)
|
33
47
|
end
|
34
48
|
|
35
|
-
before_delete do |_, model|
|
49
|
+
before_delete(class_name) do |_, model|
|
36
50
|
clean_ids.each{|s| clean.call(s.call) }
|
37
51
|
clean_ids = []
|
38
52
|
end
|
39
53
|
|
40
|
-
after_delete do
|
54
|
+
after_delete(class_name) do
|
41
55
|
@@column_value_cache.clean_cache
|
42
56
|
end
|
43
|
-
|
44
|
-
on_nullify(column){|ids| ids.each{|s| clean.call(s) }}
|
45
|
-
|
46
|
-
after_commit ->{
|
47
|
-
changed = column ? previous_changes.key?(column) : previous_changes.present?
|
48
|
-
clean.call(send(foreign_key)) if changed || destroyed?
|
49
|
-
}, on: on
|
50
|
-
|
51
|
-
after_touch ->{ clean.call(send(foreign_key)) }
|
52
57
|
end
|
53
58
|
end
|
54
59
|
end
|
@@ -27,10 +27,15 @@ module ActiveModelCachers::Hook
|
|
27
27
|
|
28
28
|
private
|
29
29
|
|
30
|
-
def call_hooks
|
31
|
-
|
32
|
-
|
33
|
-
|
30
|
+
def call_hooks(&get_ids)
|
31
|
+
ids = nil
|
32
|
+
get_ids_with_cache = ->{ ids ||= get_ids.call }
|
33
|
+
ActiveModelCachers::ActiveRecord::Extension.global_callbacks.on_nullify.exec(
|
34
|
+
self,
|
35
|
+
reflection.klass,
|
36
|
+
reflection.foreign_key,
|
37
|
+
get_ids_with_cache,
|
38
|
+
)
|
34
39
|
end
|
35
40
|
end
|
36
41
|
end
|
@@ -12,40 +12,14 @@ module ActiveModelCachers::Hook
|
|
12
12
|
end
|
13
13
|
|
14
14
|
module ClassMethods
|
15
|
-
def prepend_before_delete(&callback)
|
16
|
-
before_delete_hooks.unshift(callback)
|
17
|
-
end
|
18
|
-
|
19
|
-
def before_delete(&callback)
|
20
|
-
before_delete_hooks << callback
|
21
|
-
end
|
22
|
-
|
23
|
-
def after_delete(&callback)
|
24
|
-
after_delete_hooks << callback
|
25
|
-
end
|
26
|
-
|
27
|
-
def before_delete_hooks
|
28
|
-
@before_delete_hooks ||= []
|
29
|
-
end
|
30
|
-
|
31
|
-
def after_delete_hooks
|
32
|
-
@after_delete_hooks ||= []
|
33
|
-
end
|
34
|
-
|
35
15
|
def delete(id, model = nil)
|
36
|
-
|
37
|
-
|
38
|
-
after_delete_hooks.each{|s| s.call(id, model) }
|
39
|
-
return result
|
40
|
-
end
|
16
|
+
ActiveModelCachers::ActiveRecord::Extension.global_callbacks.pre_before_delete.exec(self, self, id, model)
|
17
|
+
ActiveModelCachers::ActiveRecord::Extension.global_callbacks.before_delete.exec(self, self, id, model)
|
41
18
|
|
42
|
-
|
43
|
-
@nullify_hooks ||= Hash.new{|h, k| h[k] = [] }
|
44
|
-
return @nullify_hooks[column]
|
45
|
-
end
|
19
|
+
result = super(id)
|
46
20
|
|
47
|
-
|
48
|
-
|
21
|
+
ActiveModelCachers::ActiveRecord::Extension.global_callbacks.after_delete.exec(self, self, id, model)
|
22
|
+
return result
|
49
23
|
end
|
50
24
|
end
|
51
25
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_model_cachers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- khiav reoy
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-06-
|
11
|
+
date: 2018-06-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -121,6 +121,7 @@ files:
|
|
121
121
|
- lib/active_model_cachers/active_record/attr_model.rb
|
122
122
|
- lib/active_model_cachers/active_record/cacher.rb
|
123
123
|
- lib/active_model_cachers/active_record/extension.rb
|
124
|
+
- lib/active_model_cachers/active_record/global_callbacks.rb
|
124
125
|
- lib/active_model_cachers/active_record/patch_rails_3.rb
|
125
126
|
- lib/active_model_cachers/cache_service.rb
|
126
127
|
- lib/active_model_cachers/cache_service_factory.rb
|