diff options
Diffstat (limited to 'lib/puppet/rails')
-rw-r--r-- | lib/puppet/rails/param_name.rb | 10 | ||||
-rw-r--r-- | lib/puppet/rails/puppet_tag.rb | 10 | ||||
-rw-r--r-- | lib/puppet/rails/resource.rb | 4 |
3 files changed, 22 insertions, 2 deletions
diff --git a/lib/puppet/rails/param_name.rb b/lib/puppet/rails/param_name.rb index 55d3727f9..818a90e35 100644 --- a/lib/puppet/rails/param_name.rb +++ b/lib/puppet/rails/param_name.rb @@ -5,6 +5,16 @@ class Puppet::Rails::ParamName < ActiveRecord::Base include Puppet::Util::CollectionMerger has_many :param_values, :dependent => :destroy + def self.accumulate_by_name(name) + @name_cache ||= {} + if instance = @name_cache[name] + return instance + end + instance = find_or_create_by_name(name) + @name_cache[name] = instance + instance + end + def to_resourceparam(resource, source) hash = {} hash[:name] = self.name.to_sym diff --git a/lib/puppet/rails/puppet_tag.rb b/lib/puppet/rails/puppet_tag.rb index 279eefc4e..53c39c5fd 100644 --- a/lib/puppet/rails/puppet_tag.rb +++ b/lib/puppet/rails/puppet_tag.rb @@ -2,4 +2,14 @@ require 'puppet/rails/resource_tag' class Puppet::Rails::PuppetTag < ActiveRecord::Base has_many :resource_tags, :dependent => :destroy has_many :resources, :through => :resource_tags + + def self.accumulate_by_name(name) + @name_cache ||= {} + if instance = @name_cache[name] + return instance + end + instance = find_or_create_by_name(name) + @name_cache[name] = instance + instance + end end diff --git a/lib/puppet/rails/resource.rb b/lib/puppet/rails/resource.rb index 0c8c9aa52..d91bb8209 100644 --- a/lib/puppet/rails/resource.rb +++ b/lib/puppet/rails/resource.rb @@ -35,7 +35,7 @@ class Puppet::Rails::Resource < ActiveRecord::Base end def add_resource_tag(tag) - pt = Puppet::Rails::PuppetTag.find_or_create_by_name(tag) + pt = Puppet::Rails::PuppetTag.accumulate_by_name(tag) resource_tags.build(:puppet_tag => pt) end @@ -139,7 +139,7 @@ class Puppet::Rails::Resource < ActiveRecord::Base values = param.value.is_a?(Array) ? param.value : [param.value] values.each do |v| - param_values.build(:value => serialize_value(v), :line => param.line, :param_name => Puppet::Rails::ParamName.find_or_create_by_name(name)) + param_values.build(:value => serialize_value(v), :line => param.line, :param_name => Puppet::Rails::ParamName.accumulate_by_name(name)) end end end |