From 8b2281ca17085783962be767f82ea613d6310ae2 Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Wed, 25 Mar 2015 20:56:50 +0800 Subject: [PATCH] now the caching initialized with engine Conflicts: Gemfile --- Gemfile | 2 +- app/models/module_app.rb | 2 ++ app/models/orbit_observer.rb | 8 ++++---- downloaded_extensions.rb.lock | 7 +++++++ lib/orbit_app/module/registration.rb | 11 ++++++++++- lib/orbit_app/register_module.rb | 18 ++++++++++++++++++ 6 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 downloaded_extensions.rb.lock diff --git a/Gemfile b/Gemfile index 8acd07d..6e81166 100644 --- a/Gemfile +++ b/Gemfile @@ -84,7 +84,7 @@ end #ask gem 'gotcha' -#caching +#caching observers gem 'mongoid-observers' #desktop diff --git a/app/models/module_app.rb b/app/models/module_app.rb index efee743..40d8ac0 100644 --- a/app/models/module_app.rb +++ b/app/models/module_app.rb @@ -15,6 +15,7 @@ class ModuleApp field :desktop_enabled, type: Boolean, default: false field :widget_settings field :store_permission_granted, type: Boolean, default: false + field :cache_models, type: Array, default: [] has_many :categories, dependent: :destroy, :autosave => true has_and_belongs_to_many :tags, dependent: :destroy, :autosave => true @@ -34,6 +35,7 @@ class ModuleApp self[:widget_methods] = reg.get_widget_methods self[:widget_settings] = reg.get_widget_settings self[:desktop_enabled] = reg.is_desktop_enabled + self[:cache_models] = reg.get_models_to_cache end def sub_managers diff --git a/app/models/orbit_observer.rb b/app/models/orbit_observer.rb index e1996a6..5bf400e 100644 --- a/app/models/orbit_observer.rb +++ b/app/models/orbit_observer.rb @@ -1,6 +1,6 @@ class OrbitObserver < Mongoid::Observer - # observe OrbitApp.get_models - observe :tag, :category + models_to_cache = OrbitApp.get_models_for_caching + observe models_to_cache.keys def after_save(document) clear_cache(document) @@ -11,7 +11,7 @@ class OrbitObserver < Mongoid::Observer end def clear_cache(document) - # model_module_hash = OrbitApp.get_model_module_hash + model_module_hash = OrbitApp.get_model_hash_for_caching case document.class.to_s when 'Tag' document.module_app.each do |module_app| @@ -20,7 +20,7 @@ class OrbitObserver < Mongoid::Observer when 'Category' Rails.cache.delete_matched( /#{ document.module_app.key }/ ) else - # Rails.cache.delete_matched( /#{model_module_hash[document.class.to_s]}/ ) + Rails.cache.delete_matched( /#{model_module_hash[document.name.underscore.to_sym]}/ ) end end end \ No newline at end of file diff --git a/downloaded_extensions.rb.lock b/downloaded_extensions.rb.lock new file mode 100644 index 0000000..83f331d --- /dev/null +++ b/downloaded_extensions.rb.lock @@ -0,0 +1,7 @@ +GEM + specs: + +PLATFORMS + ruby + +DEPENDENCIES diff --git a/lib/orbit_app/module/registration.rb b/lib/orbit_app/module/registration.rb index 25f6f1b..ae8b9fd 100644 --- a/lib/orbit_app/module/registration.rb +++ b/lib/orbit_app/module/registration.rb @@ -40,7 +40,7 @@ module OrbitApp end class RegisteredModule - attr_reader :name,:key,:base_path, :module_label,:widget_methods,:authorizable_models,:is_authorizable, :data_count, :widget_settings, :icon_class_no_sidebar,:desktop_enabled + attr_reader :name,:key,:base_path, :module_label,:widget_methods,:authorizable_models,:is_authorizable, :data_count, :widget_settings, :icon_class_no_sidebar,:desktop_enabled, :models_to_cache def initialize(name,&block) @name = name @@ -48,6 +48,7 @@ module OrbitApp @side_bar = nil @module_label = @name @widget_methods = [] + @models_to_cache = [] @widget_settings = {} @is_taggable = false @authorizable_models = [] @@ -93,6 +94,14 @@ module OrbitApp @widget_settings = settings.first end + def models_to_cache(models) + @models_to_cache = models + end + + def get_models_to_cache + @models_to_cache + end + def get_widget_settings @widget_settings end diff --git a/lib/orbit_app/register_module.rb b/lib/orbit_app/register_module.rb index 7c62298..f536173 100644 --- a/lib/orbit_app/register_module.rb +++ b/lib/orbit_app/register_module.rb @@ -21,6 +21,24 @@ module OrbitApp end end + def get_models_for_caching + @models_for_caching = {} + ModuleApp.all.each do |ma| + # models.concat(ma.cache_models) + ma.cache_models.each do |cm| + @models_for_caching[cm] = ma.key + end + end + @models_for_caching[:tag] = "Tag" + @models_for_caching[:category] = "Category" + puts @models_for_caching.to_s + return @models_for_caching + end + + def get_model_hash_for_caching + @models_for_caching + end + def check_module_permissions store_token = Site.first.store_token rescue nil module_apps = ModuleApp.all