Revision c791f6c7
Added by Ondřej Ezr over 1 year ago
app/models/setting.rb | ||
---|---|---|
require 'resolv'
|
||
|
||
class Setting < ApplicationRecord
|
||
audited :except => [:name, :category]
|
||
audited :except => [:name]
|
||
extend FriendlyId
|
||
friendly_id :name
|
||
include ActiveModel::Validations
|
||
include EncryptValue
|
||
include PermissionName
|
||
self.inheritance_column = 'category'
|
||
|
||
TYPES = %w{integer boolean hash array string}
|
||
NONZERO_ATTRS = %w{puppet_interval idle_timeout entries_per_page outofsync_interval}
|
||
... | ... | |
after_save :refresh_registry_value
|
||
default_scope -> { order(:name) }
|
||
|
||
# Filer out settings from disabled plugins
|
||
scope :disabled_plugins, -> { where(:category => %w[Setting].concat(descendants.map(&:to_s))) unless Rails.env.development? }
|
||
|
||
scope :order_by, ->(attr) { except(:order).order(attr) }
|
||
|
||
scoped_search :on => :id, :complete_enabled => false, :only_explicit => true, :validator => ScopedSearch::Validators::INTEGER
|
||
... | ... | |
'settings.yaml'
|
||
end
|
||
|
||
def self.live_descendants
|
||
disabled_plugins.order_by(:name)
|
||
end
|
||
|
||
# can't use our own settings
|
||
def self.per_page
|
||
20
|
||
end
|
||
|
||
def self.humanized_category
|
||
nil
|
||
end
|
||
|
||
def self.[](name)
|
||
Foreman.settings[name]
|
||
end
|
||
... | ... | |
'see https://github.com/theforeman/foreman/blob/develop/developer_docs/how_to_create_a_plugin.asciidoc#settings for details')
|
||
default_settings.each do |s|
|
||
t = Setting.setting_type_from_value(s[:default]) || 'string'
|
||
kwargs = s.except(:name).merge(type: t.to_sym, category: name, context: :deprecated)
|
||
kwargs = s.except(:name).merge(type: t.to_sym, category: name.delete_prefix('Setting::'), context: :deprecated)
|
||
Foreman.settings._add(s[:name], **kwargs)
|
||
end
|
||
true
|
Also available in: Unified diff
Fixes #29939 - drop category column from settings
Settings table was holding category column to support old style of
settings, but it is now ready to be decomissioned as plugins were given
enough time.