active_model_cachers 2.1.3 → 2.1.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +59 -0
  3. data/.gitignore +9 -9
  4. data/CHANGELOG.md +71 -50
  5. data/CODE_OF_CONDUCT.md +48 -48
  6. data/LICENSE.txt +21 -21
  7. data/README.md +399 -353
  8. data/Rakefile +10 -10
  9. data/active_model_cachers.gemspec +45 -38
  10. data/bin/console +14 -14
  11. data/bin/setup +8 -8
  12. data/gemfiles/3.2.gemfile +11 -11
  13. data/gemfiles/4.2.gemfile +11 -11
  14. data/gemfiles/5.0.gemfile +11 -11
  15. data/gemfiles/5.1.gemfile +11 -11
  16. data/gemfiles/5.2.gemfile +11 -11
  17. data/gemfiles/6.0.gemfile +11 -0
  18. data/lib/active_model_cachers.rb +11 -0
  19. data/lib/active_model_cachers/active_record/attr_model.rb +124 -103
  20. data/lib/active_model_cachers/active_record/cacher.rb +97 -96
  21. data/lib/active_model_cachers/active_record/extension.rb +119 -106
  22. data/lib/active_model_cachers/active_record/global_callbacks.rb +67 -59
  23. data/lib/active_model_cachers/cache_service.rb +151 -134
  24. data/lib/active_model_cachers/cache_service_factory.rb +55 -55
  25. data/lib/active_model_cachers/column_value_cache.rb +47 -46
  26. data/lib/active_model_cachers/config.rb +6 -6
  27. data/lib/active_model_cachers/false_object.rb +5 -5
  28. data/lib/active_model_cachers/hook/associations.rb +43 -43
  29. data/lib/active_model_cachers/hook/dependencies.rb +38 -38
  30. data/lib/active_model_cachers/hook/on_model_delete.rb +29 -29
  31. data/lib/active_model_cachers/nil_object.rb +5 -5
  32. data/lib/active_model_cachers/{active_record → patches}/patch_rails_3.rb +49 -49
  33. data/lib/active_model_cachers/patches/uninitialized_attribute.rb +9 -0
  34. data/lib/active_model_cachers/version.rb +4 -4
  35. metadata +31 -13
  36. data/.travis.yml +0 -26
@@ -1,6 +1,6 @@
1
- # frozen_string_literal: true
2
- module ActiveModelCachers
3
- class Config
4
- attr_accessor :store
5
- end
6
- end
1
+ # frozen_string_literal: true
2
+ module ActiveModelCachers
3
+ class Config
4
+ attr_accessor :store
5
+ end
6
+ end
@@ -1,5 +1,5 @@
1
- # frozen_string_literal: true
2
- module ActiveModelCachers
3
- class FalseObject
4
- end
5
- end
1
+ # frozen_string_literal: true
2
+ module ActiveModelCachers
3
+ class FalseObject
4
+ end
5
+ end
@@ -1,43 +1,43 @@
1
- # frozen_string_literal: true
2
- require 'active_record'
3
- require 'active_record/associations/has_many_association'
4
- require 'active_model_cachers/hook/on_model_delete'
5
-
6
- module ActiveModelCachers::Hook
7
- module Associations
8
- def delete_count(method, scope)
9
- if method == :delete_all
10
- # TODO:
11
- else # nullify
12
- call_hooks{ scope.pluck(:id) }
13
- end
14
- super
15
- end
16
-
17
- def delete_records(records, method)
18
- case method
19
- when :destroy
20
- when :delete_all
21
- # TODO:
22
- else
23
- call_hooks{ records.map(&:id) }
24
- end
25
- super
26
- end
27
-
28
- private
29
-
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
- )
39
- end
40
- end
41
- end
42
-
43
- ActiveRecord::Associations::HasManyAssociation.send(:prepend, ActiveModelCachers::Hook::Associations)
1
+ # frozen_string_literal: true
2
+ require 'active_record'
3
+ require 'active_record/associations/has_many_association'
4
+ require 'active_model_cachers/hook/on_model_delete'
5
+
6
+ module ActiveModelCachers::Hook
7
+ module Associations
8
+ def delete_count(method, scope)
9
+ if method == :delete_all
10
+ # TODO:
11
+ else # nullify
12
+ call_hooks{ scope.pluck(:id) }
13
+ end
14
+ super
15
+ end
16
+
17
+ def delete_records(records, method)
18
+ case method
19
+ when :destroy
20
+ when :delete_all
21
+ # TODO:
22
+ else
23
+ call_hooks{ records.map(&:id) }
24
+ end
25
+ super
26
+ end
27
+
28
+ private
29
+
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
+ )
39
+ end
40
+ end
41
+ end
42
+
43
+ ActiveRecord::Associations::HasManyAssociation.send(:prepend, ActiveModelCachers::Hook::Associations)
@@ -1,38 +1,38 @@
1
- # frozen_string_literal: true
2
- require 'active_support/dependencies'
3
-
4
- module ActiveModelCachers::Hook
5
- module Depdenencies
6
- def onload(const_name, times: 1, &block)
7
- const = const_name if not const_name.is_a?(String)
8
- if const or Module.const_defined?(const_name)
9
- (const || const_name.constantize).instance_exec(&block)
10
- else
11
- load_hooks[const_name].push(block: block, times: times)
12
- end
13
- end
14
-
15
- def load_hooks
16
- @load_hooks ||= Hash.new{|h, k| h[k] = [] }
17
- end
18
-
19
- def new_constants_in(*)
20
- new_constants = super.each do |const_name|
21
- hooks = load_hooks[const_name]
22
- need_compact = false
23
- hooks.each_with_index do |hook, idx|
24
- if (hook[:times] -= 1) < 0
25
- hooks[idx] = nil
26
- need_compact = true
27
- next
28
- end
29
- const_name.constantize.instance_exec(&hook[:block])
30
- end
31
- hooks.compact! if need_compact
32
- end
33
- return new_constants
34
- end
35
- end
36
- end
37
-
38
- ActiveSupport::Dependencies.send(:extend, ActiveModelCachers::Hook::Depdenencies)
1
+ # frozen_string_literal: true
2
+ require 'active_support/dependencies'
3
+
4
+ module ActiveModelCachers::Hook
5
+ module Depdenencies
6
+ def onload(const_name, times: 1, &block)
7
+ const = const_name if not const_name.is_a?(String)
8
+ if const or Module.const_defined?(const_name)
9
+ (const || const_name.constantize).instance_exec(&block)
10
+ else
11
+ load_hooks[const_name].push(block: block, times: times)
12
+ end
13
+ end
14
+
15
+ def load_hooks
16
+ @load_hooks ||= Hash.new{|h, k| h[k] = [] }
17
+ end
18
+
19
+ def new_constants_in(*)
20
+ new_constants = super.each do |const_name|
21
+ hooks = load_hooks[const_name]
22
+ need_compact = false
23
+ hooks.each_with_index do |hook, idx|
24
+ if (hook[:times] -= 1) < 0
25
+ hooks[idx] = nil
26
+ need_compact = true
27
+ next
28
+ end
29
+ const_name.constantize.instance_exec(&hook[:block])
30
+ end
31
+ hooks.compact! if need_compact
32
+ end
33
+ return new_constants
34
+ end
35
+ end
36
+ end
37
+
38
+ ActiveSupport::Dependencies.send(:extend, ActiveModelCachers::Hook::Depdenencies)
@@ -1,29 +1,29 @@
1
- # frozen_string_literal: true
2
- require 'active_record'
3
-
4
- module ActiveModelCachers::Hook
5
- module OnModelDelete
6
- module InstanceMethods
7
- def delete
8
- self.class.delete(id, self) if persisted?
9
- @destroyed = true
10
- freeze
11
- end
12
- end
13
-
14
- module ClassMethods
15
- def delete(id, model = nil)
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)
18
-
19
- result = super(id)
20
-
21
- ActiveModelCachers::ActiveRecord::Extension.global_callbacks.after_delete.exec(self, self, id, model)
22
- return result
23
- end
24
- end
25
- end
26
- end
27
-
28
- ActiveRecord::Base.send(:include, ActiveModelCachers::Hook::OnModelDelete::InstanceMethods)
29
- ActiveRecord::Base.send(:extend, ActiveModelCachers::Hook::OnModelDelete::ClassMethods)
1
+ # frozen_string_literal: true
2
+ require 'active_record'
3
+
4
+ module ActiveModelCachers::Hook
5
+ module OnModelDelete
6
+ module InstanceMethods
7
+ def delete
8
+ self.class.delete(id, self) if persisted?
9
+ @destroyed = true
10
+ freeze
11
+ end
12
+ end
13
+
14
+ module ClassMethods
15
+ def delete(id, model = nil)
16
+ ActiveModelCachers::ActiveRecord::Extension.global_callbacks.before_delete1.exec(self, self, id, model)
17
+ ActiveModelCachers::ActiveRecord::Extension.global_callbacks.before_delete2.exec(self, self, id, model)
18
+
19
+ result = super(id)
20
+
21
+ ActiveModelCachers::ActiveRecord::Extension.global_callbacks.after_delete.exec(self, self, id, model)
22
+ return result
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+ ActiveRecord::Base.send(:include, ActiveModelCachers::Hook::OnModelDelete::InstanceMethods)
29
+ ActiveRecord::Base.send(:extend, ActiveModelCachers::Hook::OnModelDelete::ClassMethods)
@@ -1,5 +1,5 @@
1
- # frozen_string_literal: true
2
- module ActiveModelCachers
3
- class NilObject
4
- end
5
- end
1
+ # frozen_string_literal: true
2
+ module ActiveModelCachers
3
+ class NilObject
4
+ end
5
+ end
@@ -1,49 +1,49 @@
1
- # frozen_string_literal: true
2
- module ActiveModelCachers
3
- module ActiveRecord
4
- module Extension
5
- # define #find_by for Rails 3
6
- def find_by(*args)
7
- where(*args).order('').first
8
- end
9
- end
10
- end
11
- end
12
-
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) }
18
- end
19
- end
20
- end
21
- end
22
-
23
- module ActiveRecord
24
- module Associations
25
- # = Active Record Associations
26
- #
27
- # This is the root class of all associations ('+ Foo' signifies an included module Foo):
28
- #
29
- # Association
30
- # SingularAssociation
31
- # HasOneAssociation
32
- # HasOneThroughAssociation + ThroughAssociation
33
- # BelongsToAssociation
34
- # BelongsToPolymorphicAssociation
35
- # CollectionAssociation
36
- # HasAndBelongsToManyAssociation
37
- # HasManyAssociation
38
- # HasManyThroughAssociation + ThroughAssociation
39
- class Association #:nodoc:
40
- alias_method :scope, :scoped
41
- end
42
- end
43
- end
44
-
45
- class ActiveModelCachers::ColumnValueCache
46
- def pluck_columns(object, relation, columns)
47
- object.connection.select_all(relation.select(columns)).map(&:values)
48
- end
49
- end
1
+ # frozen_string_literal: true
2
+ module ActiveModelCachers
3
+ module ActiveRecord
4
+ module Extension
5
+ # define #find_by for Rails 3
6
+ def find_by(*args)
7
+ where(*args).order('').first
8
+ end
9
+ end
10
+ end
11
+ end
12
+
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) }
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+ module ActiveRecord
24
+ module Associations
25
+ # = Active Record Associations
26
+ #
27
+ # This is the root class of all associations ('+ Foo' signifies an included module Foo):
28
+ #
29
+ # Association
30
+ # SingularAssociation
31
+ # HasOneAssociation
32
+ # HasOneThroughAssociation + ThroughAssociation
33
+ # BelongsToAssociation
34
+ # BelongsToPolymorphicAssociation
35
+ # CollectionAssociation
36
+ # HasAndBelongsToManyAssociation
37
+ # HasManyAssociation
38
+ # HasManyThroughAssociation + ThroughAssociation
39
+ class Association #:nodoc:
40
+ alias_method :scope, :scoped
41
+ end
42
+ end
43
+ end
44
+
45
+ class ActiveModelCachers::ColumnValueCache
46
+ def pluck_columns(object, relation, columns)
47
+ object.connection.select_all(relation.select(columns)).map(&:values)
48
+ end
49
+ end
@@ -0,0 +1,9 @@
1
+ if defined?(ActiveRecord::Attribute)
2
+ class ActiveRecord::Attribute
3
+ class Uninitialized < self
4
+ def forgetting_assignment
5
+ dup
6
+ end
7
+ end
8
+ end
9
+ end
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: true
2
- module ActiveModelCachers
3
- VERSION = '2.1.3'
4
- end
1
+ # frozen_string_literal: true
2
+ module ActiveModelCachers
3
+ VERSION = '2.1.8'
4
+ end
metadata CHANGED
@@ -1,29 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_model_cachers
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.3
4
+ version: 2.1.8
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-07 00:00:00.000000000 Z
11
+ date: 2021-04-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '1.17'
20
+ - - "<"
18
21
  - !ruby/object:Gem::Version
19
- version: '1.11'
22
+ version: 3.x
20
23
  type: :development
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '1.17'
30
+ - - "<"
25
31
  - !ruby/object:Gem::Version
26
- version: '1.11'
32
+ version: 3.x
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: rake
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -70,16 +76,22 @@ dependencies:
70
76
  name: request_store
71
77
  requirement: !ruby/object:Gem::Requirement
72
78
  requirements:
73
- - - "~>"
79
+ - - ">="
74
80
  - !ruby/object:Gem::Version
75
81
  version: 1.4.0
82
+ - - "<"
83
+ - !ruby/object:Gem::Version
84
+ version: 1.6.0
76
85
  type: :runtime
77
86
  prerelease: false
78
87
  version_requirements: !ruby/object:Gem::Requirement
79
88
  requirements:
80
- - - "~>"
89
+ - - ">="
81
90
  - !ruby/object:Gem::Version
82
91
  version: 1.4.0
92
+ - - "<"
93
+ - !ruby/object:Gem::Version
94
+ version: 1.6.0
83
95
  - !ruby/object:Gem::Dependency
84
96
  name: activerecord
85
97
  requirement: !ruby/object:Gem::Requirement
@@ -102,8 +114,8 @@ executables: []
102
114
  extensions: []
103
115
  extra_rdoc_files: []
104
116
  files:
117
+ - ".github/workflows/ruby.yml"
105
118
  - ".gitignore"
106
- - ".travis.yml"
107
119
  - CHANGELOG.md
108
120
  - CODE_OF_CONDUCT.md
109
121
  - LICENSE.txt
@@ -117,12 +129,12 @@ files:
117
129
  - gemfiles/5.0.gemfile
118
130
  - gemfiles/5.1.gemfile
119
131
  - gemfiles/5.2.gemfile
132
+ - gemfiles/6.0.gemfile
120
133
  - lib/active_model_cachers.rb
121
134
  - lib/active_model_cachers/active_record/attr_model.rb
122
135
  - lib/active_model_cachers/active_record/cacher.rb
123
136
  - lib/active_model_cachers/active_record/extension.rb
124
137
  - lib/active_model_cachers/active_record/global_callbacks.rb
125
- - lib/active_model_cachers/active_record/patch_rails_3.rb
126
138
  - lib/active_model_cachers/cache_service.rb
127
139
  - lib/active_model_cachers/cache_service_factory.rb
128
140
  - lib/active_model_cachers/column_value_cache.rb
@@ -132,11 +144,18 @@ files:
132
144
  - lib/active_model_cachers/hook/dependencies.rb
133
145
  - lib/active_model_cachers/hook/on_model_delete.rb
134
146
  - lib/active_model_cachers/nil_object.rb
147
+ - lib/active_model_cachers/patches/patch_rails_3.rb
148
+ - lib/active_model_cachers/patches/uninitialized_attribute.rb
135
149
  - lib/active_model_cachers/version.rb
136
150
  homepage: https://github.com/khiav223577/active_model_cachers
137
151
  licenses:
138
152
  - MIT
139
- metadata: {}
153
+ metadata:
154
+ homepage_uri: https://github.com/khiav223577/active_model_cachers
155
+ changelog_uri: https://github.com/khiav223577/active_model_cachers/blob/master/CHANGELOG.md
156
+ source_code_uri: https://github.com/khiav223577/active_model_cachers
157
+ documentation_uri: https://www.rubydoc.info/gems/active_model_cachers
158
+ bug_tracker_uri: https://github.com/khiav223577/active_model_cachers/issues
140
159
  post_install_message:
141
160
  rdoc_options: []
142
161
  require_paths:
@@ -152,8 +171,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
152
171
  - !ruby/object:Gem::Version
153
172
  version: '0'
154
173
  requirements: []
155
- rubyforge_project:
156
- rubygems_version: 2.7.6
174
+ rubygems_version: 3.2.14
157
175
  signing_key:
158
176
  specification_version: 4
159
177
  summary: Simply cache whatever you want by using cachers. Support Rails 3, 4, 5.