summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/puppet/rails/param_name.rb10
-rw-r--r--lib/puppet/rails/puppet_tag.rb10
-rw-r--r--lib/puppet/rails/resource.rb4
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