On Oct 26, 2009, at 11:11 PM, Markus Roberts wrote:

>
> This makes types responsible for the canonicalization of their titles,
> provides a default (nil) implementation and moves the File version  
> into
> that method.  Changes references to use it and does a minimal test.
>
> Signed-off-by: Markus Roberts <[email protected]>
> ---
> lib/puppet/resource/catalog.rb         |    2 +-
> lib/puppet/resource/reference.rb       |   34 +++++++ 
> +-----------------------
> lib/puppet/type.rb                     |    4 +++
> lib/puppet/type/file.rb                |   13 +++++++----
> spec/unit/parser/resource/reference.rb |    7 +++++-
> 5 files changed, 28 insertions(+), 32 deletions(-)
>
> diff --git a/lib/puppet/resource/catalog.rb b/lib/puppet/resource/ 
> catalog.rb
> index 5bf9a83..b30416f 100644
> --- a/lib/puppet/resource/catalog.rb
> +++ b/lib/puppet/resource/catalog.rb
> @@ -78,7 +78,7 @@ class Puppet::Resource::Catalog <  
> Puppet::SimpleGraph
>             @resource_table[ref] = resource
>
>             # If the name and title differ, set up an alias
> -            #self.alias(resource, resource.name) if  
> resource.respond_to?(:name) and resource.respond_to?(:title) and  
> resource.name != resource.title
> +
>             if resource.respond_to?(:name) and resource.respond_to? 
> (:title) and resource.name != resource.title
>                 self.alias(resource, resource.name) if  
> resource.isomorphic?
>             end
> diff --git a/lib/puppet/resource/reference.rb b/lib/puppet/resource/ 
> reference.rb
> index c205f10..ebc4275 100644
> --- a/lib/puppet/resource/reference.rb
> +++ b/lib/puppet/resource/reference.rb
> @@ -20,24 +20,12 @@ class Puppet::Resource::Reference
>     end
>
>     def initialize(argtype, argtitle = nil)
> -        if argtitle.nil?
> -            if argtype.is_a?(Puppet::Type)
> -                self.title = argtype.title
> -                self.type = argtype.class.name
> -            else
> -                self.title = argtype
> -                if self.title == argtype
> -                    raise ArgumentError, "No title provided and  
> title '%s' is not a valid resource reference" % argtype.inspect
> -                end
> -            end
> -        else
> -            # This will set @type if it looks like a resource  
> reference.
> -            self.title = argtitle
> -
> -            # Don't override whatever was done by setting the title.
> -            self.type ||= argtype
> -        end
> -
> +        self.type,self.title =
> +         if    (argtitle || argtype) =~ /^([^\[\]]+)\[(.+)\]$/ then  
> [ $1,                 $2            ]
> +         elsif argtitle                                        then  
> [ argtype,            argtitle      ]
> +         elsif argtype.is_a?(Puppet::Type)                     then  
> [ argtype.class.name, argtype.title ]
> +         else raise ArgumentError, "No title provided and  
> #{argtype.inspect} is not a valid resource reference"
> +         end

Does this actually change behaviour?  If not, seems a bit weird to  
include it here.

>         @builtin_type = nil
>     end
>
> @@ -47,15 +35,11 @@ class Puppet::Resource::Reference
>         return nil
>     end
>
> -    # If the title has square brackets, treat it like a reference and
> -    # set things appropriately; else, just set it.
>     def title=(value)
> -        if value =~ /^([^\[\]]+)\[(.+)\]$/
> -            self.type = $1
> -            @title = $2
> -        else
> -            @title = value
> +        if @type and klass = Puppet::Type.type(@type.to_s.downcase)
> +            value = klass.canonicalize_title(value)
>         end
> +        @title = value
>     end
>
>     # Canonize the type so we know it's always consistent.
> diff --git a/lib/puppet/type.rb b/lib/puppet/type.rb
> index ee87c26..429af8f 100644
> --- a/lib/puppet/type.rb
> +++ b/lib/puppet/type.rb
> @@ -227,6 +227,10 @@ class Type
>         @namevar
>     end
>
> +    def self.canonicalize_title(s)
> +        s
> +    end
> +
>     # Create a new parameter.  Requires a block and a name, stores  
> it in the
>     # @parameters array, and does some basic checking on it.
>     def self.newparam(name, options = {}, &block)
> diff --git a/lib/puppet/type/file.rb b/lib/puppet/type/file.rb
> index 34dc445..994cd44 100644
> --- a/lib/puppet/type/file.rb
> +++ b/lib/puppet/type/file.rb
> @@ -393,17 +393,20 @@ module Puppet
>             @stat = nil
>         end
>
> +        def self.canonicalize_title(s)
> +            # Get rid of any duplicate slashes, and remove any  
> trailing slashes unless
> +            # the title is just a slash, in which case leave it.
> +            s.gsub(/\/+/, "/").sub(/(.)\/$/,'\1')
> +        end
> +
> +

So we're just canonicalizing titles?  This means something like:

file { foo: path => "/foo/bar/" }

will still trigger the failure, right?

>         def initialize(hash)
>             # Used for caching clients
>             @clients = {}
>
>             super
>
> -            # Get rid of any duplicate slashes, and remove any  
> trailing slashes.
> -            @title = @title.gsub(/\/+/, "/")
> -
> -            @title.sub!(/\/$/, "") unless @title == "/"
> -
> +            @title = self.class.canonicalize_title(@title)
>             @stat = nil
>         end
>
> diff --git a/spec/unit/parser/resource/reference.rb b/spec/unit/ 
> parser/resource/reference.rb
> index 6284e67..a703f92 100755
> --- a/spec/unit/parser/resource/reference.rb
> +++ b/spec/unit/parser/resource/reference.rb
> @@ -40,10 +40,15 @@ describe Puppet::Parser::Resource::Reference do
>         ref.to_s.should == "File[/tmp/yay]"
>     end
>
> -    it "should canonize resource references" do
> +    it "should canonize resource reference types" do
>         ref = @type.new(:type => "foo::bar", :title => "/tmp/yay")
>         ref.to_s.should == "Foo::Bar[/tmp/yay]"
>     end
> +
> +    it "should canonize resource reference values" do
> +        ref = @type.new(:type => "file", :title => "/tmp/yay/")
> +        ref.to_s.should == "File[/tmp/yay]"
> +    end
> end
>
> describe Puppet::Parser::Resource::Reference, " when modeling  
> defined types" do
> -- 
> 1.6.4
>
>
> >


-- 
The ships hung in the sky in much the same way that bricks don't.
     -- Douglas Adams
---------------------------------------------------------------------
Luke Kanies | http://reductivelabs.com | http://madstop.com


--~--~---------~--~----~------------~-------~--~----~
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