summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Robinson <matt@puppetlabs.com>2011-02-28 17:11:14 -0800
committerMatt Robinson <matt@puppetlabs.com>2011-02-28 17:11:14 -0800
commit395831ef58f1ea323919a0a87093919e3526da6c (patch)
tree135a3081e806a929420ae9e13b436ef49dd81fc3
parent43c79b744d0af0c5a1221addc74cc36eb68071a6 (diff)
parent422399b47764e29055974ff5bad5dfcb982a8b74 (diff)
downloadpuppet-395831ef58f1ea323919a0a87093919e3526da6c.tar.gz
puppet-395831ef58f1ea323919a0a87093919e3526da6c.tar.xz
puppet-395831ef58f1ea323919a0a87093919e3526da6c.zip
Merge branch 'ticket/2.6.next/5466' into 2.6.next
* ticket/2.6.next/5466: (#5466) Write specs for output of puppet resource (#5466) Monkey patch Symbol so that you can sort them (#5466) Fixed puppet resource bug with trailing ,
-rw-r--r--lib/puppet/resource.rb29
-rw-r--r--lib/puppet/util/monkey_patches.rb3
-rwxr-xr-xspec/unit/resource_spec.rb30
3 files changed, 40 insertions, 22 deletions
diff --git a/lib/puppet/resource.rb b/lib/puppet/resource.rb
index e832804f5..a71675e11 100644
--- a/lib/puppet/resource.rb
+++ b/lib/puppet/resource.rb
@@ -255,15 +255,26 @@ class Puppet::Resource
# Convert our resource to Puppet code.
def to_manifest
- "%s { '%s':\n%s\n}" % [self.type.to_s.downcase, self.title,
- @parameters.collect { |p, v|
- if v.is_a? Array
- " #{p} => [\'#{v.join("','")}\']"
- else
- " #{p} => \'#{v}\'"
- end
- }.join(",\n")
- ]
+ # Collect list of attributes to align => and move ensure first
+ attr = @parameters.keys
+ attr_max = attr.inject(0) { |max,k| k.to_s.length > max ? k.to_s.length : max }
+
+ attr.sort!
+ if attr.first != :ensure && attr.include?(:ensure)
+ attr.delete(:ensure)
+ attr.unshift(:ensure)
+ end
+
+ attributes = attr.collect { |k|
+ v = @parameters[k]
+ if v.is_a? Array
+ " %-#{attr_max}s => %s,\n" % [ k, "[\'#{v.join("', '")}\']" ]
+ else
+ " %-#{attr_max}s => %s,\n" % [ k, "\'#{v}\'" ]
+ end
+ }
+
+ "%s { '%s':\n%s}" % [self.type.to_s.downcase, self.title, attributes]
end
def to_ref
diff --git a/lib/puppet/util/monkey_patches.rb b/lib/puppet/util/monkey_patches.rb
index 85854a04c..16384855a 100644
--- a/lib/puppet/util/monkey_patches.rb
+++ b/lib/puppet/util/monkey_patches.rb
@@ -21,6 +21,9 @@ class Symbol
z.emit("!ruby/sym ")
to_s.to_zaml(z)
end
+ def <=> (other)
+ self.to_s <=> other.to_s
+ end
end
[Object, Exception, Integer, Struct, Date, Time, Range, Regexp, Hash, Array, Float, String, FalseClass, TrueClass, Symbol, NilClass, Class].each { |cls|
diff --git a/spec/unit/resource_spec.rb b/spec/unit/resource_spec.rb
index ff31b2492..eaa3d5519 100755
--- a/spec/unit/resource_spec.rb
+++ b/spec/unit/resource_spec.rb
@@ -99,11 +99,11 @@ describe Puppet::Resource do
end
it 'should fail if strict is set and type does not exist' do
- lambda { Puppet::Resource.new('foo', 'title', {:strict=>true}) }.should raise_error(ArgumentError, 'Invalid resource type foo')
+ lambda { Puppet::Resource.new('foo', 'title', {:strict=>true}) }.should raise_error(ArgumentError, 'Invalid resource type foo')
end
it 'should fail if strict is set and class does not exist' do
- lambda { Puppet::Resource.new('Class', 'foo', {:strict=>true}) }.should raise_error(ArgumentError, 'Could not find declared class foo')
+ lambda { Puppet::Resource.new('Class', 'foo', {:strict=>true}) }.should raise_error(ArgumentError, 'Could not find declared class foo')
end
it "should fail if the title is a hash and the type is not a valid resource reference string" do
@@ -486,19 +486,23 @@ describe Puppet::Resource do
describe "when converting to puppet code" do
before do
- @resource = Puppet::Resource.new("one::two", "/my/file", :parameters => {:noop => true, :foo => %w{one two}})
- end
-
- it "should print the type and title" do
- @resource.to_manifest.should be_include("one::two { '/my/file':\n")
- end
-
- it "should print each parameter, with the value single-quoted" do
- @resource.to_manifest.should be_include(" noop => 'true'")
+ @resource = Puppet::Resource.new("one::two", "/my/file",
+ :parameters => {
+ :noop => true,
+ :foo => %w{one two},
+ :ensure => 'present',
+ }
+ )
end
- it "should print array values appropriately" do
- @resource.to_manifest.should be_include(" foo => ['one','two']")
+ it "should align, sort and add trailing commas to attributes with ensure first" do
+ @resource.to_manifest.should == <<-HEREDOC.gsub(/^\s{8}/, '').gsub(/\n$/, '')
+ one::two { '/my/file':
+ ensure => 'present',
+ foo => ['one', 'two'],
+ noop => 'true',
+ }
+ HEREDOC
end
end