# File lib/puppet/rails/resource.rb, line 108
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:       # First remove any parameters our catalog resource doesn't have at all.
119:       deletions << value['id'] and next unless catalog_params.include?(value['name'])
120: 
121:       # Now store them for later testing.
122:       db_params[value['name']] ||= []
123:       db_params[value['name']] << value
124:     end
125: 
126:     # Now get rid of any parameters whose value list is different.
127:     # This might be extra work in cases where an array has added or lost
128:     # a single value, but in the most common case (a single value has changed)
129:     # this makes sense.
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:     # Perform our deletions.
137:     Puppet::Rails::ParamValue.delete(deletions) unless deletions.empty?
138: 
139:     # Lastly, add any new parameters.
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