Module: CamaleonCms::PluginsHelper
- Included in:
- CamaleonController, HtmlMailer
- Defined in:
- app/helpers/camaleon_cms/plugins_helper.rb
Instance Method Summary collapse
-
#current_plugin(plugin_key = nil) ⇒ Object
method called only from files within plugins directory return the plugin model for current site calculated according to the file caller location.
-
#plugin_asset_path(asset, plugin_key = nil) ⇒ Object
(also: #plugin_asset, #plugin_gem_asset)
return plugin full asset path plugin_key: plugin name asset: (String) asset name sample: <script src=“<%= plugin_asset_path(”admin.js“) %>”></script> => /assets/plugins/my_plugin/admin-54505620f.js sample: <script src=“<%= plugin_asset_path(”admin.js“, ‘my_plugin’) %>”></script> => /assets/plugins/my_plugin/admin-54505620f.js.
-
#plugin_asset_url(asset, plugin_key = nil) ⇒ Object
return the full url for asset of current plugin: asset: (String) asset name plugin_key: (optional) plugin name, default (current plugin caller to this function) sample: plugin_asset_url(“css/main.css”) => return: myhost.com/assets/plugins/my_plugin/assets/css/main-54505620f.css.
-
#plugin_destroy(plugin_key) ⇒ Object
remove a plugin from current site plugin_key: key of the plugin return model of the plugin removed DEPRECATED: PLUGINS AND THEMES CANNOT BE DESTROYED.
-
#plugin_install(plugin_key) ⇒ Object
install a plugin for current site plugin_key: key of the plugin return model of the plugin.
-
#plugin_layout(layout_name, plugin_key = nil) ⇒ Object
return plugin full layout path plugin_key: plugin name.
-
#plugin_load_helpers(plugin) ⇒ Object
auto load all helpers of this plugin.
-
#plugin_uninstall(plugin_key) ⇒ Object
uninstall a plugin from current site plugin_key: key of the plugin return model of the plugin.
-
#plugin_upgrade(plugin_key) ⇒ Object
upgrade installed plugin in current site for a new version plugin_key: key of the plugin trigger hook “on_upgrade” return model of the plugin.
-
#plugin_view(view_name, plugin_key = nil) ⇒ Object
return plugin full view path plugin_key: plugin name.
-
#plugins_initialize(klass = nil) ⇒ Object
load all plugins + theme installed for current site METHOD IGNORED (is a partial solution to avoid load helpers and cache it for all sites) this method try to load helpers for each request without caching.
-
#self_plugin_key(index = 0) ⇒ Object
return plugin key for current plugin file (helper|controller|view) index: internal control (ignored).
Instance Method Details
#current_plugin(plugin_key = nil) ⇒ Object
method called only from files within plugins directory return the plugin model for current site calculated according to the file caller location
157 158 159 160 161 162 |
# File 'app/helpers/camaleon_cms/plugins_helper.rb', line 157 def current_plugin(plugin_key = nil) _key = plugin_key || self_plugin_key(1) cama_cache_fetch("current_plugin_#{_key}") do current_site.get_plugin(_key) end end |
#plugin_asset_path(asset, plugin_key = nil) ⇒ Object Also known as: plugin_asset, plugin_gem_asset
return plugin full asset path plugin_key: plugin name asset: (String) asset name sample: <script src=“<%= plugin_asset_path(”admin.js“) %>”></script> => /assets/plugins/my_plugin/admin-54505620f.js sample: <script src=“<%= plugin_asset_path(”admin.js“, ‘my_plugin’) %>”></script> => /assets/plugins/my_plugin/admin-54505620f.js
97 98 99 100 101 102 103 104 105 106 107 |
# File 'app/helpers/camaleon_cms/plugins_helper.rb', line 97 def plugin_asset_path(asset, plugin_key = nil) if plugin_key.present? && plugin_key.include?("/") return plugin_asset_url(plugin_key, asset || self_plugin_key(1)) end key = plugin_key || self_plugin_key(1) if PluginRoutes.plugin_info(key)["gem_mode"] "plugins/#{key}/#{asset}" else "plugins/#{key}/assets/#{asset}" end end |
#plugin_asset_url(asset, plugin_key = nil) ⇒ Object
return the full url for asset of current plugin: asset: (String) asset name plugin_key: (optional) plugin name, default (current plugin caller to this function) sample:
plugin_asset_url("css/main.css") => return: http://myhost.com/assets/plugins/my_plugin/assets/css/main-54505620f.css
116 117 118 119 120 121 122 123 124 |
# File 'app/helpers/camaleon_cms/plugins_helper.rb', line 116 def plugin_asset_url(asset, plugin_key = nil) key = plugin_key || self_plugin_key(1) p = PluginRoutes.plugin_info(key)["gem_mode"] ? "plugins/#{key}/#{asset}" : "plugins/#{key}/assets/#{asset}" begin asset_url(p) rescue NoMethodError => e p end end |
#plugin_destroy(plugin_key) ⇒ Object
remove a plugin from current site plugin_key: key of the plugin return model of the plugin removed DEPRECATED: PLUGINS AND THEMES CANNOT BE DESTROYED
62 63 |
# File 'app/helpers/camaleon_cms/plugins_helper.rb', line 62 def plugin_destroy(plugin_key) end |
#plugin_install(plugin_key) ⇒ Object
install a plugin for current site plugin_key: key of the plugin return model of the plugin
30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'app/helpers/camaleon_cms/plugins_helper.rb', line 30 def plugin_install(plugin_key) if PluginRoutes.plugin_info(plugin_key).nil? Rails.logger.info "=========== Plugin not found: #{plugin_key}" else plugin_model = current_site.plugins.where(slug: plugin_key).first_or_create! plugin_model.installed_version= plugin_model.settings["version"] return plugin_model if plugin_model.active? plugin_model.active PluginRoutes.reload # plugins_initialize(self) hook_run(plugin_model.settings, "on_active", plugin_model) plugin_model end end |
#plugin_layout(layout_name, plugin_key = nil) ⇒ Object
return plugin full layout path plugin_key: plugin name
67 68 69 70 71 72 73 74 |
# File 'app/helpers/camaleon_cms/plugins_helper.rb', line 67 def plugin_layout(layout_name, plugin_key = nil) key = plugin_key || self_plugin_key(1) if PluginRoutes.plugin_info(key)["gem_mode"] "plugins/#{key}/layouts/#{layout_name}" else "plugins/#{key}/views/layouts/#{layout_name}" end end |
#plugin_load_helpers(plugin) ⇒ Object
auto load all helpers of this plugin
127 128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'app/helpers/camaleon_cms/plugins_helper.rb', line 127 def plugin_load_helpers(plugin) return if !plugin.present? || !plugin["helpers"].present? plugin["helpers"].each do |h| begin next if self.class.include?(h.constantize) self.class_eval do include h.constantize end rescue => e Rails.logger.info "---------------------------app loading error for #{h}: #{e.}. Please check the plugins and themes presence" end end end |
#plugin_uninstall(plugin_key) ⇒ Object
uninstall a plugin from current site plugin_key: key of the plugin return model of the plugin
48 49 50 51 52 53 54 55 56 |
# File 'app/helpers/camaleon_cms/plugins_helper.rb', line 48 def plugin_uninstall(plugin_key) plugin_model = current_site.plugins.where(slug: plugin_key).first_or_create! return plugin_model unless plugin_model.active? plugin_model.inactive PluginRoutes.reload # plugins_initialize(self) hook_run(plugin_model.settings, "on_inactive", plugin_model) plugin_model end |
#plugin_upgrade(plugin_key) ⇒ Object
upgrade installed plugin in current site for a new version plugin_key: key of the plugin trigger hook “on_upgrade” return model of the plugin
20 21 22 23 24 25 |
# File 'app/helpers/camaleon_cms/plugins_helper.rb', line 20 def plugin_upgrade(plugin_key) plugin_model = current_site.plugins.where(slug: plugin_key).first! hook_run(plugin_model.settings, "on_upgrade", plugin_model) plugin_model.installed_version= plugin_model.settings["version"] plugin_model end |
#plugin_view(view_name, plugin_key = nil) ⇒ Object
return plugin full view path plugin_key: plugin name
78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'app/helpers/camaleon_cms/plugins_helper.rb', line 78 def plugin_view(view_name, plugin_key = nil) if plugin_key.present? && plugin_key.include?("/") # fix for 1.x k = view_name view_name = plugin_key plugin_key = k end key = plugin_key || self_plugin_key(1) if PluginRoutes.plugin_info(key)["gem_mode"] "plugins/#{key}/#{view_name}" else "plugins/#{key}/views/#{view_name}" end end |
#plugins_initialize(klass = nil) ⇒ Object
load all plugins + theme installed for current site METHOD IGNORED (is a partial solution to avoid load helpers and cache it for all sites) this method try to load helpers for each request without caching
5 6 7 8 9 10 11 12 13 14 |
# File 'app/helpers/camaleon_cms/plugins_helper.rb', line 5 def plugins_initialize(klass = nil) mod = Module.new PluginRoutes.enabled_apps(current_site).each{|plugin| next if !plugin.present? || !plugin["helpers"].present? plugin["helpers"].each do |h| mod.send :include, h.constantize end } (klass || self).send :extend, mod end |
#self_plugin_key(index = 0) ⇒ Object
return plugin key for current plugin file (helper|controller|view) index: internal control (ignored)
143 144 145 146 147 148 149 150 151 152 153 |
# File 'app/helpers/camaleon_cms/plugins_helper.rb', line 143 def self_plugin_key(index = 0) f = caller[index] if f.include?('/apps/plugins/') key = f.split('/apps/plugins/').last.split("/").first elsif f.include?('/plugins/') key = f.split('/plugins/').last.split("/").first else key = f.split('/gems/').last.split("/").first end PluginRoutes.plugin_info(key)['key'] rescue raise("Not found plugin with key: #{key} or dirname: #{key}") end |