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 179
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 144
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 401
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 209
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 227
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|
    res << plugin if enabled_ps.include?(plugin['key'])
  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 214
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 253
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 302
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 320
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 338
def self.all_plugins
  camaleon_gem = get_gem('camaleon_cms')
  return [] unless 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 = begin
      p.with_indifferent_access
    rescue StandardError
      p
    end
    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 369
def self.all_themes
  camaleon_gem = get_gem('camaleon_cms')
  return [] unless 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/*"]).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 = begin
      p.with_indifferent_access
    rescue StandardError
      p
    end
    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 314
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 18
def self.apps_dir
  dir = File.dirname(__FILE__).to_s.split('/')
  dir.pop
  "#{dir.join('/')}/app/apps"
end
cache_variable(var_name, value = nil) click to toggle source
# File lib/plugin_routes.rb, line 274
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 = begin
    class_variable_get("@@cache_#{var_name}")
  rescue StandardError
    nil
  end
  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 297
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 466
def self.default_url_options
  options = { host: begin
    CamaleonCms::Site.main_site.slug
  rescue StandardError
    ''
  end }
  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 265
def self.destroy_plugin(plugin_key)
  begin
    FileUtils.rm_r(Rails.root.join('app', 'apps', 'plugins', plugin_key))
  rescue StandardError
    ''
  end
  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 199
def self.enabled_apps(site, theme_slug = nil)
  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 184
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 126
def fixActionParameter(h)
  (if h.is_a?(ActionController::Parameters)
     begin
       h.permit!.to_h
     rescue StandardError
       h.to_hash
     end
   else
     h
   end)
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 152
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 457
def self.get_gem(name)
  Gem::Specification.find_by_name(name)
rescue Gem::LoadError
  false
rescue StandardError
  Gem.available?(name)
end
get_gem_plugins() click to toggle source

return all plugins registered as gems

# File lib/plugin_routes.rb, line 406
def self.get_gem_plugins
  entries = []
  Gem::Specification.each do |gem|
    path = gem.gem_dir
    config = File.join(path, 'config', 'camaleon_plugin.json')
    next unless File.exist?(config)

    p = JSON.parse(File.read(config))
    p = begin
      p.with_indifferent_access
    rescue StandardError
      p
    end
    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
  entries
end
get_gem_themes() click to toggle source

return all themes registered as gems

# File lib/plugin_routes.rb, line 431
def self.get_gem_themes
  entries = []
  Gem::Specification.each do |gem|
    path = gem.gem_dir
    config = File.join(path, 'config', 'camaleon_theme.json')
    next unless File.exist?(config)

    p = JSON.parse(File.read(config))
    p = begin
      p.with_indifferent_access
    rescue StandardError
      p
    end
    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
  entries
end
get_sites() click to toggle source

return all sites registered for Plugin routes

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

return the class name for user model

# File lib/plugin_routes.rb, line 165
def get_user_class_name
  static_system_info['user_model'].presence || 'CamaleonCms::User'
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 = ''
  case env
  when 'front'
    res << "namespace :plugins do \n"
    plugins.each do |plugin|
      res << "namespace '#{plugin['key']}' do \n"
      begin
        res << "#{File.open(File.join(plugin['path'], 'config', "routes_#{env}.txt")).read}\n"
      rescue StandardError
        ''
      end
      res << "end\n"
    end
    res << "end\n"

  when 'admin' # admin
    res << "scope 'admin', as: 'admin' do \n"
    res << "namespace :plugins do \n"
    plugins.each do |plugin|
      res << "namespace '#{plugin['key']}' do \n"
      begin
        res << "#{File.open(File.join(plugin['path'], 'config', "routes_#{env}.txt")).read}\n"
      rescue StandardError
        ''
      end
      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 StandardError
      ''
    end
  end
  res + load_themes(env)
end
load_themes(env = 'admin') click to toggle source
# File lib/plugin_routes.rb, line 48
def self.load_themes(env = 'admin')
  plugins = all_enabled_themes
  res = ''
  case env
  when 'front'
    res << "namespace :themes do \n"
    plugins.each do |plugin|
      res << "namespace '#{plugin['key']}' do \n"
      begin
        res << "#{File.open(File.join(plugin['path'], 'config', "routes_#{env}.txt")).read}\n"
      rescue StandardError
        ''
      end
      res << "end\n"
    end
    res << "end\n"

  when 'admin' # admin
    res << "scope 'admin', as: 'admin' do \n"
    res << "namespace :themes do \n"
    plugins.each do |plugin|
      res << "namespace '#{plugin['key']}' do \n"
      begin
        res << "#{File.open(File.join(plugin['path'], 'config', "routes_#{env}.txt")).read}\n"
      rescue StandardError
        ''
      end
      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 StandardError
      ''
    end
  end
  res
end
migration_class() click to toggle source
# File lib/plugin_routes.rb, line 476
def self.migration_class
  ActiveRecord::Migration[4.2]
end
plugin_info(plugin_key) click to toggle source

return plugin information

# File lib/plugin_routes.rb, line 91
def plugin_info(plugin_key)
  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 171
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 160
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 241
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 104
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 98
def theme_info(theme_name)
  all_themes.each { |p| return p if p['key'] == theme_name }
  nil
end