Revision c007f069
Added by Dominic Cleal about 10 years ago
app/helpers/audits_helper.rb | ||
---|---|---|
end
|
||
elsif !main_object? audit
|
||
["#{audit_action_name(audit).humanize} #{id_to_label audit.audited_changes.keys[0], audit.audited_changes.values[0]}
|
||
#{audit_action_name(audit)=="removed" ? "from" : "to"} #{id_to_label audit.audited_changes.keys[1], audit.audited_changes.values[1]}"]
|
||
#{audit_action_name(audit)=="removed" ? "from" : "to"} #{audit.associated_name || id_to_label(audit.audited_changes.keys[1], audit.audited_changes.values[1])}"]
|
||
else
|
||
[]
|
||
end
|
||
... | ... | |
'Puppet Class'
|
||
when 'Parameter'
|
||
"#{audit.associated_type || 'Global'}-#{type_name}"
|
||
when 'LookupKey'
|
||
'Smart Variable'
|
||
when 'LookupValue'
|
||
'Override Value'
|
||
else
|
||
audit.auditable_type
|
||
end
|
app/models/lookup_key.rb | ||
---|---|---|
KEY_DELM = ","
|
||
EQ_DELM = "="
|
||
|
||
audited :associated_with => :audit_class, :allow_mass_assignment => true
|
||
|
||
serialize :default_value
|
||
|
||
belongs_to :puppetclass, :inverse_of => :lookup_keys, :counter_cache => true
|
||
... | ... | |
param_classes.first
|
||
end
|
||
|
||
def audit_class
|
||
param_class || puppetclass
|
||
end
|
||
|
||
has_many :lookup_values, :dependent => :destroy, :inverse_of => :lookup_key
|
||
accepts_nested_attributes_for :lookup_values, :reject_if => lambda { |a| a[:value].blank? }, :allow_destroy => true
|
||
|
||
... | ... | |
nil
|
||
end
|
||
|
||
def to_label
|
||
"#{audit_class}::#{key}"
|
||
end
|
||
|
||
def is_smart_variable?
|
||
puppetclass_id.to_i > 0
|
||
end
|
app/models/lookup_value.rb | ||
---|---|---|
class LookupValue < ActiveRecord::Base
|
||
include Authorizable
|
||
audited :associated_with => :lookup_key, :allow_mass_assignment => true
|
||
|
||
belongs_to :lookup_key, :counter_cache => true
|
||
validates :match, :presence => true, :uniqueness => {:scope => :lookup_key_id}
|
||
delegate :key, :to => :lookup_key
|
test/factories/puppet_related.rb | ||
---|---|---|
|
||
factory :environment_class
|
||
|
||
factory :lookup_key do
|
||
sequence(:key) {|n| "param#{n}" }
|
||
|
||
ignore do
|
||
overrides({})
|
||
end
|
||
after_create do |lkey,evaluator|
|
||
evaluator.overrides.each do |match,value|
|
||
FactoryGirl.create :lookup_value, :lookup_key_id => lkey.id, :value => value, :match => match
|
||
end
|
||
lkey.reload
|
||
end
|
||
|
||
trait :with_override do
|
||
override true
|
||
default_value "default value"
|
||
path "fqdn\ncomment"
|
||
overrides({"comment=override" => "overridden value"})
|
||
end
|
||
|
||
trait :as_smart_class_param do
|
||
is_param true
|
||
ignore do
|
||
puppetclass nil
|
||
end
|
||
after_create do |lkey,evaluator|
|
||
evaluator.puppetclass.environments.each do |env|
|
||
FactoryGirl.create :environment_class, :puppetclass_id => evaluator.puppetclass.id, :environment_id => env.id, :lookup_key_id => lkey.id
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
factory :lookup_value
|
||
|
||
factory :puppetclass do
|
||
sequence(:name) {|n| "class#{n}" }
|
||
|
||
ignore do
|
||
environments []
|
||
end
|
||
|
||
after_create do |pc,evaluator|
|
||
evaluator.environments.each do |env|
|
||
FactoryGirl.create :environment_class, :puppetclass_id => pc.id, :environment_id => env.id
|
||
end
|
||
end
|
||
|
||
trait :with_parameters do
|
||
after_create do |pc,evaluator|
|
||
3.times do
|
||
evaluator.environments.each do |env|
|
||
lkey = FactoryGirl.create :lookup_key, :is_param => true
|
||
FactoryGirl.create :environment_class, :puppetclass_id => pc.id, :environment_id => env.id, :lookup_key_id => lkey.id
|
||
end
|
||
end
|
||
end
|
||
end
|
||
end
|
||
end
|
test/unit/lookup_key_test.rb | ||
---|---|---|
assert lookup_keys(:complex).is_smart_class_parameter?
|
||
end
|
||
|
||
test "when changed, an audit entry should be added" do
|
||
env = FactoryGirl.create(:environment)
|
||
pc = FactoryGirl.create(:puppetclass, :with_parameters, :environments => [env])
|
||
key = pc.class_params.first
|
||
assert_difference('Audit.count') do
|
||
key.override = true
|
||
key.default_value = "new default value"
|
||
key.save!
|
||
end
|
||
assert_equal pc.name, key.audits.last.associated_name
|
||
end
|
||
end
|
test/unit/lookup_value_test.rb | ||
---|---|---|
assert lk.value.is_a? Array
|
||
assert_equal lk.value_before_type_cast, "[{\"foo\":\"bar\"},{\"baz\":\"qux\"},\"baz\"]"
|
||
end
|
||
|
||
test "when created, an audit entry should be added" do
|
||
env = FactoryGirl.create(:environment)
|
||
pc = FactoryGirl.create(:puppetclass, :with_parameters, :environments => [env])
|
||
key = pc.class_params.first
|
||
lvalue = nil
|
||
assert_difference('Audit.count') do
|
||
lvalue = FactoryGirl.create :lookup_value, :lookup_key_id => key.id, :value => 'test', :match => 'foo=bar'
|
||
end
|
||
assert_equal "#{pc.name}::#{key.key}", lvalue.audits.last.associated_name
|
||
end
|
||
|
||
test "when changed, an audit entry should be added" do
|
||
env = FactoryGirl.create(:environment)
|
||
pc = FactoryGirl.create(:puppetclass, :environments => [env])
|
||
key = FactoryGirl.create(:lookup_key, :as_smart_class_param, :with_override, :puppetclass => pc)
|
||
lvalue = key.lookup_values.first
|
||
assert_difference('Audit.count') do
|
||
lvalue.value = 'new overridden value'
|
||
lvalue.save!
|
||
end
|
||
assert_equal "#{pc.name}::#{key.key}", lvalue.audits.last.associated_name
|
||
end
|
||
end
|
Also available in: Unified diff
fixes #1902 - audit changes to lookup keys and values/overrides
(cherry picked from commit 971fee795383d2f7dc757a91ceb46bd693e20a4d)