46: def merge_facts(facts)
47: db_facts = {}
48:
49: deletions = []
50: self.fact_values.find(:all, :include => :fact_name).each do |value|
51: deletions << value['id'] and next unless facts.include?(value['name'])
52:
53: db_facts[value['name']] ||= []
54: db_facts[value['name']] << value
55: end
56:
57:
58:
59:
60:
61: db_facts.each do |name, value_hashes|
62: values = value_hashes.collect { |v| v['value'] }
63:
64: unless values == facts[name]
65: value_hashes.each { |v| deletions << v['id'] }
66: end
67: end
68:
69:
70: Puppet::Rails::FactValue.delete(deletions) unless deletions.empty?
71:
72:
73: facts.each do |name, value|
74: next if db_facts.include?(name)
75: values = value.is_a?(Array) ? value : [value]
76:
77: values.each do |v|
78: fact_values.build(:value => v, :fact_name => Puppet::Rails::FactName.find_or_create_by_name(name))
79: end
80: end
81: end