We previously used and expected Puppet::Parser::Resource
instances, but 0.25 converts them all to Puppet::Resource
instances before they're passed out of the compiler,
so the Rails integration had to be changed to expect that.

There's still some muddling, because the rails resources
only generate parser resources, but that works for now
because that's what we expect when collecting resources.

Signed-off-by: Luke Kanies <[email protected]>
---
 lib/puppet/rails/host.rb        |    4 +-
 lib/puppet/rails/param_value.rb |   11 ++++----
 lib/puppet/rails/resource.rb    |   12 ++++----
 spec/unit/rails/param_value.rb  |   49 +++++++++++++++++++++++++++++++++++++++
 spec/unit/rails/resource.rb     |   42 +++++++++++++++++++++++++++++++++
 5 files changed, 104 insertions(+), 14 deletions(-)
 create mode 100755 spec/unit/rails/param_value.rb
 create mode 100755 spec/unit/rails/resource.rb

diff --git a/lib/puppet/rails/host.rb b/lib/puppet/rails/host.rb
index 2d00fa7..1ddc012 100644
--- a/lib/puppet/rails/host.rb
+++ b/lib/puppet/rails/host.rb
@@ -222,8 +222,8 @@ class Puppet::Rails::Host < ActiveRecord::Base
 
 
         accumulate_benchmark("Added resources", :parameters) {
-            resource.eachparam do |param|
-                Puppet::Rails::ParamValue.from_parser_param(param).each do 
|value_hash|
+            resource.each do |param, value|
+                Puppet::Rails::ParamValue.from_parser_param(param, value).each 
do |value_hash|
                     db_resource.param_values.build(value_hash)
                 end
             end
diff --git a/lib/puppet/rails/param_value.rb b/lib/puppet/rails/param_value.rb
index a5dbbae..46d7fc1 100644
--- a/lib/puppet/rails/param_value.rb
+++ b/lib/puppet/rails/param_value.rb
@@ -8,13 +8,12 @@ class Puppet::Rails::ParamValue < ActiveRecord::Base
     belongs_to :resource
 
     # Store a new parameter in a Rails db.
-    def self.from_parser_param(param)
-        values = munge_parser_values(param.value)
+    def self.from_parser_param(param, values)
+        values = munge_parser_values(values)
 
-        param_name = 
Puppet::Rails::ParamName.find_or_create_by_name(param.name.to_s)
-        line_number = param.line_to_i()
+        param_name = 
Puppet::Rails::ParamName.find_or_create_by_name(param.to_s)
         return values.collect do |v|
-            {:value => v, :line => line_number, :param_name => param_name}
+            {:value => v, :param_name => param_name}
         end
     end
 
@@ -24,7 +23,7 @@ class Puppet::Rails::ParamValue < ActiveRecord::Base
     def self.munge_parser_values(value)
         values = value.is_a?(Array) ? value : [value]
         values.map do |v|
-            if v.is_a?(Puppet::Parser::Resource::Reference)
+            if v.is_a?(Puppet::Resource::Reference)
                 v
             else
                 v.to_s
diff --git a/lib/puppet/rails/resource.rb b/lib/puppet/rails/resource.rb
index 81505cb..86a26ee 100644
--- a/lib/puppet/rails/resource.rb
+++ b/lib/puppet/rails/resource.rb
@@ -100,8 +100,8 @@ class Puppet::Rails::Resource < ActiveRecord::Base
 
     def merge_parameters(resource)
         catalog_params = {}
-        resource.eachparam do |param|
-            catalog_params[param.name.to_s] = param
+        resource.each do |param, value|
+            catalog_params[param.to_s] = value
         end
 
         db_params = {}
@@ -123,7 +123,7 @@ class Puppet::Rails::Resource < ActiveRecord::Base
         db_params.each do |name, value_hashes|
             values = value_hashes.collect { |v| v['value'] }
 
-            unless value_compare(catalog_params[name].value, values)
+            unless value_compare(catalog_params[name], values)
                 value_hashes.each { |v| deletions << v['id'] }
             end
         end
@@ -132,12 +132,12 @@ class Puppet::Rails::Resource < ActiveRecord::Base
         Puppet::Rails::ParamValue.delete(deletions) unless deletions.empty?
 
         # Lastly, add any new parameters.
-        catalog_params.each do |name, param|
+        catalog_params.each do |name, value|
             next if db_params.include?(name)
-            values = param.value.is_a?(Array) ? param.value : [param.value]
+            values = value.is_a?(Array) ? value : [value]
 
             values.each do |v|
-                param_values.build(:value => serialize_value(v), :line => 
param.line, :param_name => Puppet::Rails::ParamName.accumulate_by_name(name))
+                param_values.build(:value => serialize_value(v), :line => 
resource.line, :param_name => Puppet::Rails::ParamName.accumulate_by_name(name))
             end
         end
     end
diff --git a/spec/unit/rails/param_value.rb b/spec/unit/rails/param_value.rb
new file mode 100755
index 0000000..26e87fe
--- /dev/null
+++ b/spec/unit/rails/param_value.rb
@@ -0,0 +1,49 @@
+#!/usr/bin/env ruby
+
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+describe "Puppet::Rails::ParamValue" do
+    confine "Cannot test without ActiveRecord" => Puppet.features.rails?
+
+    def column(name, type)
+        ActiveRecord::ConnectionAdapters::Column.new(name, nil, type, false)
+    end
+
+    before do
+        require 'puppet/rails/param_value'
+
+        name = stub 'param_name', :name => "foo"
+
+        # Stub this so we don't need access to the DB.
+        Puppet::Rails::ParamValue.stubs(:columns).returns([column("value", 
"string")])
+        Puppet::Rails::ParamName.stubs(:find_or_create_by_name).returns(name)
+    end
+
+    describe "when creating initial parameter values" do
+        it "should return an array of hashes" do
+            Puppet::Rails::ParamValue.from_parser_param(:myparam, %w{a 
b})[0].should be_instance_of(Hash)
+        end
+
+        it "should return hashes for each value with the parameter name set as 
the ParamName instance" do
+            name = stub 'param_name', :name => "foo"
+            
Puppet::Rails::ParamName.expects(:find_or_create_by_name).returns(name)
+
+            result = Puppet::Rails::ParamValue.from_parser_param(:myparam, 
"a")[0]
+            result[:value].should == "a"
+            result[:param_name].should == name
+        end
+
+        it "should return an array of hashes even when only one parameter is 
provided" do
+            Puppet::Rails::ParamValue.from_parser_param(:myparam, 
"a")[0].should be_instance_of(Hash)
+        end
+
+        it "should convert all arguments into strings" do
+            Puppet::Rails::ParamValue.from_parser_param(:myparam, 
50)[0][:value].should == "50"
+        end
+
+        it "should not convert Resource References into strings" do
+            ref = Puppet::Resource::Reference.new(:file, "/file")
+            Puppet::Rails::ParamValue.from_parser_param(:myparam, 
ref)[0][:value].should == ref
+        end
+    end
+end
diff --git a/spec/unit/rails/resource.rb b/spec/unit/rails/resource.rb
new file mode 100755
index 0000000..eaead2e
--- /dev/null
+++ b/spec/unit/rails/resource.rb
@@ -0,0 +1,42 @@
+#!/usr/bin/env ruby
+
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+describe "Puppet::Rails::Resource" do
+    confine "Cannot test without ActiveRecord" => Puppet.features.rails?
+
+    def column(name, type)
+        ActiveRecord::ConnectionAdapters::Column.new(name, nil, type, false)
+    end
+
+    before do
+        require 'puppet/rails/resource'
+
+        # Stub this so we don't need access to the DB.
+        Puppet::Rails::Resource.stubs(:columns).returns([column("title", 
"string"), column("restype", "string"), column("exported", "boolean")])
+    end
+
+    describe "when creating initial resource arguments" do
+        it "should set the restype to the resource's type" do
+            
Puppet::Rails::Resource.rails_resource_initial_args(Puppet::Resource.new(:file, 
"/file"))[:restype].should == "File"
+        end
+
+        it "should set the title to the resource's title" do
+            
Puppet::Rails::Resource.rails_resource_initial_args(Puppet::Resource.new(:file, 
"/file"))[:title].should == "/file"
+        end
+
+        it "should set the line to the resource's line if one is available" do
+            resource = Puppet::Resource.new(:file, "/file")
+            resource.line = 50
+
+            
Puppet::Rails::Resource.rails_resource_initial_args(resource)[:line].should == 
50
+        end
+
+        it "should set 'exported' to true of the resource is exported" do
+            resource = Puppet::Resource.new(:file, "/file")
+            resource.exported = true
+
+            
Puppet::Rails::Resource.rails_resource_initial_args(resource)[:exported].should 
be_true
+        end
+    end
+end
-- 
1.6.1


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to