Issue #15046 has been updated by Chris Price. Status changed from Investigating to Needs Decision Assignee changed from Chris Price to eric sorenson
---------------------------------------- Bug #15046: bad error message for type defined without namevar https://projects.puppetlabs.com/issues/15046#change-68898 Author: Chris Price Status: Needs Decision Priority: Low Assignee: eric sorenson Category: Target version: Affected Puppet version: Keywords: Branch: If you write a type that looks like this: <pre> Puppet::Type.newtype(:foo) do ensurable do defaultvalues defaultto :present end end </pre> And you then try to instantiate it using something like: <pre> resource = Puppet::Type::Foo.new(:title => 'myfoo') </pre> You will get a very bad error message about Array not having a method called "merge" or something to that effect. This is because in lib/puppet/type.rb around line 225 we have: <pre> def self.title_patterns case key_attributes.length when 0; [] when 1; ... </pre> Which returns an empty array if there is no namevar, and then in lib/puppet/resource.rb around line 423: <pre> def parse_title h = {} type = resource_type <b>if type.respond_to? :title_patterns</b> type.title_patterns.each { |regexp, symbols_and_lambdas| if captures = regexp.match(title.to_s) symbols_and_lambdas.zip(captures[1..-1]).each { |symbol_and_lambda,capture| sym, lam = symbol_and_lambda #self[sym] = lam.call(capture) h[sym] = lam.call(capture) } <b>return h</b> end } <b>else</b> return { :name => title.to_s } end end </pre> Basically this method falls through and unintentionally returns that empty array in that case... which leads to a very bad error message. I would have submitted a fix but I'm not sure what the desired behavior is; I suspect it's that we should give a clear error message about there being no namevar, but if so, I'm not sure whether that should happen in type.rb or resource.rb. -- You have received this notification because you have either subscribed to it, or are involved in it. To change your notification preferences, please click here: http://projects.puppetlabs.com/my/account -- You received this message because you are subscribed to the Google Groups "Puppet Bugs" 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-bugs?hl=en.
