diff options
| author | Luke Kanies <luke@madstop.com> | 2008-08-20 12:57:26 -0500 |
|---|---|---|
| committer | Luke Kanies <luke@madstop.com> | 2008-08-20 12:57:26 -0500 |
| commit | c8190421a351ed327361a5daca82441be39ce834 (patch) | |
| tree | 5eae8eafafacafa817c5e890e03d1a9bcf17358d | |
| parent | 78bc32d0153dd98fadae99dcd71d26fc97210d3c (diff) | |
| download | puppet-c8190421a351ed327361a5daca82441be39ce834.tar.gz puppet-c8190421a351ed327361a5daca82441be39ce834.tar.xz puppet-c8190421a351ed327361a5daca82441be39ce834.zip | |
Fixing the String format (fixes #1522).
The string format no longer provides any support methods,
which means that I had to create to_multiple_s and from_multiple_s
methods on the SSL classes. I created them in the base class
and tested them just in the cert class.
Signed-off-by: Luke Kanies <luke@madstop.com>
| -rw-r--r-- | lib/puppet/network/format.rb | 4 | ||||
| -rw-r--r-- | lib/puppet/network/formats.rb | 18 | ||||
| -rw-r--r-- | lib/puppet/ssl/base.rb | 11 | ||||
| -rwxr-xr-x | spec/integration/network/formats.rb | 19 | ||||
| -rwxr-xr-x | spec/unit/network/formats.rb | 32 | ||||
| -rwxr-xr-x | spec/unit/ssl/certificate.rb | 44 |
6 files changed, 69 insertions, 59 deletions
diff --git a/lib/puppet/network/format.rb b/lib/puppet/network/format.rb index a4515e39f..5f259fa49 100644 --- a/lib/puppet/network/format.rb +++ b/lib/puppet/network/format.rb @@ -61,6 +61,10 @@ class Puppet::Network::Format klass.instance_methods.include?(render_method) end + def to_s + "Puppet::Network::Format[%s]" % name + end + private attr_reader :intern_method, :render_method, :intern_multiple_method, :render_multiple_method diff --git a/lib/puppet/network/formats.rb b/lib/puppet/network/formats.rb index e11748ce6..8e4c59fb3 100644 --- a/lib/puppet/network/formats.rb +++ b/lib/puppet/network/formats.rb @@ -53,20 +53,4 @@ Puppet::Network::FormatHandler.create(:marshal, :mime => "text/marshal") do end end -Puppet::Network::FormatHandler.create(:s, :mime => "text/plain") do - # For now, use the YAML separator. - SEPARATOR = "\n---\n" - - def intern_multiple(klass, text) - text.split(SEPARATOR).collect { |inst| intern(klass, inst) } - end - - def render_multiple(instances) - instances.collect { |inst| render(inst) }.join(SEPARATOR) - end - - # Everything's supported - def supported?(klass) - true - end -end +Puppet::Network::FormatHandler.create(:s, :mime => "text/plain") diff --git a/lib/puppet/ssl/base.rb b/lib/puppet/ssl/base.rb index 08efb314b..a005bfaf0 100644 --- a/lib/puppet/ssl/base.rb +++ b/lib/puppet/ssl/base.rb @@ -2,6 +2,17 @@ require 'puppet/ssl' # The base class for wrapping SSL instances. class Puppet::SSL::Base + # For now, use the YAML separator. + SEPARATOR = "\n---\n" + + def self.from_multiple_s(text) + text.split(SEPARATOR).collect { |inst| from_s(inst) } + end + + def self.to_multiple_s(instances) + instances.collect { |inst| inst.to_s }.join(SEPARATOR) + end + def self.wraps(klass) @wrapped_class = klass end diff --git a/spec/integration/network/formats.rb b/spec/integration/network/formats.rb new file mode 100755 index 000000000..0cfbadd38 --- /dev/null +++ b/spec/integration/network/formats.rb @@ -0,0 +1,19 @@ +#!/usr/bin/env ruby + +require File.dirname(__FILE__) + '/../../spec_helper' + +require 'puppet/network/formats' + +describe Puppet::Network::FormatHandler.format(:s) do + before do + @format = Puppet::Network::FormatHandler.format(:s) + end + + it "should support certificates" do + @format.should be_supported(Puppet::SSL::Certificate) + end + + it "should not support catalogs" do + @format.should_not be_supported(Puppet::Node::Catalog) + end +end diff --git a/spec/unit/network/formats.rb b/spec/unit/network/formats.rb index d5967c6f2..f7493360d 100755 --- a/spec/unit/network/formats.rb +++ b/spec/unit/network/formats.rb @@ -98,37 +98,5 @@ describe "Puppet Network Format" do it "should have its mimetype set to text/plain" do @text.mime.should == "text/plain" end - - it "should fail if the instance does not respond to 'to_s'" do - instance = mock 'nope' - instance.expects(:to_s).never - lambda { @text.render(instance) }.should raise_error(NotImplementedError) - end - - it "should render by calling 'to_s' on the instance" do - # Use an instance that responds to 'to_s' - instance = "foo" - instance.expects(:to_s).returns "string" - @text.render(instance).should == "string" - end - - it "should render multiple instances by calling 'to_s' on each instance and joining the results with '\\n---\\n'" do - instances = ["string1", 'string2'] - - @text.render_multiple(instances).should == "string1\n---\nstring2" - end - - it "should intern by calling 'from_s' on the class" do - text = "foo" - String.expects(:from_s).with(text).returns "bar" - @text.intern(String, text).should == "bar" - end - - it "should intern multiples by splitting on '\\n---\\n' and converting each string to an instance" do - text = "foo\n---\nbar" - String.expects(:from_s).with("foo").returns "FOO" - String.expects(:from_s).with("bar").returns "BAR" - @text.intern_multiple(String, text).should == ["FOO", "BAR"] - end end end diff --git a/spec/unit/ssl/certificate.rb b/spec/unit/ssl/certificate.rb index 34868dcd2..92b7f2cd6 100755 --- a/spec/unit/ssl/certificate.rb +++ b/spec/unit/ssl/certificate.rb @@ -41,6 +41,40 @@ describe Puppet::SSL::Certificate do @class.from_s("my certificate") end + + it "should create multiple certificate instances when asked" do + cert1 = stub 'cert1' + @class.expects(:from_s).with("cert1").returns cert1 + cert2 = stub 'cert2' + @class.expects(:from_s).with("cert2").returns cert2 + + @class.from_multiple_s("cert1\n---\ncert2").should == [cert1, cert2] + end + end + + describe "when converting to a string" do + before do + @certificate = @class.new("myname") + end + + it "should return an empty string when it has no certificate" do + @certificate.to_s.should == "" + end + + it "should convert the certificate to pem format" do + certificate = mock 'certificate', :to_pem => "pem" + @certificate.content = certificate + @certificate.to_s.should == "pem" + end + + it "should be able to convert multiple instances to a string" do + cert2 = @class.new("foo") + @certificate.expects(:to_s).returns "cert1" + cert2.expects(:to_s).returns "cert2" + + @class.to_multiple_s([@certificate, cert2]).should == "cert1\n---\ncert2" + + end end describe "when managing instances" do @@ -84,16 +118,6 @@ describe Puppet::SSL::Certificate do @certificate.content.should equal(certificate) end - it "should return an empty string when converted to a string with no certificate" do - @certificate.to_s.should == "" - end - - it "should convert the certificate to pem format when converted to a string" do - certificate = mock 'certificate', :to_pem => "pem" - @certificate.content = certificate - @certificate.to_s.should == "pem" - end - it "should have a :to_text method that it delegates to the actual key" do real_certificate = mock 'certificate' real_certificate.expects(:to_text).returns "certificatetext" |
