108: def merge_parameters(resource)
109: catalog_params = {}
110: resource.each do |param, value|
111: catalog_params[param.to_s] = value
112: end
113:
114: db_params = {}
115:
116: deletions = []
117: params_list.each do |value|
118:
119: deletions << value['id'] and next unless catalog_params.include?(value['name'])
120:
121:
122: db_params[value['name']] ||= []
123: db_params[value['name']] << value
124: end
125:
126:
127:
128:
129:
130: db_params.each do |name, value_hashes|
131: values = value_hashes.collect { |v| v['value'] }
132:
133: value_hashes.each { |v| deletions << v['id'] } unless value_compare(catalog_params[name], values)
134: end
135:
136:
137: Puppet::Rails::ParamValue.delete(deletions) unless deletions.empty?
138:
139:
140: catalog_params.each do |name, value|
141: next if db_params.include?(name) && ! db_params[name].find{ |val| deletions.include?( val["id"] ) }
142: values = value.is_a?(Array) ? value : [value]
143:
144: values.each do |v|
145: param_values.build(:value => serialize_value(v), :line => resource.line, :param_name => Puppet::Rails::ParamName.accumulate_by_name(name))
146: end
147: end
148: end