# File lib/puppet/util/rails/cache_accumulator.rb, line 11 def initialize(klass, attribute) @klass = klass @attribute = attribute @find_or_create = "find_or_create_by_#{@attribute.to_s}".intern end
# File lib/puppet/util/rails/cache_accumulator.rb, line 37 def do_multi_find(keys) result = 0 @klass.find(:all, :conditions => {@attribute => keys}).each do |obj| store[obj.send(@attribute)] = obj result += 1 end result end
# File lib/puppet/util/rails/cache_accumulator.rb, line 25 def find(*keys) result = nil if keys.length == 1 result = store[keys[0]] ||= @klass.send(@find_or_create, *keys) else found, missing = keys.partition {|k| store.include? k} result = found.length result += do_multi_find(missing) if missing.length > 0 end result end
# File lib/puppet/util/rails/cache_accumulator.rb, line 21 def reset @store = {} end
# File lib/puppet/util/rails/cache_accumulator.rb, line 17 def store @store || reset end