diff options
author | Daniel Pittman <daniel@puppetlabs.com> | 2011-04-29 15:19:24 -0700 |
---|---|---|
committer | Daniel Pittman <daniel@puppetlabs.com> | 2011-04-29 15:37:07 -0700 |
commit | 65b9a3c4f4e6830ed094d46381050dfa72c7eccd (patch) | |
tree | e7ec3a468bdcb5042a52fb8f997be52a3b9d81c2 /lib/puppet/interface/documentation.rb | |
parent | 97ae812f0a67ef01daed4e9220981e2bc7c70603 (diff) | |
download | puppet-65b9a3c4f4e6830ed094d46381050dfa72c7eccd.tar.gz puppet-65b9a3c4f4e6830ed094d46381050dfa72c7eccd.tar.xz puppet-65b9a3c4f4e6830ed094d46381050dfa72c7eccd.zip |
(#7221) Strip bad whitespace from face and action docs.
We now strip whitespace in face (and related) documentation in two places:
We strip any trailing whitespace on each line, just because.
We strip any leading indent, but not all leading whitespace, from the text.
That is, we strip the *minimum* amount of whitespace that we can take from
every line in the documentation without changing the overall content.
Reviewed-By: Pieter van de Bruggen <pieter@puppetlabs.com>
Diffstat (limited to 'lib/puppet/interface/documentation.rb')
-rw-r--r-- | lib/puppet/interface/documentation.rb | 104 |
1 files changed, 63 insertions, 41 deletions
diff --git a/lib/puppet/interface/documentation.rb b/lib/puppet/interface/documentation.rb index d0bfbb261..91db0e074 100644 --- a/lib/puppet/interface/documentation.rb +++ b/lib/puppet/interface/documentation.rb @@ -1,35 +1,74 @@ +# This isn't usable outside Puppet::Interface; don't load it alone. class Puppet::Interface - module TinyDocs - attr_accessor :summary - def summary(value = nil) - self.summary = value unless value.nil? - @summary + module DocGen + def self.strip_whitespace(text) + text.gsub!(/[ \t\f]+$/, '') + + # We need to identify an indent: the minimum number of whitespace + # characters at the start of any line in the text. + indent = text.each_line.map {|x| x.index(/[^\s]/) }.compact.min + + if indent > 0 then + text.gsub!(/^[ \t\f]{0,#{indent}}/, '') + end + + return text end - def summary=(value) - value = value.to_s - value =~ /\n/ and - raise ArgumentError, "Face summary should be a single line; put the long text in 'description' instead." - @summary = value + # The documentation attributes all have some common behaviours; previously + # we open-coded them across the set of six things, but that seemed + # wasteful - especially given that they were literally the same, and had + # the same bug hidden in them. + # + # This feels a bit like overkill, but at least the common code is common + # now. --daniel 2011-04-29 + def attr_doc(name, &validate) + # Now, which form of the setter do we want, validated or not? + get_arg = "value.to_s" + if validate + define_method(:"_validate_#{name}", validate) + get_arg = "_validate_#{name}(#{get_arg})" + end + + # We use module_eval, which I don't like much, because we can't have an + # argument to a block with a default value in Ruby 1.8, and I don't like + # the side-effects (eg: no argument count validation) of using blocks + # without as metheds. When we are 1.9 only (hah!) you can totally + # replace this with some up-and-up define_method. --daniel 2011-04-29 + module_eval(<<-EOT, __FILE__, __LINE__ + 1) + def #{name}(value = nil) + self.#{name} = value unless value.nil? + @#{name} + end + + def #{name}=(value) + @#{name} = Puppet::Interface::DocGen.strip_whitespace(#{get_arg}) + end + EOT end + end + + module TinyDocs + extend Puppet::Interface::DocGen - attr_accessor :description - def description(value = nil) - self.description = value unless value.nil? - @description + attr_doc :summary do |value| + value =~ /\n/ and + raise ArgumentError, "Face summary should be a single line; put the long text in 'description' instead." + value end + + attr_doc :description end module FullDocs + extend Puppet::Interface::DocGen include TinyDocs - attr_accessor :examples - def examples(value = nil) - self.examples = value unless value.nil? - @examples - end + attr_doc :examples + attr_doc :notes + attr_doc :license - attr_accessor :short_description + attr_doc :short_description def short_description(value = nil) self.short_description = value unless value.nil? if @short_description.nil? then @@ -50,37 +89,20 @@ class Puppet::Interface if value =~ /\n/ then raise ArgumentError, 'author should be a single line; use multiple statements for multiple authors' end - @authors.push(value) + @authors.push(Puppet::Interface::DocGen.strip_whitespace(value)) end @authors.empty? ? nil : @authors.join("\n") end - def author=(value) - if Array(value).any? {|x| x =~ /\n/ } then - raise ArgumentError, 'author should be a single line; use multiple statements' - end - @authors = Array(value) - end def authors @authors end - def authors=(value) + def author=(value) if Array(value).any? {|x| x =~ /\n/ } then raise ArgumentError, 'author should be a single line; use multiple statements' end - @authors = Array(value) - end - - attr_accessor :notes - def notes(value = nil) - @notes = value unless value.nil? - @notes - end - - attr_accessor :license - def license(value = nil) - @license = value unless value.nil? - @license + @authors = Array(value).map{|x| Puppet::Interface::DocGen.strip_whitespace(x) } end + alias :authors= :author= def copyright(owner = nil, years = nil) if years.nil? and not owner.nil? then |