hancock_cms_cache 1.0.2

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.
Files changed (52) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.ruby-gemset +1 -0
  4. data/.ruby-version +1 -0
  5. data/Gemfile +4 -0
  6. data/README.md +35 -0
  7. data/Rakefile +2 -0
  8. data/app/assets/javascripts/hancock/rails_admin/plugins/cache.coffee +4 -0
  9. data/app/assets/javascripts/hancock/rails_admin/plugins/cache/custom/ui.coffee +0 -0
  10. data/app/assets/stylesheets/hancock/rails_admin/plugins/cache.sass +3 -0
  11. data/app/assets/stylesheets/hancock/rails_admin/plugins/cache/custom/theming.sass +0 -0
  12. data/app/controllers/concerns/hancock/cache/action.rb +58 -0
  13. data/app/controllers/concerns/hancock/cache/ajax_csrf.rb +25 -0
  14. data/app/controllers/concerns/hancock/cache/fragments.rb +34 -0
  15. data/app/controllers/concerns/hancock/cache/no_cache.rb +12 -0
  16. data/app/helpers/hancock/cache/cache_helper.rb +167 -0
  17. data/app/models/concerns/hancock/cache/cacheable.rb +164 -0
  18. data/app/models/concerns/hancock/cache/cleared_stack.rb +43 -0
  19. data/app/models/concerns/hancock/cache/decorators/fragment.rb +41 -0
  20. data/app/models/concerns/hancock/cache/loadable.rb +44 -0
  21. data/app/models/concerns/hancock/cache/snapshotable.rb +49 -0
  22. data/app/models/hancock/cache/fragment.rb +11 -0
  23. data/app/views/hancock/_assets.html.slim +24 -0
  24. data/app/views/layouts/application.html.slim +33 -0
  25. data/app/views/rails_admin/main/hancock_cache_global_clear.html.slim +25 -0
  26. data/bin/console +14 -0
  27. data/bin/setup +8 -0
  28. data/config/initializers/cache_detector.rb +53 -0
  29. data/config/initializers/hancock_cache.rb +7 -0
  30. data/config/locales/hancock.cache.ru.yml +59 -0
  31. data/hancock_cms_cache.gemspec +34 -0
  32. data/lib/generators/hancock/cache/config/config_generator.rb +13 -0
  33. data/lib/generators/hancock/cache/config/templates/hancock_cache.erb +14 -0
  34. data/lib/generators/hancock/cache/models/decorators_generator.rb +24 -0
  35. data/lib/generators/hancock/cache/models/fragment_generator.rb +39 -0
  36. data/lib/generators/hancock/cache/models/templates/fragment.erb +38 -0
  37. data/lib/hancock/cache/admin.rb +37 -0
  38. data/lib/hancock/cache/admin/fragment.rb +140 -0
  39. data/lib/hancock/cache/configuration.rb +38 -0
  40. data/lib/hancock/cache/engine.rb +20 -0
  41. data/lib/hancock/cache/models/fragment.rb +310 -0
  42. data/lib/hancock/cache/models/mongoid/fragment.rb +259 -0
  43. data/lib/hancock/cache/rails_admin_ext/hancock_cache_clear.rb +95 -0
  44. data/lib/hancock/cache/rails_admin_ext/hancock_cache_dump_snapshot.rb +92 -0
  45. data/lib/hancock/cache/rails_admin_ext/hancock_cache_global_clear.rb +74 -0
  46. data/lib/hancock/cache/rails_admin_ext/hancock_cache_restore_snapshot.rb +92 -0
  47. data/lib/hancock/cache/rails_admin_ext/hancock_touch.rb +95 -0
  48. data/lib/hancock/cache/rails_admin_settings_patch.rb +185 -0
  49. data/lib/hancock/cache/version.rb +5 -0
  50. data/lib/hancock_cms_cache.rb +34 -0
  51. data/release.sh +6 -0
  52. metadata +141 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8924cc51d91eba2c74ffdbc5653ece7445b465dd
4
+ data.tar.gz: 64e32fb9925538ad64d541b54130e3932ada290c
5
+ SHA512:
6
+ metadata.gz: '0802fed32cfd539c32ee4d046e11b8261ebc821524a2f620c9e3a519878c8471c54a12858013e518cdc00fc13cb8b4fef9b309836c2b121e16cc61eec333679b'
7
+ data.tar.gz: 4db3c7530a071c6f63cb5ac17d0fb07cfb821837fef54af39805a433756429cb29aa93120886ee075b874ebc9f911e544afd16c0083230d0e3f28684364de876
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
@@ -0,0 +1 @@
1
+ hancock_cms_cache
@@ -0,0 +1 @@
1
+ 2.3.3
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in hancock_cms_cache.gemspec
4
+ gemspec
@@ -0,0 +1,35 @@
1
+ # HancockCmsCache
2
+
3
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/hancock/cache`. To experiment with that code, run `bin/console` for an interactive prompt.
4
+
5
+ TODO: Delete this and the text above, and describe your gem
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'hancock_cms_cache'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install hancock_cms_cache
22
+
23
+ ## Usage
24
+
25
+ TODO: Write usage instructions here
26
+
27
+ ## Development
28
+
29
+ After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
30
+
31
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
+
33
+ ## Contributing
34
+
35
+ Bug reports and pull requests are welcome on GitHub at https://github.com/red-rocks/hancock_cms_cache.
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+ task :default => :spec
@@ -0,0 +1,4 @@
1
+ #= require_self
2
+ #= require "hancock/rails_admin/plugins/cache/custom/ui"
3
+
4
+ window.hancock.plugins.cache ||= {}
@@ -0,0 +1,3 @@
1
+
2
+
3
+ @import "hancock/rails_admin/plugins/cache/custom/theming"
@@ -0,0 +1,58 @@
1
+ module Hancock::Cache::Action
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ def page_cache_key
6
+ "pages/#{controller_name}_#{action_name}" if (params.keys - ["controller", "action", "rack.session"]).blank?
7
+ end
8
+ def page_cache_obj
9
+ return @page_cache_obj unless @page_cache_obj.nil?
10
+ _name = page_cache_key
11
+ _desc = <<-TEXT
12
+ action caching
13
+ controller: #{controller_name}
14
+ action: #{action_name}
15
+ params: #{params.inspect}
16
+ TEXT
17
+ @page_cache_obj = Hancock::Cache::Fragment.create_unless_exists(name: Hancock::Cache::Fragment.name_from_view(_name), desc: _desc, is_action_cache: true)
18
+ end
19
+
20
+ def hancock_stale?(obj, opts = {})
21
+ return if obj.nil?
22
+ if obj.is_a?(Hash)
23
+ return stale?(obj)
24
+ end
25
+ if obj
26
+ _last_time = opts[:last_modified]
27
+ if _last_time.nil?
28
+ _methods = ([:u_at, :updated_at, :c_at, :created_at] + (opts[:last_modified_methods] || [])).uniq
29
+ _methods.each do |m|
30
+ _last_time ||= obj.send(m) if obj.respond_to?(m)
31
+ break if _last_time
32
+ end
33
+ _last_time ||= Time.new
34
+ end
35
+ opts.reverse_merge!(last_modified: _last_time, etag: obj, public: true, template: false)
36
+ return stale?(obj)
37
+ end
38
+ end
39
+ alias_method :hancock_cache_stale?, :hancock_stale?
40
+
41
+ def hancock_cache_fragment_stale?(name, opts = {})
42
+ if name.is_a?(Hash)
43
+ name, opts = name.delete(:name), name
44
+ end
45
+ return if name.nil?
46
+ frag = hancock_cache_fragments[Hancock::Cache::Fragment.name_from_view(name)]
47
+ if frag
48
+ opts.reverse_merge!(last_modified: frag.last_clear_time, etag: frag, public: true, template: false)
49
+ hancock_stale?(frag, opts.compact)
50
+ else
51
+ true
52
+ end
53
+ end
54
+
55
+ helper_method :page_cache_key, :page_cache_obj
56
+ end
57
+
58
+ end
@@ -0,0 +1,25 @@
1
+ module Hancock::Cache::AjaxCsrf
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ include Hancock::Cache::NoCache
6
+ skip_before_action :find_page, only: [:csrf_meta]
7
+
8
+ def csrf_meta
9
+
10
+ set_cache_buster
11
+ # expires_now
12
+ # response.headers["Pragma"] = "no-cache"
13
+
14
+ respond_to do |format|
15
+ format.json do
16
+ render json: {
17
+ param: request_forgery_protection_token,
18
+ token: form_authenticity_token
19
+ }
20
+ end
21
+ end
22
+ end
23
+ end
24
+
25
+ end
@@ -0,0 +1,34 @@
1
+ module Hancock::Cache::Fragments
2
+ extend ActiveSupport::Concern
3
+ included do
4
+ @@hancock_cache_fragments = nil
5
+ # before_action :load_fragments
6
+
7
+ helper_method :hancock_cache_fragments
8
+ def hancock_cache_fragments(reload = false)
9
+ # @hancock_cache_fragments ||= Hancock::Cache::Fragment.cutted.all.to_a.map { |f| [f.name, f] }.to_h
10
+ if reload
11
+ Hancock::Cache::Fragment.reload!
12
+ @@hancock_cache_fragments = Hancock::Cache::Fragment.loaded_info
13
+ elsif Hancock::Cache::Fragment.loaded
14
+ @@hancock_cache_fragments ||= Hancock::Cache::Fragment.loaded_info
15
+ else
16
+ Hancock::Cache::Fragment.load!
17
+ @@hancock_cache_fragments = Hancock::Cache::Fragment.loaded_info
18
+ end
19
+ @@hancock_cache_fragments
20
+ end
21
+ end
22
+
23
+ class_methods do
24
+ def reload_fragments
25
+ Hancock::Cache::Fragment.reload!
26
+ @@hancock_cache_fragments = Hancock::Cache::Fragment.loaded_info
27
+ end
28
+ end
29
+
30
+ protected
31
+ def load_fragments
32
+ hancock_cache_fragments(true)
33
+ end
34
+ end
@@ -0,0 +1,12 @@
1
+ module Hancock::Cache::NoCache
2
+ extend ActiveSupport::Concern
3
+ included do
4
+ # before_action :set_cache_buster
5
+ end
6
+
7
+ protected
8
+ def set_cache_buster
9
+ expires_now()
10
+ response.headers["Pragma"] = "no-cache"
11
+ end
12
+ end
@@ -0,0 +1,167 @@
1
+ module Hancock
2
+ module Cache
3
+ module CacheHelper
4
+
5
+ def hancock_cache_settings(key, options = {}, &block)
6
+ if key.is_a?(Hash)
7
+ key, options = key[:key], key
8
+ end
9
+
10
+ cache_keys = options[:cache_keys_str] || options[:cache_keys] || options[:cache_key] || []
11
+ if cache_keys.is_a?(::Array)
12
+ cache_keys = cache_keys.map { |k| k.to_s.strip }.join(" ")
13
+ else
14
+ cache_keys = cache_keys.to_s.strip
15
+ end
16
+ options.delete(:cache_keys)
17
+ options.delete(:cache_key)
18
+ options[:cache_keys_str] = [cache_keys, hancock_cache_views_keys].flatten.map { |k| k.to_s.strip }.reject(&:blank?).join(" ").strip
19
+
20
+ hancock_settings(key, options, &block)
21
+ end
22
+ alias_method :hancock_cache_setting, :hancock_cache_settings
23
+
24
+
25
+ def hancock_cache(obj = @virtual_path, options = {}, &block)
26
+ if obj.is_a?(String) or obj.is_a?(Symbol)
27
+ return hancock_fragment_cache obj.to_s, (options || {}).merge(skip_digest: true), &block
28
+
29
+ else
30
+ condition = Array(obj).map { |o|
31
+ !o.respond_to?(:perform_caching) or o.perform_caching
32
+ }
33
+
34
+ if obj.respond_to?(:cache_keys_str) and obj.respond_to?(:cache_keys) and obj.respond_to?(:cache_keys=)
35
+ obj.cache_keys |= hancock_cache_views_keys
36
+ obj.save if obj.cache_keys_str_changed?
37
+ end
38
+
39
+ condition = (condition.blank? or condition.uniq == [true])
40
+ cache_if condition, obj, options, &block
41
+ end
42
+ end
43
+ def hancock_cache_unless(condition, obj = [], options = {}, &block)
44
+ hancock_cache_if !condition, obj, options, &block
45
+ end
46
+ def hancock_cache_if(condition, obj = [], options = {}, &block)
47
+ if condition
48
+ hancock_cache obj, options, &block
49
+ else
50
+ yield
51
+ end
52
+ nil
53
+ end
54
+
55
+ def hancock_fragment_cache(name = @virtual_path, options = {skip_digest: true}, &block)
56
+ if name.is_a?(Hash)
57
+ name, options = name.delete(:name), name
58
+ end
59
+ name = @virtual_path if name.blank?
60
+ for_object = (options and options.delete(:for_object))
61
+ for_objects = (options and options.delete(:for_objects))
62
+ for_model = (options and options.delete(:for_model))
63
+ for_setting = (options and options.delete(:for_setting))
64
+ _on_ram = (options and options.delete(:on_ram))
65
+
66
+ # if Hancock::Cache.config.model_settings_support
67
+ # _detect_cache = !!(Hancock::Cache.config.runtime_cache_detector || Hancock::Cache::Fragment.settings.detecting)
68
+ # else
69
+ # _detect_cache = !!(Hancock::Cache.config.runtime_cache_detector || Settings.hancock_cache_detecting)
70
+ # end
71
+ _detect_cache = true
72
+
73
+ if respond_to?(:hancock_cache_fragments)
74
+ frag = hancock_cache_fragments[Hancock::Cache::Fragment.name_from_view(name)]
75
+ # parents = hancock_cache_keys.map do |_name|
76
+ # hancock_cache_fragments[Hancock::Cache::Fragment.name_from_view(_name)]
77
+ # end.compact
78
+ parent_names = hancock_cache_views_keys
79
+ if frag
80
+ frag.set_for_object(for_object) if for_object
81
+ frag.set_for_objects(for_objects) if for_objects
82
+ frag.set_for_model(for_model) if for_model
83
+ frag.set_for_setting(for_setting) if for_setting
84
+ if _detect_cache
85
+ frag.parent_names |= parent_names
86
+ if frag.parent_names_changed?
87
+ # frag.set_parent_ids! and hancock_cache_fragments[frag.name] = frag
88
+ frag.update_parent_ids! and hancock_cache_fragments[frag.name] = frag.reload
89
+ end
90
+ end
91
+ else
92
+ if _detect_cache
93
+ _name = Hancock::Cache::Fragment.name_from_view(name)
94
+ _desc = "" #"#{@virtual_path}\noptions: #{options}"
95
+ _virtual_path = @virtual_path
96
+ # Hancock::Cache::Fragment.create_unless_exists(name: _name, desc: _desc, virtual_path: _virtual_path, parents: parents)
97
+ Hancock::Cache::Fragment.create_unless_exists(name: _name, desc: _desc, virtual_path: _virtual_path, parent_names: parent_names, on_ram: _on_ram)
98
+ Hancock::Cache::Fragment.reload!
99
+ frag = hancock_cache_fragments[_name]
100
+ end
101
+ end
102
+ condition = (frag and frag.enabled)
103
+ else
104
+ if _detect_cache
105
+ # parents = Hancock::Cache::Fragment.by_name_from_view(hancock_cache_keys).to_a
106
+ # _name = Hancock::Cache::Fragment.name_from_view(name)
107
+ # _desc = "" #"#{@virtual_path}\noptions: #{options}"
108
+ # _virtual_path = @virtual_path
109
+ # Hancock::Cache::Fragment.create_unless_exists(name: _name, desc: _desc, virtual_path: _virtual_path, parents: parents)
110
+ # Hancock::Cache::Fragment.reload!
111
+ # frag.parent_names |= parent_names
112
+ # if frag.parent_names_changed?
113
+ # # frag.set_parent_ids! and hancock_cache_fragments[frag.name] = frag
114
+ # frag.update_parent_ids! and hancock_cache_fragments[frag.name] = frag
115
+ # end
116
+ end
117
+ condition = Hancock::Cache::Fragment.enabled.by_name_from_view(name).count > 0
118
+ end
119
+ if frag and frag.on_ram and !frag.on_ram_data.nil?
120
+ ret = frag.on_ram_data
121
+ else
122
+ lookup_context.hancock_cache_keys << name
123
+ ret = cache_if condition, name, options, &block
124
+ frag.on_ram_data = ret if frag and frag.on_ram
125
+ lookup_context.hancock_cache_keys.delete(name)
126
+ end
127
+ return ret
128
+ end
129
+ def hancock_fragment_cache_unless(condition, obj = [], options = {}, &block)
130
+ hancock_fragment_cache_if !condition, obj, options, &block
131
+ end
132
+ def hancock_fragment_cache_if(condition, obj = [], options = {}, &block)
133
+ if condition
134
+ hancock_fragment_cache obj, options, &block
135
+ else
136
+ yield
137
+ end
138
+ nil
139
+ end
140
+
141
+ def hancock_cache_keys
142
+ ret = lookup_context.hancock_cache_keys.dup
143
+
144
+ if respond_to?(:page_cache_key) and !page_cache_key.blank?
145
+ if (!respond_to?(:page_cache_obj) or page_cache_obj.nil?)
146
+ _name = page_cache_key
147
+ _desc = <<-TEXT
148
+ action caching
149
+ controller: #{controller_name}
150
+ action: #{action_name}
151
+ params: #{params.inspect}
152
+ TEXT
153
+ Hancock::Cache::Fragment.create_unless_exists(name: Hancock::Cache::Fragment.name_from_view(_name), desc: _desc)
154
+ end
155
+ ret.unshift page_cache_key
156
+ end
157
+
158
+ ret.uniq.freeze
159
+ end
160
+
161
+ def hancock_cache_views_keys
162
+ hancock_cache_keys.map { |k| Hancock::Cache::Fragment.name_from_view(k) }
163
+ end
164
+
165
+ end
166
+ end
167
+ end
@@ -0,0 +1,164 @@
1
+ if Hancock.mongoid?
2
+
3
+ module Hancock::Cache::Cacheable
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ field :cache_keys_str, type: String, default: -> { default_cache_keys.map(&:strip).join("\n") }
8
+ def self.default_cache_keys
9
+ []
10
+ end
11
+ def default_cache_keys
12
+ self.class.default_cache_keys
13
+ end
14
+ def set_default_cache_keys(strategy = :append)
15
+ _old_keys = cache_keys
16
+
17
+ _keys = case strategy.to_sym
18
+ when :append
19
+ (_old_keys + default_cache_keys).uniq
20
+ when :overwrite, :replace
21
+ default_cache_keys
22
+ else
23
+ _old_keys
24
+ end
25
+ self
26
+ end
27
+ def set_default_cache_keys!(strategy = :append)
28
+ self.set_default_cache_keys(strategy) and self.save
29
+ end
30
+ def self.set_default_cache_keys(strategy = :append)
31
+ self.all.to_a.map { |obj| obj.set_default_cache_keys(strategy) }
32
+ end
33
+ def self.set_default_cache_keys!(strategy = :append)
34
+ self.all.to_a.map { |obj| obj.set_default_cache_keys!(strategy) }
35
+ end
36
+
37
+ def conditional_cache_keys
38
+ [{}]
39
+ end
40
+ def conditional_cache_keys_names
41
+ conditional_cache_keys.map { |k| k[:name] }.compact
42
+ end
43
+ def selected_conditional_cache_keys
44
+ conditional_cache_keys and conditional_cache_keys.select { |cache_key|
45
+ false if cache_key[:name].blank?
46
+ cond_if, cond_unless = cache_key[:if], cache_key[:unless]
47
+
48
+ if cond_if
49
+ if cond_if.is_a?(Proc)
50
+ cond_if = !!cond_if.call
51
+ elsif cond_if.is_a?(String)
52
+ cond_if = !!self.instance_eval(cond_if)
53
+ else
54
+ cond_if = !!cond_if
55
+ end
56
+ else
57
+ cond_if = true
58
+ end
59
+
60
+ if cond_unless
61
+ if cond_unless.is_a?(Proc)
62
+ cond_unless = !cond_unless.call
63
+ elsif cond_unless.is_a?(String)
64
+ cond_unless = !self.instance_eval(cond_unless)
65
+ else
66
+ cond_unless = !cond_unless
67
+ end
68
+ else
69
+ cond_unless = true
70
+ end
71
+
72
+ cond_if and cond_unless
73
+ } or []
74
+ end
75
+ def selected_conditional_cache_keys_names
76
+ selected_conditional_cache_keys.map { |k| k[:name] }.compact
77
+ end
78
+
79
+ class_attribute :forced_cache_keys
80
+ self.forced_cache_keys ||= []
81
+
82
+ def self.add_forced_cache_key(key)
83
+ key = key.to_s
84
+ self.forced_cache_keys << key unless self.forced_cache_keys.include?(key)
85
+ end
86
+ def self.remove_forced_cache_key(key)
87
+ self.forced_cache_keys.delete(key.to_s)
88
+ end
89
+
90
+ def all_cache_keys(cached = true)
91
+ # return @all_cache_keys if @all_cache_keys
92
+ if cached
93
+ @all_cache_keys = cache_keys || []
94
+ @all_cache_keys += (forced_cache_keys || [])
95
+ @all_cache_keys += selected_conditional_cache_keys_names
96
+ @all_cache_keys
97
+ else
98
+ (cache_keys || []) + selected_conditional_cache_keys_names
99
+ end
100
+ end
101
+
102
+
103
+ def cache_keys
104
+ # return @cache_keys if @cache_keys
105
+
106
+ self.cache_keys_str ||= ""
107
+ # @cache_keys = cache_keys_str.split(/\s+/).map { |k| k.strip }.reject { |k| k.blank? }
108
+ self.cache_keys_str.split(/\s+/).map { |k| k.strip }.reject { |k| k.blank? }
109
+ end
110
+ def cache_keys=(_keys)
111
+ _keys ||= []
112
+ self.cache_keys_str = _keys.select { |k|
113
+ k and !k.strip.blank?
114
+ }.map(&:strip).uniq.join("\n")
115
+ cache_keys
116
+ end
117
+ field :perform_caching, type: Boolean, default: true
118
+
119
+ def cache_fragments
120
+ Hancock::Cache::Fragment.where(:name.in => cache_keys)
121
+ end
122
+ def all_cache_fragments
123
+ Hancock::Cache::Fragment.where(:name.in => all_cache_keys(false))
124
+ end
125
+
126
+ def reset_cache_keys
127
+ self.cache_keys = cache_fragments.distinct(:name)
128
+ end
129
+ def reset_cache_keys!
130
+ self.reset_cache_keys and self.save
131
+ end
132
+ def self.reset_cache_keys!
133
+ self.all.map(&:reset_cache_keys!)
134
+ end
135
+
136
+ attr_accessor :cache_cleared
137
+
138
+ after_touch :clear_cache
139
+ after_save :clear_cache
140
+ after_destroy :clear_cache
141
+ def clear_cache
142
+ if perform_caching and !cache_cleared
143
+ # (cache_keys and cache_keys.is_a?(Array) and cache_keys).compact.map(&:strip).uniq.each do |k|
144
+ (all_cache_keys and all_cache_keys.is_a?(Array) and all_cache_keys).compact.map(&:strip).uniq.each do |k|
145
+ unless k.blank?
146
+ k = k.strip
147
+ if _frag = Hancock::Cache::Fragment.where(name: k).first
148
+ _frag.clear!
149
+ else
150
+ Rails.cache.delete(k)
151
+ end
152
+ end
153
+ end
154
+ # @cache_keys = nil
155
+ @all_cache_keys = nil
156
+
157
+ cache_cleared = true
158
+ end
159
+ end
160
+
161
+ end
162
+ end
163
+
164
+ end