Project

General

Profile

Download (3.04 KB) Statistics
| Branch: | Tag: | Revision:
class Parameter < ApplicationRecord
extend FriendlyId
friendly_id :name
include Parameterizable::ByIdName
include HiddenValue

validates_lengths_from_database

include Authorizable
validates :name, :presence => true, :no_whitespace => true

scoped_search :on => :name, :complete_value => true
scoped_search :on => :type, :complete_value => true
scoped_search :on => :value, :complete_value => true

# children associations must be defined here, otherwise scoped search definitions won't find them
belongs_to :domain, :foreign_key => :reference_id, :inverse_of => :domain_parameters
belongs_to :operatingsystem, :foreign_key => :reference_id, :inverse_of => :os_parameters
belongs_to :subnet, :foreign_key => :reference_id, :inverse_of => :subnet_parameters
belongs_to_host :foreign_key => :reference_id, :inverse_of => :host_parameters
belongs_to :hostgroup, :foreign_key => :reference_id, :inverse_of => :group_parameters
belongs_to :location, :foreign_key => :reference_id, :inverse_of => :location_parameters
belongs_to :organization, :foreign_key => :reference_id, :inverse_of => :organization_parameters
# specific children search definitions, required for permission filters autocompletion
scoped_search :relation => :domain, :on => :name, :complete_value => true, :rename => 'domain_name'
scoped_search :relation => :operatingsystem, :on => :name, :complete_value => true, :rename => 'os_name'
scoped_search :relation => :subnet, :on => :name, :complete_value => true, :rename => 'subnet_name'
scoped_search :relation => :host, :on => :name, :complete_value => true, :rename => 'host_name'
scoped_search :relation => :hostgroup, :on => :name, :complete_value => true, :rename => 'host_group_name'
if Taxonomy.locations_enabled
scoped_search :relation => :location, :on => :name, :complete_value => true, :rename => 'location_name'
end
if Taxonomy.organizations_enabled
scoped_search :relation => :organization, :on => :name, :complete_value => true, :rename => 'organization_name'
end

default_scope -> { order("parameters.name") }

before_create :set_priority

PRIORITY = { :common_parameter => 0,
:organization_parameter => 10,
:location_parameter => 20,
:domain_parameter => 30,
:subnet_parameter => 40,
:os_parameter => 50,
:group_parameter => 60,
:host_parameter => 70
}

def editable_by_user?
Parameter.authorized(:edit_params).where(:id => id).exists?
end

def self.type_priority(type)
PRIORITY.fetch(type.to_s.underscore.to_sym, nil) unless type.nil?
end

private

def set_priority
self.priority = Parameter.type_priority(type)
end

def skip_strip_attrs
['value']
end
end

require_dependency 'common_parameter'
require_dependency 'domain_parameter'
require_dependency 'group_parameter'
require_dependency 'host_parameter'
require_dependency 'location_parameter'
require_dependency 'organization_parameter'
require_dependency 'os_parameter'
require_dependency 'subnet_parameter'
(40-40/67)