# File lib/puppet/rails/resource.rb, line 110
110:     def merge_parameters(resource)
111:         catalog_params = {}
112:         resource.each do |param, value|
113:             catalog_params[param.to_s] = value
114:         end
115: 
116:         db_params = {}
117: 
118:         deletions = []
119:         @params_hash.each do |value|
120:             # First remove any parameters our catalog resource doesn't have at all.
121:             deletions << value['id'] and next unless catalog_params.include?(value['name'])
122: 
123:             # Now store them for later testing.
124:             db_params[value['name']] ||= []
125:             db_params[value['name']] << value
126:         end
127: 
128:         # Now get rid of any parameters whose value list is different.
129:         # This might be extra work in cases where an array has added or lost
130:         # a single value, but in the most common case (a single value has changed)
131:         # this makes sense.
132:         db_params.each do |name, value_hashes|
133:             values = value_hashes.collect { |v| v['value'] }
134: 
135:             unless value_compare(catalog_params[name], values)
136:                 value_hashes.each { |v| deletions << v['id'] }
137:             end
138:         end
139: 
140:         # Perform our deletions.
141:         Puppet::Rails::ParamValue.delete(deletions) unless deletions.empty?
142: 
143:         # Lastly, add any new parameters.
144:         catalog_params.each do |name, value|
145:             next if db_params.include?(name)
146:             values = value.is_a?(Array) ? value : [value]
147: 
148:             values.each do |v|
149:                 param_values.build(:value => serialize_value(v), :line => resource.line, :param_name => Puppet::Rails::ParamName.accumulate_by_name(name))
150:             end
151:         end
152:     end