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.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +4 -0
- data/README.md +35 -0
- data/Rakefile +2 -0
- data/app/assets/javascripts/hancock/rails_admin/plugins/cache.coffee +4 -0
- data/app/assets/javascripts/hancock/rails_admin/plugins/cache/custom/ui.coffee +0 -0
- data/app/assets/stylesheets/hancock/rails_admin/plugins/cache.sass +3 -0
- data/app/assets/stylesheets/hancock/rails_admin/plugins/cache/custom/theming.sass +0 -0
- data/app/controllers/concerns/hancock/cache/action.rb +58 -0
- data/app/controllers/concerns/hancock/cache/ajax_csrf.rb +25 -0
- data/app/controllers/concerns/hancock/cache/fragments.rb +34 -0
- data/app/controllers/concerns/hancock/cache/no_cache.rb +12 -0
- data/app/helpers/hancock/cache/cache_helper.rb +167 -0
- data/app/models/concerns/hancock/cache/cacheable.rb +164 -0
- data/app/models/concerns/hancock/cache/cleared_stack.rb +43 -0
- data/app/models/concerns/hancock/cache/decorators/fragment.rb +41 -0
- data/app/models/concerns/hancock/cache/loadable.rb +44 -0
- data/app/models/concerns/hancock/cache/snapshotable.rb +49 -0
- data/app/models/hancock/cache/fragment.rb +11 -0
- data/app/views/hancock/_assets.html.slim +24 -0
- data/app/views/layouts/application.html.slim +33 -0
- data/app/views/rails_admin/main/hancock_cache_global_clear.html.slim +25 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/config/initializers/cache_detector.rb +53 -0
- data/config/initializers/hancock_cache.rb +7 -0
- data/config/locales/hancock.cache.ru.yml +59 -0
- data/hancock_cms_cache.gemspec +34 -0
- data/lib/generators/hancock/cache/config/config_generator.rb +13 -0
- data/lib/generators/hancock/cache/config/templates/hancock_cache.erb +14 -0
- data/lib/generators/hancock/cache/models/decorators_generator.rb +24 -0
- data/lib/generators/hancock/cache/models/fragment_generator.rb +39 -0
- data/lib/generators/hancock/cache/models/templates/fragment.erb +38 -0
- data/lib/hancock/cache/admin.rb +37 -0
- data/lib/hancock/cache/admin/fragment.rb +140 -0
- data/lib/hancock/cache/configuration.rb +38 -0
- data/lib/hancock/cache/engine.rb +20 -0
- data/lib/hancock/cache/models/fragment.rb +310 -0
- data/lib/hancock/cache/models/mongoid/fragment.rb +259 -0
- data/lib/hancock/cache/rails_admin_ext/hancock_cache_clear.rb +95 -0
- data/lib/hancock/cache/rails_admin_ext/hancock_cache_dump_snapshot.rb +92 -0
- data/lib/hancock/cache/rails_admin_ext/hancock_cache_global_clear.rb +74 -0
- data/lib/hancock/cache/rails_admin_ext/hancock_cache_restore_snapshot.rb +92 -0
- data/lib/hancock/cache/rails_admin_ext/hancock_touch.rb +95 -0
- data/lib/hancock/cache/rails_admin_settings_patch.rb +185 -0
- data/lib/hancock/cache/version.rb +5 -0
- data/lib/hancock_cms_cache.rb +34 -0
- data/release.sh +6 -0
- metadata +141 -0
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
|
3
|
+
module Hancock::Cache
|
4
|
+
class ConfigGenerator < Rails::Generators::Base
|
5
|
+
source_root File.expand_path('../templates', __FILE__)
|
6
|
+
|
7
|
+
desc 'Hancock::Cache Config generator'
|
8
|
+
def config
|
9
|
+
template 'hancock_cache.erb', "config/initializers/hancock_cache.rb"
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
Hancock::Cache.configure do |config|
|
2
|
+
##### defaults #####
|
3
|
+
#
|
4
|
+
# config.localize = Hancock.config.localize
|
5
|
+
#
|
6
|
+
# config.runtime_cache_detector = false
|
7
|
+
#
|
8
|
+
# config.preloaded_fragments = []
|
9
|
+
# config.preloaded_fragments += [
|
10
|
+
# {name: 'keyname', desc: 'desc', overwrite: true},
|
11
|
+
# {name: 'no overwrited key', desc: 'desc', overwrite: false}
|
12
|
+
# ]
|
13
|
+
# config.preloaded_fragments << {name: 'somekey', parents: ['keyname']}
|
14
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
|
3
|
+
module Hancock::Cache::Models
|
4
|
+
class DecoratorsGenerator < Rails::Generators::Base
|
5
|
+
source_root File.expand_path('../../../../../../app/models/concerns/hancock/cache/decorators', __FILE__)
|
6
|
+
argument :models, type: :array, default: []
|
7
|
+
|
8
|
+
desc 'Hancock::Cache Models decorators generator'
|
9
|
+
def decorators
|
10
|
+
copied = false
|
11
|
+
(models == ['all'] ? permitted_models : models & permitted_models).each do |c|
|
12
|
+
copied = true
|
13
|
+
copy_file "#{c}.rb", "app/models/concerns/hancock/cache/decorators/#{c}.rb"
|
14
|
+
end
|
15
|
+
puts "U need to set models`s name. One of this: #{permitted_models.join(", ")}." unless copied
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
def permitted_models
|
20
|
+
['fragment']
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
|
3
|
+
module Hancock::Goto::Models
|
4
|
+
class TransferGenerator < Rails::Generators::Base
|
5
|
+
source_root File.expand_path('../templates', __FILE__)
|
6
|
+
argument :class_name_arg, type: :string, default: ""
|
7
|
+
|
8
|
+
desc 'Hancock::Goto Transfer Model generator'
|
9
|
+
def transfer
|
10
|
+
template 'transfer.erb', "app/models/#{file_name}.rb"
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
def class_name
|
15
|
+
class_name_arg.blank? ? "SetClassForTransfer" : class_name_arg
|
16
|
+
end
|
17
|
+
|
18
|
+
def capitalized_class_name
|
19
|
+
class_name.capitalize
|
20
|
+
end
|
21
|
+
|
22
|
+
def camelcased_class_name
|
23
|
+
class_name.camelcase
|
24
|
+
end
|
25
|
+
|
26
|
+
def file_name
|
27
|
+
underscored_class_name
|
28
|
+
end
|
29
|
+
|
30
|
+
def underscored_class_name
|
31
|
+
camelcased_class_name.underscore
|
32
|
+
end
|
33
|
+
|
34
|
+
def underscored_pluralized_class_name
|
35
|
+
underscored_class_name.pluralize
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
class <%= camelcased_class_name %> < Hancock::Cache::Fragment
|
2
|
+
|
3
|
+
############ rails_admin ##############
|
4
|
+
def self.rails_admin_name_synonyms
|
5
|
+
"Кеш Кэш".freeze
|
6
|
+
end
|
7
|
+
def self.rails_admin_navigation_icon
|
8
|
+
''.freeze
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.rails_admin_add_fields
|
12
|
+
[] #super
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.rails_admin_add_config(config)
|
16
|
+
#super(config)
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.admin_can_user_defined_actions
|
20
|
+
[].freeze
|
21
|
+
end
|
22
|
+
def self.admin_cannot_user_defined_actions
|
23
|
+
[].freeze
|
24
|
+
end
|
25
|
+
def self.manager_can_user_defined_actions
|
26
|
+
[].freeze
|
27
|
+
end
|
28
|
+
def self.manager_cannot_user_defined_actions
|
29
|
+
[].freeze
|
30
|
+
end
|
31
|
+
def self.rails_admin_user_defined_visible_actions
|
32
|
+
[].freeze
|
33
|
+
end
|
34
|
+
|
35
|
+
rails_admin(&Hancock::Cache::Admin::Fragment.config(rails_admin_add_fields) { |config|
|
36
|
+
rails_admin_add_config(config)
|
37
|
+
})
|
38
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Hancock::Cache
|
2
|
+
module Admin
|
3
|
+
|
4
|
+
def self.caching_block(is_active = false, options = {})
|
5
|
+
if is_active.is_a?(Hash)
|
6
|
+
is_active, options = (is_active[:active] || false), is_active
|
7
|
+
end
|
8
|
+
|
9
|
+
Proc.new {
|
10
|
+
active is_active
|
11
|
+
label options[:label] || I18n.t('hancock.cache')
|
12
|
+
field :perform_caching, :toggle
|
13
|
+
field :cache_keys_str, :text do
|
14
|
+
searchable true
|
15
|
+
end
|
16
|
+
field :cache_fragments do
|
17
|
+
read_only true
|
18
|
+
formatted_value do
|
19
|
+
bindings and bindings[:object] and bindings[:object].cache_fragments.all.to_a.map do |_frag|
|
20
|
+
bindings[:view].link_to(
|
21
|
+
_frag.name,
|
22
|
+
bindings[:view].show_path(model_name: _frag.rails_admin_model, id: _frag.id),
|
23
|
+
)
|
24
|
+
end.join(", ").html_safe
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
Hancock::RailsAdminGroupPatch::hancock_cms_group(self, options[:fields] || {})
|
29
|
+
|
30
|
+
if block_given?
|
31
|
+
yield self
|
32
|
+
end
|
33
|
+
}
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,140 @@
|
|
1
|
+
module Hancock::Cache
|
2
|
+
module Admin
|
3
|
+
module Fragment
|
4
|
+
def self.config(fields = {})
|
5
|
+
Proc.new {
|
6
|
+
navigation_label I18n.t('hancock.cache')
|
7
|
+
|
8
|
+
list do
|
9
|
+
field :enabled, :toggle
|
10
|
+
field :is_action_cache do
|
11
|
+
read_only true
|
12
|
+
end
|
13
|
+
|
14
|
+
field :name_n_desc_n_parents
|
15
|
+
# field :name_n_desc
|
16
|
+
field :name do
|
17
|
+
visible false
|
18
|
+
searchable true
|
19
|
+
end
|
20
|
+
field :desc do
|
21
|
+
visible false
|
22
|
+
searchable true
|
23
|
+
end
|
24
|
+
|
25
|
+
field :data do
|
26
|
+
pretty_value do
|
27
|
+
bindings[:object].data(false)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
field :last_clear_data
|
32
|
+
field :last_clear_time do
|
33
|
+
visible false
|
34
|
+
searchable false
|
35
|
+
end
|
36
|
+
field :last_clear_user do
|
37
|
+
visible false
|
38
|
+
searchable false
|
39
|
+
end
|
40
|
+
|
41
|
+
field :on_ram, :toggle
|
42
|
+
field :is_html, :toggle
|
43
|
+
field :virtual_path do
|
44
|
+
searchable true
|
45
|
+
end
|
46
|
+
|
47
|
+
field :snapshot_data
|
48
|
+
field :snapshot do
|
49
|
+
visible false
|
50
|
+
searchable true
|
51
|
+
pretty_value do
|
52
|
+
bindings[:object].get_snapshot(false)
|
53
|
+
end
|
54
|
+
queryable true
|
55
|
+
end
|
56
|
+
field :last_dump_snapshot_time do
|
57
|
+
visible false
|
58
|
+
end
|
59
|
+
field :last_restore_snapshot_time do
|
60
|
+
visible false
|
61
|
+
end
|
62
|
+
|
63
|
+
scopes [nil, :is_action_cache, :on_ram]
|
64
|
+
end
|
65
|
+
|
66
|
+
edit do
|
67
|
+
field :enabled, :toggle
|
68
|
+
field :is_action_cache do
|
69
|
+
read_only true
|
70
|
+
end
|
71
|
+
field :on_ram, :toggle
|
72
|
+
field :name
|
73
|
+
field :virtual_path
|
74
|
+
field :is_html, :toggle
|
75
|
+
field :desc
|
76
|
+
field :parents, :hancock_multiselect
|
77
|
+
|
78
|
+
field :last_clear_time do
|
79
|
+
read_only true
|
80
|
+
end
|
81
|
+
field :last_clear_user do
|
82
|
+
read_only true
|
83
|
+
end
|
84
|
+
field :data do
|
85
|
+
read_only true
|
86
|
+
end
|
87
|
+
|
88
|
+
field :snapshot do
|
89
|
+
pretty_value do
|
90
|
+
bindings[:object].get_snapshot
|
91
|
+
end
|
92
|
+
read_only do
|
93
|
+
render_object = (bindings[:controller] || bindings[:view])
|
94
|
+
!(render_object and render_object.current_user.admin?)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
field :last_dump_snapshot_time do
|
98
|
+
read_only true
|
99
|
+
end
|
100
|
+
field :last_restore_snapshot_time do
|
101
|
+
read_only true
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
show do
|
106
|
+
field :enabled, :toggle
|
107
|
+
field :is_action_cache do
|
108
|
+
read_only true
|
109
|
+
end
|
110
|
+
field :on_ram, :toggle
|
111
|
+
field :name
|
112
|
+
field :virtual_path
|
113
|
+
field :is_html
|
114
|
+
field :desc
|
115
|
+
field :parents
|
116
|
+
field :parent_names do
|
117
|
+
visible do
|
118
|
+
render_object = (bindings[:controller] || bindings[:view])
|
119
|
+
(render_object and render_object.current_user.admin?)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
field :last_clear_time
|
123
|
+
field :last_clear_user
|
124
|
+
field :data
|
125
|
+
|
126
|
+
field :snapshot do
|
127
|
+
pretty_value do
|
128
|
+
bindings[:object].get_snapshot
|
129
|
+
end
|
130
|
+
end
|
131
|
+
field :last_dump_snapshot_time
|
132
|
+
field :last_restore_snapshot_time
|
133
|
+
end
|
134
|
+
}
|
135
|
+
|
136
|
+
end #def self.config(fields = {})
|
137
|
+
|
138
|
+
end #module Fragment
|
139
|
+
end #module Admin
|
140
|
+
end #module Hancock::Cache
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Hancock::Cache
|
2
|
+
include Hancock::PluginConfiguration
|
3
|
+
|
4
|
+
def self.config_class
|
5
|
+
Configuration
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.configure
|
9
|
+
yield configuration
|
10
|
+
end
|
11
|
+
|
12
|
+
class Configuration
|
13
|
+
|
14
|
+
attr_accessor :localize
|
15
|
+
|
16
|
+
attr_accessor :runtime_cache_detector
|
17
|
+
|
18
|
+
attr_accessor :model_settings_support
|
19
|
+
attr_accessor :user_abilities_support
|
20
|
+
attr_accessor :ra_comments_support
|
21
|
+
|
22
|
+
attr_accessor :preloaded_fragments
|
23
|
+
|
24
|
+
def initialize
|
25
|
+
|
26
|
+
@localize = Hancock.config.localize
|
27
|
+
|
28
|
+
@runtime_cache_detector = false
|
29
|
+
|
30
|
+
@model_settings_support = !!defined?(RailsAdminModelSettings)
|
31
|
+
@user_abilities_support = !!defined?(RailsAdminUserAbilities)
|
32
|
+
@ra_comments_support = !!defined?(RailsAdminComments)
|
33
|
+
|
34
|
+
@preloaded_fragments = []
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Hancock
|
2
|
+
module Cache
|
3
|
+
class Engine < ::Rails::Engine
|
4
|
+
# isolate_namespace Hancock::Cache
|
5
|
+
|
6
|
+
initializer "RailsAdminSettingsPatch (cache)" do
|
7
|
+
if defined?(RailsAdminSettings)
|
8
|
+
::RailsAdminSettings::Setting.send(:include, Hancock::Cache::RailsAdminSettingsPatch)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
initializer "LookupContext Patch" do
|
13
|
+
ActionView::LookupContext.register_detail(:hancock_cache_keys) do
|
14
|
+
[]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,310 @@
|
|
1
|
+
module Hancock::Cache
|
2
|
+
module Models
|
3
|
+
module Fragment
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
include Hancock::Model
|
6
|
+
include Hancock::Enableable
|
7
|
+
|
8
|
+
include Hancock::Cache::Loadable
|
9
|
+
|
10
|
+
include Hancock::Cache.orm_specific('Fragment')
|
11
|
+
|
12
|
+
included do
|
13
|
+
|
14
|
+
include Hancock::Cache::ClearedStack
|
15
|
+
|
16
|
+
def self.rails_admin_name
|
17
|
+
self.name.gsub("::", "~").underscore
|
18
|
+
end
|
19
|
+
|
20
|
+
if Hancock::Cache.config.model_settings_support
|
21
|
+
include RailsAdminModelSettings::ModelSettingable
|
22
|
+
end
|
23
|
+
|
24
|
+
# def set_last_clear_user(forced_user = nil)
|
25
|
+
# self.last_clear_user = forced_user if forced_user
|
26
|
+
# end
|
27
|
+
def set_last_clear_user!(forced_user = nil)
|
28
|
+
self.set_last_clear_user(f_nameorced_user) and self.save
|
29
|
+
end
|
30
|
+
|
31
|
+
def clear_dry(forced_user = nil)
|
32
|
+
if self.set_last_clear_user(forced_user)
|
33
|
+
self.last_clear_time = Time.new
|
34
|
+
self
|
35
|
+
end
|
36
|
+
end
|
37
|
+
def clear_dry!(forced_user = nil)
|
38
|
+
self.clear_dry(forced_user) and self.save
|
39
|
+
end
|
40
|
+
|
41
|
+
def clear(forced_user = nil)
|
42
|
+
return nil if self.is_in_cleared_stack?
|
43
|
+
if self.set_last_clear_user(forced_user)
|
44
|
+
Rails.cache.delete(self.name)
|
45
|
+
self.on_ram_data = nil
|
46
|
+
self.last_clear_time = Time.new
|
47
|
+
self.add_to_cleared_stack
|
48
|
+
self.parents.each { |p| p.clear(forced_user) }
|
49
|
+
self.drop_cleared_stack_if_can
|
50
|
+
self
|
51
|
+
end
|
52
|
+
end
|
53
|
+
def clear!(forced_user = nil)
|
54
|
+
return nil if self.is_in_cleared_stack?
|
55
|
+
if self.set_last_clear_user(forced_user)
|
56
|
+
Rails.cache.delete(self.name)
|
57
|
+
self.on_ram_data = nil
|
58
|
+
self.last_clear_time = Time.new
|
59
|
+
self.add_to_cleared_stack
|
60
|
+
self.parents.each { |p| p.clear(forced_user) }
|
61
|
+
self.drop_cleared_stack_if_can
|
62
|
+
self.save
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def name_from_view=(_name)
|
67
|
+
self.name = name_from_view(_name)
|
68
|
+
end
|
69
|
+
def self.name_from_view(_name)
|
70
|
+
if _name.is_a?(Array)
|
71
|
+
ret = _name.map { |n| name_from_view(n) }
|
72
|
+
else
|
73
|
+
ret = "views/#{_name}"
|
74
|
+
ret = "#{ret}index" if ret[-1] == "/"
|
75
|
+
end
|
76
|
+
ret
|
77
|
+
end
|
78
|
+
|
79
|
+
def self.create_unless_exists(_name, _desc = nil, _virtual_path = "", overwrite = :append)
|
80
|
+
if _name.is_a?(Hash)
|
81
|
+
_name, _desc, _virtual_path, overwrite, parents, on_ram, is_action_cache =
|
82
|
+
_name[:name], _name[:desc], (_name[:_virtual_path] || ""), _name[:overwrite], _name[:parents], _name[:on_ram], _name[:is_action_cache]
|
83
|
+
end
|
84
|
+
on_ram ||= false
|
85
|
+
is_action_cache ||= false
|
86
|
+
|
87
|
+
if _name.is_a?(Array)
|
88
|
+
return _name.map do |n|
|
89
|
+
create_unless_exists(n, _desc, _virtual_path, overwrite) unless n.blank?
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
unless _name.blank?
|
94
|
+
if Hancock::Cache::Fragment.where(name: _name).count == 0
|
95
|
+
if parents
|
96
|
+
if parents.first.is_a?(String)
|
97
|
+
parents = Hancock::Cache::Fragment.by_name(parents).distinct(:_id)
|
98
|
+
else
|
99
|
+
parents = parents.map(&:_id).uniq.compact
|
100
|
+
end
|
101
|
+
end
|
102
|
+
frag = Hancock::Cache::Fragment.create(name: _name, desc: _desc, virtual_path: _virtual_path, parent_ids: parents, on_ram: on_ram, is_action_cache: is_action_cache)
|
103
|
+
else
|
104
|
+
frag = Hancock::Cache::Fragment.where(name: _name).first
|
105
|
+
if overwrite.is_a?(Symbol) or overwrite.is_a?(String)
|
106
|
+
case overwrite.to_sym
|
107
|
+
when :append
|
108
|
+
frag.desc = "\n#{_desc}" unless frag.desc == _desc
|
109
|
+
frag.virtual_path += "\n#{_virtual_path}" unless frag.virtual_path.strip == _virtual_path.strip
|
110
|
+
if parents
|
111
|
+
if parents.first.is_a?(String)
|
112
|
+
frag.parent_ids += Hancock::Cache::Fragment.by_name(parents).distinct(:_id)
|
113
|
+
else
|
114
|
+
frag.parent_ids += parents.map(&:_id).uniq.compact
|
115
|
+
end
|
116
|
+
end
|
117
|
+
frag.on_ram = on_ram
|
118
|
+
frag.is_action_cache = is_action_cache
|
119
|
+
frag = frag.save and frag
|
120
|
+
|
121
|
+
when :overwrite
|
122
|
+
frag.desc = _desc
|
123
|
+
frag.virtual_path = _desc
|
124
|
+
if parents
|
125
|
+
if parents.first.is_a?(String)
|
126
|
+
frag.parent_ids = Hancock::Cache::Fragment.by_name(parents).distinct(:_id)
|
127
|
+
else
|
128
|
+
frag.parent_ids = parents.map(&:_id)
|
129
|
+
end
|
130
|
+
frag.parent_ids.uniq!
|
131
|
+
frag.parent_ids.compact!
|
132
|
+
end
|
133
|
+
frag.on_ram = on_ram
|
134
|
+
frag.is_action_cache = is_action_cache
|
135
|
+
frag = frag.save and frag
|
136
|
+
end #case overwrite.to_sym
|
137
|
+
else
|
138
|
+
if overwrite
|
139
|
+
frag.desc = _desc
|
140
|
+
frag.virtual_path = _desc
|
141
|
+
if parents
|
142
|
+
if parents.first.is_a?(String)
|
143
|
+
frag.parent_ids = Hancock::Cache::Fragment.by_name(parents).distinct(:_id)
|
144
|
+
else
|
145
|
+
frag.parent_ids = parents.map(&:_id).uniq.compact
|
146
|
+
end
|
147
|
+
end
|
148
|
+
frag.on_ram = on_ram
|
149
|
+
frag.is_action_cache = is_action_cache
|
150
|
+
frag = frag.save and frag
|
151
|
+
end
|
152
|
+
end #if overwrite.is_a?(Symbol) or overwrite.is_a?(String)
|
153
|
+
end #if Hancock::Cache::Fragment.where(name: _name).count == 0
|
154
|
+
|
155
|
+
frag
|
156
|
+
end #unless _name.blank?
|
157
|
+
end
|
158
|
+
|
159
|
+
def self.load_from_preloaded
|
160
|
+
Hancock::Cache.config.preloaded_fragments.map do |f_data|
|
161
|
+
Hancock::Cache::Fragment.create_unless_exists(f_data)
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
def self.clear_all(forced_user = nil)
|
166
|
+
self.all.to_a.map { |c| c.clear!(forced_user) }
|
167
|
+
end
|
168
|
+
|
169
|
+
|
170
|
+
def get_as_hash(overwrite = nil)
|
171
|
+
{
|
172
|
+
name: self.name,
|
173
|
+
desc: self.desc,
|
174
|
+
virtual_path: self.virtual_path,
|
175
|
+
parents: self.parents.map(&:name),
|
176
|
+
on_ram: self.on_ram,
|
177
|
+
is_action_cache: self.is_action_cache,
|
178
|
+
overwrite: overwrite
|
179
|
+
}.compact
|
180
|
+
end
|
181
|
+
def get_as_json(overwrite = nil)
|
182
|
+
get_as_hash(overwrite).to_json
|
183
|
+
end
|
184
|
+
def self.get_as_hash(overwrite = nil)
|
185
|
+
Hancock::Cache::Fragment.cutted.all.to_a.map { |f| f.get_as_hash(overwrite) }
|
186
|
+
end
|
187
|
+
def self.get_as_json(overwrite = nil)
|
188
|
+
Hancock::Cache::Fragment.cutted.all.to_a.map { |f| f.get_as_json(overwrite) }
|
189
|
+
end
|
190
|
+
|
191
|
+
# worse but working
|
192
|
+
def self.copy_preloaded_to_config_file(fname = "config/initializers/hancock_cache.rb")
|
193
|
+
File.truncate(fname, File.size(fname) - 4)
|
194
|
+
File.open(fname, 'a') do |file|
|
195
|
+
file.write " config.preloaded_fragments = [\n #{Hancock::Cache::Fragment.get_as_json.join(",\n ")}\n ]\n # Hancock::Cache::Fragment.load_from_preloaded\n # Hancock::MODELS.map { |m| m.respond_to?(:set_default_cache_keys!) and m.set_default_cache_keys! }\nend"
|
196
|
+
end
|
197
|
+
end
|
198
|
+
def self.copy_new_preloaded_to_config_file(fname = "config/initializers/hancock_cache.rb")
|
199
|
+
File.truncate(fname, File.size(fname) - 4)
|
200
|
+
_text = Hancock::Cache::Fragment.where(:name.nin => Hancock::Cache.config.preloaded_fragments.map { |f|
|
201
|
+
f[:name]
|
202
|
+
}).all.to_a.map { |f|
|
203
|
+
f.get_as_json(false)
|
204
|
+
}.join(",\n ")
|
205
|
+
File.open(fname, 'a') do |file|
|
206
|
+
file.write " config.preloaded_fragments += [\n #{_text}\n ]\n # Hancock::Cache::Fragment.load_from_preloaded\n # Hancock::MODELS.map { |m| m.respond_to?(:set_default_cache_keys!) and m.set_default_cache_keys! }\nend"
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
|
211
|
+
def set_for_object(obj)
|
212
|
+
return set_for_objects(obj) if obj.is_a?(::Array)
|
213
|
+
return set_for_model(obj.klass, true) if obj.is_a?(::Mongoid::Criteria)
|
214
|
+
obj and
|
215
|
+
obj.fields.keys.include?(:cache_keys_str) and obj.respond_to?(:cache_keys) and
|
216
|
+
!obj.cache_keys.include?(self.name) and
|
217
|
+
obj.class.where(id: obj.id).update(cache_keys_str: "#{obj.cache_keys_str}\n#{self.name}".strip)
|
218
|
+
end
|
219
|
+
def set_for_objects(objs)
|
220
|
+
if objs
|
221
|
+
objs.map do |obj|
|
222
|
+
set_for_object(obj)
|
223
|
+
end
|
224
|
+
end
|
225
|
+
end
|
226
|
+
def set_for_model(model, as_forced = false)
|
227
|
+
return set_for_models(model, as_forced) if model.is_a?(::Array)
|
228
|
+
if model
|
229
|
+
if as_forced and model.respond_to :add_forced_cache_key
|
230
|
+
model.send(:add_forced_cache_key, self.name) unless model.forced_cache_key.include?(self.name)
|
231
|
+
else
|
232
|
+
set_for_objects(model.not(cache_keys_str: /(^|\n)#{Regexp.escape self.name}(\n|$)/).all.to_a)
|
233
|
+
end
|
234
|
+
end
|
235
|
+
# model and set_for_objects(model.all.to_a)
|
236
|
+
end
|
237
|
+
def set_for_models(models, as_forced = false)
|
238
|
+
if models
|
239
|
+
models.map do |model|
|
240
|
+
set_for_model(model)
|
241
|
+
end
|
242
|
+
end
|
243
|
+
end
|
244
|
+
def set_for_setting(setting_obj)
|
245
|
+
if defined?(RailsAdminModelSettings)
|
246
|
+
if setting_obj.is_a?(Hash)
|
247
|
+
unless setting_obj[:keys].present?
|
248
|
+
if setting_obj[:key].nil?
|
249
|
+
return set_for_setting({ns: setting_obj[:ns], key: nil})
|
250
|
+
else
|
251
|
+
# setting_obj = RailsAdminSettings::Setting.where(ns: setting_obj[:ns], key: setting_obj[:key]).not(cache_keys_str: /(^|\n)#{Regexp.escape self.name}(\n|$)/).first
|
252
|
+
setting_obj = Settings.ns(setting_obj[:ns]).getnc(setting_obj[:key])
|
253
|
+
end
|
254
|
+
|
255
|
+
else
|
256
|
+
# setting_obj = RailsAdminSettings::Setting.where(ns: setting_obj[:ns], :key.in => setting_obj[:keys]).not(cache_keys_str: /(^|\n)#{Regexp.escape self.name}(\n|$)/).all.to_a
|
257
|
+
return setting_obj[:keys].map do |k|
|
258
|
+
# set_for_setting({ns: setting_obj[:ns], key: k}) unless k.blank?
|
259
|
+
set_for_setting(Settings.ns(setting_obj[:ns]).getnc(k)) unless k.blank?
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
263
|
+
elsif setting_obj.is_a?(Array)
|
264
|
+
return setting_obj.map do |obj|
|
265
|
+
set_for_setting(obj) unless obj.blank?
|
266
|
+
end
|
267
|
+
end
|
268
|
+
|
269
|
+
setting_obj and set_for_object(setting_obj) and setting_obj.reload
|
270
|
+
end
|
271
|
+
end
|
272
|
+
|
273
|
+
def self.rails_admin_name_synonyms
|
274
|
+
"Кеш Кэш".freeze
|
275
|
+
end
|
276
|
+
def self.rails_admin_navigation_icon
|
277
|
+
''.freeze
|
278
|
+
end
|
279
|
+
|
280
|
+
|
281
|
+
def self.manager_can_add_actions
|
282
|
+
ret = [:hancock_cache_clear, :hancock_cache_global_clear, :hancock_cache_dump_snapshot, :hancock_cache_restore_snapshot]
|
283
|
+
ret << :model_settings if Hancock::Cache.config.model_settings_support
|
284
|
+
# ret << :model_accesses if Hancock::Cache.config.user_abilities_support
|
285
|
+
# ret += [:comments, :model_comments] if Hancock::Cache.config.ra_comments_support
|
286
|
+
ret.freeze
|
287
|
+
end
|
288
|
+
def self.rails_admin_add_visible_actions
|
289
|
+
ret = [:hancock_cache_clear, :hancock_cache_global_clear, :hancock_cache_dump_snapshot, :hancock_cache_restore_snapshot]
|
290
|
+
ret << :model_settings if Hancock::Cache.config.model_settings_support
|
291
|
+
ret << :model_accesses if Hancock::Cache.config.user_abilities_support
|
292
|
+
# ret += [:comments, :model_comments] if Hancock::Cache.config.ra_comments_support
|
293
|
+
ret.freeze
|
294
|
+
end
|
295
|
+
|
296
|
+
after_touch :reload_fragments
|
297
|
+
after_save :reload_fragments
|
298
|
+
after_destroy :reload_fragments
|
299
|
+
protected
|
300
|
+
def reload_fragments
|
301
|
+
if ::ApplicationController.respond_to?(:reload_fragments)
|
302
|
+
::ApplicationController.reload_fragments
|
303
|
+
end
|
304
|
+
end
|
305
|
+
|
306
|
+
end
|
307
|
+
|
308
|
+
end
|
309
|
+
end
|
310
|
+
end
|