40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
# File 'app/models/staypuft/deployment/attribute_param_storage.rb', line 40
def param_attr_array(*names)
names.each do |item|
item.each do |name, type|
ivar_name = :"@#{name}"
param_base_name = "ui::#{param_scope}::#{name}"
define_method name do
instance_variable_get(ivar_name) or
begin
params = hostgroup.group_parameters.where(['name LIKE ?', "#{param_base_name}%"])
ivar = []
params.each do |param|
value = param.try(:value)
unless value.nil?
full, index = *param.name.match(/#{param_base_name}::(\d+)/)
ivar[index.to_i] ||= type.new({id: index.to_i }.merge(JSON.parse(value)))
end
end
instance_variable_set(ivar_name, ivar)
end
end
define_method "#{name}=" do |value|
if value.is_a? Hash
values = []
value.each do |k,v|
values << type.new(v)
end
instance_variable_set(:"@#{name}", values)
else
instance_variable_set(:"@#{name}", value)
end
end
define_method "#{name}_attributes=" do |attributes|
Rails.logger.error attributes
end
after_save do
values = send(name)
params = hostgroup.group_parameters.where(['name LIKE ?', "#{param_base_name}%"])
params.each do |param|
param.try(:destroy)
end
if not values.blank?
values.each_with_index do |value, index|
param = hostgroup.
group_parameters.
find_or_initialize_by_name( "#{param_base_name}::#{index}")
param.update_attributes!(value: value.to_json(root:false))
end
end
end
end
end
end
|