class CamaManager

Public Class Methods

add_after_reload_routes(command) click to toggle source

permit to add extra actions for reload routes

# File lib/plugin_routes.rb, line 159
def self.add_after_reload_routes(command)
  @@_after_reload << command
end
add_anonymous_hook(hook_key, callback, hook_id = '') click to toggle source

add a new anonymous hook sample: PluginRoutes.add_anonymous_hook('before_admin', lambda{|params| puts params }) @param hook_key [String], key of hook @param hook_id [String], identifier for the anonymous hook @param callback [Lambda], anonymous function to be called when the hook was called @return nil

# File lib/plugin_routes.rb, line 124
def add_anonymous_hook(hook_key, callback, hook_id = '')
  @@anonymous_hooks[hook_key] ||= []
  @@anonymous_hooks[hook_key] << {id: hook_id, callback: callback}
end
all_apps() click to toggle source

return all apps loaded

# File lib/plugin_routes.rb, line 347
def self.all_apps
  all_plugins+all_themes
end
all_enabled_apps() click to toggle source

return all enabled apps as []: system, themes, plugins

# File lib/plugin_routes.rb, line 187
def self.all_enabled_apps
  [system_info] + all_enabled_themes + all_enabled_plugins
end
all_enabled_plugins() click to toggle source

return all enabled plugins (a theme is enabled if at least one site has installed)

# File lib/plugin_routes.rb, line 203
def self.all_enabled_plugins
  r = cache_variable("all_enabled_plugins")
  return r unless r.nil?
  res, enabled_ps = [], []
  get_sites.each { |site|  enabled_ps += site.plugins.active.pluck(:slug) }
  all_plugins.each do |plugin|
    if enabled_ps.include?(plugin["key"])
      res << plugin
    end
  end
  cache_variable("all_enabled_plugins", res)
end
all_enabled_themes() click to toggle source

return all enabled themes (a theme is enabled if at least one site is assigned)

# File lib/plugin_routes.rb, line 192
def self.all_enabled_themes
  r = cache_variable("all_enabled_themes"); return r unless r.nil?
  res = []
  get_sites.each do |site|
    i = theme_info(site.get_theme_slug)
    res << i if i.present?
  end
  cache_variable("all_enabled_themes", res)
end
all_helpers() click to toggle source

all helpers of enabled plugins

# File lib/plugin_routes.rb, line 227
def self.all_helpers
  r = cache_variable("plugins_helper")
  return r unless r.nil?
  res = []
  all_apps.each do |settings|
    res += settings["helpers"] if settings["helpers"].present?
  end
  cache_variable("plugins_helper", res.uniq)
end
all_locales() click to toggle source

return all locales for all sites joined by |

# File lib/plugin_routes.rb, line 268
def self.all_locales
  r = cache_variable("site_all_locales"); return r unless r.nil?
  res = []
  get_sites.each do |s|
    res += s.get_languages
  end
  cache_variable("site_all_locales", res.uniq.join("|"))
end
all_locales_for_routes() click to toggle source

return all locales for translated routes

# File lib/plugin_routes.rb, line 284
def self.all_locales_for_routes
  r = cache_variable("all_locales_for_routes"); return r unless r.nil?
  res = {}
  all_locales.split("|").each do |l|
    res[l] = "_#{l}"
  end
  res[false] = ''
  cache_variable("all_locales_for_routes", res)
end
all_plugins() click to toggle source

return all plugins located in cms and in this project

# File lib/plugin_routes.rb, line 300
def self.all_plugins
  camaleon_gem = get_gem('camaleon_cms')
  return [] if !camaleon_gem
  r = cache_variable("all_plugins"); return r unless (r.nil? || r == [])
  res = get_gem_plugins
  entries = [".", ".."]
  res.each{|plugin| entries << plugin["key"] }
  (Dir["#{apps_dir}/plugins/*"] + Dir["#{camaleon_gem.gem_dir}/app/apps/plugins/*"]).each do |path|
    entry = path.split("/").last
    config = File.join(path, "config", "config.json")
    next if entries.include?(entry) || !File.directory?(path) || !File.exist?(config)
    p = JSON.parse(File.read(config))
    p = p.with_indifferent_access rescue p
    p["key"] = entry
    p["path"] = path
    p["kind"] = "plugin"
    res << p
    entries << entry
  end
  cache_variable("all_plugins", res)
end
all_themes() click to toggle source

return an array of all themes installed for all sites

# File lib/plugin_routes.rb, line 323
def self.all_themes
  camaleon_gem = get_gem('camaleon_cms')
  return [] if !camaleon_gem
  r = cache_variable("all_themes"); return r unless (r.nil? || r == [])
  res = get_gem_themes
  entries = [".", ".."]
  res.each{|theme| entries << theme["key"] }
  (Dir["#{apps_dir}/themes/*"] + Dir["#{camaleon_gem.gem_dir}/app/apps/themes/*"]).each do |path|
    entry = path.split("/").last
    config = File.join(path, "config", "config.json")
    next if entries.include?(entry) || !File.directory?(path) || !File.exist?(config)
    p = JSON.parse(File.read(config))
    p = p.with_indifferent_access rescue p
    p["key"] = entry
    p["path"] = path
    p["kind"] = "theme"
    p["title"] = p["name"]
    res << p
    entries << entry
  end
  cache_variable("all_themes", res)
end
all_translations(key, *args) click to toggle source

return all translations for all languages, sample: ['Sample', 'Ejemplo', '.…']

# File lib/plugin_routes.rb, line 278
def self.all_translations(key, *args)
  args = args.extract_options!
  all_locales.split('|').map{|_l| I18n.t(key, args.merge({locale: _l})) }.uniq
end
apps_dir() click to toggle source

return apps directory path

# File lib/generators/camaleon_cms/install_template/plugin_routes.rb, line 17
def self.apps_dir
  dir =  "#{File.dirname(__FILE__)}".split("/")
  dir.pop
  dir.join("/")+ '/app/apps'
end
cache_variable(var_name, value=nil) click to toggle source
# File lib/plugin_routes.rb, line 243
def self.cache_variable(var_name, value=nil)
  @@_vars.push(var_name).uniq!
  #if Rails.env != "development" # disable cache plugin routes for develoment mode
    cache = class_variable_get("@@cache_#{var_name}") rescue nil
    return cache if value.nil?
  #end
  class_variable_set("@@cache_#{var_name}", value)
  value
end
db_installed?() click to toggle source

check if db migrate already done

# File lib/plugin_routes.rb, line 263
def self.db_installed?
  @@is_db_installed ||= ActiveRecord::Base.connection.table_exists?(CamaleonCms::Site.table_name)
end
default_url_options() click to toggle source

return the default url options for Camaleon CMS

# File lib/plugin_routes.rb, line 404
def self.default_url_options
  options = { host: (CamaleonCms::Site.main_site.slug rescue "") }
  options.merge!({ protocol: 'https' }) if Rails.application.config.force_ssl
  options
end
destroy_plugin(plugin_key) click to toggle source

destroy plugin

# File lib/plugin_routes.rb, line 238
def self.destroy_plugin(plugin_key)
  FileUtils.rm_r(Rails.root.join("app", "apps", "plugins", plugin_key)) rescue ""
  PluginRoutes.reload
end
draw_gems() click to toggle source

draw “all” gems registered for the plugins or themes and camaleon gems

# File lib/generators/camaleon_cms/install_template/plugin_routes.rb, line 4
def self.draw_gems
  res = []
  dirs = [] + Dir["#{apps_dir}/plugins/*"] + Dir["#{apps_dir}/themes/*"]

  dirs.each do |path|
    next if [".", ".."].include?(path)
    g = File.join(path, "config", "Gemfile")
    res << File.read(g) if File.exist?(g)
  end
  res.join("\n")
end
enabled_apps(site, theme_slug = nil) click to toggle source

return all enabled apps for site (themes + system + plugins) [] theme_slug: current theme slug

# File lib/plugin_routes.rb, line 178
def self.enabled_apps(site, theme_slug = nil)
  theme_slug = theme_slug || site.get_theme_slug
  r = cache_variable("enabled_apps_#{site.id}_#{theme_slug}")
  return r unless r.nil?
  res = [system_info] + enabled_plugins(site) + [theme_info(theme_slug)]
  cache_variable("enabled_apps_#{site.id}_#{theme_slug}", res)
end
enabled_plugins(site) click to toggle source

return all enabled plugins []

# File lib/plugin_routes.rb, line 164
def self.enabled_plugins(site)
  r = cache_variable("enable_plugins_site_#{site.id}")
  return r unless r.nil?
  res = []
  enabled_ps = site.plugins.active.pluck(:slug)
  all_plugins.each do |plugin|
    res << plugin if enabled_ps.include?(plugin["key"])
  end
  res = res.sort_by{|e| e["position"] || 10 }
  cache_variable("enable_plugins_site_#{site.id}", res)
end
fixActionParameter(h) click to toggle source

convert action parameter into hash

# File lib/plugin_routes.rb, line 114
def fixActionParameter(h)
  (h.is_a?(ActionController::Parameters) ? (h.permit!.to_h rescue h.to_hash) : h)
end
get_anonymous_hooks(hook_key) click to toggle source

return all registered anonymous hooks for hook_key @param hook_key [String] name of the hook @return [Array] array of hooks for hook_key

# File lib/plugin_routes.rb, line 132
def get_anonymous_hooks(hook_key)
  (@@anonymous_hooks[hook_key.to_s] || []).map{|item| item[:callback] }
end
get_gem(name) click to toggle source

check if a gem is available or not Arguemnts: name: name of the gem return (Boolean) true/false

# File lib/plugin_routes.rb, line 395
def self.get_gem(name)
  Gem::Specification.find_by_name(name)
rescue Gem::LoadError
  false
rescue
  Gem.available?(name)
end
get_gem_plugins() click to toggle source

return all plugins registered as gems

# File lib/plugin_routes.rb, line 352
def self.get_gem_plugins
  entries = []
  Gem::Specification.each do |gem|
    path = gem.gem_dir
    config = File.join(path, "config", "camaleon_plugin.json")
    if File.exist?(config)
      p = JSON.parse(File.read(config))
      p = p.with_indifferent_access rescue p
      p["key"] = gem.name if p["key"].nil? # TODO REVIEW ERROR FOR conflict plugin keys
      p["version"] = gem.version.to_s
      p["path"] = path
      p["kind"] = "plugin"
      p["descr"] = gem.description unless p["descr"].present?
      p["gem_mode"] = true
      entries << p
    end
  end
  entries
end
get_gem_themes() click to toggle source

return all themes registered as gems

# File lib/plugin_routes.rb, line 373
def self.get_gem_themes
  entries = []
  Gem::Specification.each do |gem|
    path = gem.gem_dir
    config = File.join(path, "config", "camaleon_theme.json")
    if File.exist?(config)
      p = JSON.parse(File.read(config))
      p = p.with_indifferent_access rescue p
      p["key"] = gem.name if p["key"].nil? # TODO REVIEW ERROR FOR conflict plugin keys
      p["path"] = path
      p["kind"] = "theme"
      p["gem_mode"] = true
      entries << p
    end
  end
  entries
end
get_sites() click to toggle source

return all sites registered for Plugin routes

# File lib/plugin_routes.rb, line 254
def self.get_sites
  begin
    @@all_sites ||= CamaleonCms::Site.order(id: :asc).all.to_a
  rescue
    []
  end
end
get_user_class_name() click to toggle source

return the class name for user model

# File lib/plugin_routes.rb, line 145
def get_user_class_name
  static_system_info['user_model'].presence || 'CamaleonCms::User'
end
isRails4?() click to toggle source
# File lib/plugin_routes.rb, line 101
def isRails4?
  Rails.version.to_s[0].to_i == 4
end
isRails5?() click to toggle source
# File lib/plugin_routes.rb, line 105
def isRails5?
  Rails.version.to_s[0].to_i == 5
end
isRails6?() click to toggle source
# File lib/plugin_routes.rb, line 109
def isRails6?
  Rails.version.to_s[0].to_i == 6
end
load(env = "admin") click to toggle source

load plugin routes if it is enabled

# File lib/plugin_routes.rb, line 7
def self.load(env = "admin")
  plugins = all_enabled_plugins
  res = ""
  if env == "front"
    res << "namespace :plugins do \n"
    plugins.each do |plugin|
      res << "namespace '#{plugin["key"]}' do \n"
      res << "#{File.open(File.join(plugin["path"], "config", "routes_#{env}.txt")).read}\n" rescue ""
      res << "end\n"
    end
    res << "end\n"

  elsif env == "admin" # admin
    res << "scope 'admin', as: 'admin' do \n"
    res << "namespace :plugins do \n"
    plugins.each do |plugin|
      res << "namespace '#{plugin["key"]}' do \n"
      res << "#{File.open(File.join(plugin["path"], "config", "routes_#{env}.txt")).read}\n" rescue ""
      res << "end\n"
    end
    res << "end\n"
    res << "end\n"
  else # main
    plugins.each do |plugin|
      res << "#{File.open(File.join(plugin["path"], "config", "routes_#{env}.txt")).read}\n" rescue ""
    end
  end
  res + load_themes(env)
end
load_themes(env = "admin") click to toggle source
# File lib/plugin_routes.rb, line 37
def self.load_themes(env = "admin")
  plugins = all_enabled_themes
  res = ""
  if env == "front"
    res << "namespace :themes do \n"
    plugins.each do |plugin|
      res << "namespace '#{plugin["key"]}' do \n"
      res << "#{File.open(File.join(plugin["path"], "config", "routes_#{env}.txt")).read}\n" rescue ""
      res << "end\n"
    end
    res << "end\n"

  elsif env == "admin" # admin
    res << "scope 'admin', as: 'admin' do \n"
    res << "namespace :themes do \n"
    plugins.each do |plugin|
      res << "namespace '#{plugin["key"]}' do \n"
      res << "#{File.open(File.join(plugin["path"], "config", "routes_#{env}.txt")).read}\n" rescue ""
      res << "end\n"
    end
    res << "end\n"
    res << "end\n"
  else # main
    plugins.each do |plugin|
      res << "#{File.open(File.join(plugin["path"], "config", "routes_#{env}.txt")).read}\n" rescue ""
    end
  end
  res
end
migration_class() click to toggle source
# File lib/plugin_routes.rb, line 410
def self.migration_class
  isRails4? ? ActiveRecord::Migration : ActiveRecord::Migration[4.2]
end
plugin_info(plugin_key) click to toggle source

return plugin information

# File lib/plugin_routes.rb, line 69
def plugin_info(plugin_key)
  self.all_plugins.each{|p| return p if p["key"] == plugin_key || p['path'].split('/').last == plugin_key }
  nil
end
reload() click to toggle source

reload routes

# File lib/plugin_routes.rb, line 151
def self.reload
  @@all_sites = nil
  @@_vars.each { |v| class_variable_set("@@cache_#{v}", nil) }
  Rails.application.reload_routes!
  @@_after_reload.uniq.each{|r| eval(r) }
end
remove_anonymous_hook(hook_key, hook_id) click to toggle source

return all registered anonymous hooks for hook_key @param hook_key [String] name of the hook @param hook_id [String] identifier of the anonymous hooks @return [Array] array of hooks for hook_key

# File lib/plugin_routes.rb, line 140
def remove_anonymous_hook(hook_key, hook_id)
  (@@anonymous_hooks[hook_key.to_s] || []).delete_if{|item| item[:id] == hook_id }
end
site_plugin_helpers(site) click to toggle source

all helpers of enabled plugins for site

# File lib/plugin_routes.rb, line 217
def self.site_plugin_helpers(site)
  r = cache_variable("site_plugin_helpers"); return r unless r.nil?
  res = []
  enabled_apps(site).each do |settings|
    res += settings["helpers"] if settings["helpers"].present?
  end
  cache_variable("site_plugin_helpers", res)
end
static_system_info() click to toggle source

return system static settings (config.json values)

# File lib/plugin_routes.rb, line 82
def static_system_info
  r = cache_variable("statis_system_info");  return r unless r.nil?
  settings = {}

  gem_settings = File.join($camaleon_engine_dir, "config", "system.json")
  app_settings = Rails.root.join("config", "system.json")

  settings = settings.merge(JSON.parse(File.read(gem_settings))) if File.exist?(gem_settings)
  settings = settings.merge(JSON.parse(File.read(app_settings))) if File.exist?(app_settings)

  # custom settings
  settings["key"] = "system"
  settings["path"] = ''
  settings["kind"] = "system"
  settings["hooks"]["on_notification"] ||= []
  cache_variable("statis_system_info", settings)
end
Also aliased as: system_info
system_info()
Alias for: static_system_info
theme_info(theme_name) click to toggle source

return theme information if theme_name is nil, the use current site theme

# File lib/plugin_routes.rb, line 76
def theme_info(theme_name)
  self.all_themes.each{|p| return p if p["key"] == theme_name }
  nil
end