Class: Loquacious::Configuration::Help

### Home Classes Methods

### In Files

- lib/loquacious/configuration/help.rb

### Parent

Object

### Namespace

- CLASS Loquacious::Configuration::Help::Error

### Methods

- ::new
- #colorize?
- #format_name
- #normalize_attr
- #print_node
- #show
- #show_all
- #show_attribute
- #show_attributes
- #show_nesting_nodes?

### Files

- History.txt
- README.rdoc

### Class/Module Index

Quicksearch

- Loquacious
- Loquacious::Configuration
- Loquacious::Configuration::DSL
- Loquacious::Configuration::Help
- Loquacious::Configuration::Iterator
- Loquacious::Undefined
- String

No matching classes.

# Loquacious::Configuration::Help

Generate nicely formatted help messages for a configuration. The Help class iterates over all the attributes in a configuration and outputs the name, value, and description to an IO stream. The format of the messages can be configured, and the description and/or value of the attribute can be shown or hidden independently.

### Public Class Methods

new( config, opts = {} ) click to toggle source

Create a new Help instance for the given configuration where config can be either a Configuration instance or a configuration name or symbol. Several options can be provided to determine how the configuration information will be printed to the IO stream.

    :name_leader      String appearing before the attribute name
    :name_length      Maximum length for an attribute name
    :name_value_sep   String separating the attribute name from the value
    :desc_leader      String appearing before the description
    :io               The IO object where help will be written
    :nesting_nodes    Flag to enable or disable output of nesting nodes
                      (this does not affect display of attributes
                      contained by the nesting nodes)
    :colorize         Flag to colorize the output or not
    :colors           Hash of colors for the name, value, description
        :name           Name color
        :value          Value color
        :description    Description color
        :leader         Leader and spacer color

The description is printed before each attribute name and value on its own line.

    # File lib/loquacious/configuration/help.rb, line 58
    def initialize( config, opts = {} )
      opts = @@defaults.merge opts
      @config = config.kind_of?(::Loquacious::Configuration) ? config :
                ::Loquacious::Configuration.for(config)

      @io = opts[:io]
      @name_length = Integer(opts[:name_length])
      @desc_leader = opts[:desc_leader]
      @nesting_nodes = opts[:nesting_nodes]
      @colorize = opts[:colorize]
      @colors = opts[:colors]

      unless @name_length > 0
        Iterator.new(@config).each do |node|
          length = node.name.length
          @name_length = length if length > @name_length
        end
      end

      name_leader = opts[:name_leader]
      name_value_sep = opts[:name_value_sep]
      extra_length = name_leader.length + name_value_sep.length
      name_value_sep = name_value_sep.gsub('%', '%%')

      @value_length = 78 - @name_length - extra_length
      @value_leader = "\n" + ' '*(@name_length + extra_length)
      @format = "#{name_leader}%-#{@name_length}s#{name_value_sep}%s"
      @name_format = "#{name_leader}%s"

      if colorize?
        @desc_leader = self.__send__(@colors[:leader], @desc_leader)
        name_leader = self.__send__(@colors[:leader], name_leader)
        name_value_sep = self.__send__(@colors[:leader], name_value_sep)

        @format = name_leader.dup
        @format << self.__send__(@colors[:name], "%-#{@name_length}s")
        @format << name_value_sep.dup
        @format << self.__send__(@colors[:value], "%s")

        @name_format = name_leader.dup
        @name_format << self.__send__(@colors[:name], "%s")
      end

      @desc_leader.freeze
      @value_leader.freeze
      @format.freeze
      @name_format.freeze
    end

### Public Instance Methods

colorize?() click to toggle source

Returns `true` if the help instance is configured to colorize the output messages. Returns `false` otherwise.

    # File lib/loquacious/configuration/help.rb, line 110
    def colorize?
      @colorize
    end

format_name( node, show_value ) click to toggle source

Format the name of the attribute pointed at by the given node. If the show_value flag is set to `true`, then the attribute value will also be included in the returned string.

    # File lib/loquacious/configuration/help.rb, line 199
    def format_name( node, show_value )
      name = node.name.reduce @name_length
      return @name_format % name if node.config? or !show_value

      sio = StringIO.new
      PP.pp(node.obj, sio, @value_length)
      sio.seek 0
      obj = sio.read.chomp.gsub("\n", @value_leader)
      @format % [name, obj]
    end

normalize_attr( name ) click to toggle source

Normalize the attribute name.

    # File lib/loquacious/configuration/help.rb, line 163
    def normalize_attr( name )
      case name
      when String, nil; name.to_s
      when Symbol; name.to_s
      when Array;  name.join('.')
      else
        raise Error, "cannot convert #{name.inspect} into an attribute identifier"
      end
    end

print_node( node, show_description, show_value ) click to toggle source

Format the attribute name, value, and description and print the results. The value can be printed or not by setting the show_value flag to either `true` or `false`. The description can be printed or not by setting the show_description flag to either `true` or `false`.

    # File lib/loquacious/configuration/help.rb, line 179
    def print_node( node, show_description, show_value )
      desc = node.desc.to_s.dup
      show_description = false if desc.empty?

      if show_description
        if colorize?
          desc = desc.gsub(/([^\n]+)/,
                           self.__send__(@colors[:description], '\1'))
        end
        @io.puts(desc.indent(@desc_leader))
      end

      @io.puts(format_name(node, show_value))
      @io.puts if show_description
    end

show( name = nil, opts = {} ) click to toggle source
Alias for: show_attribute
show_all( opts = {} ) click to toggle source

Show all attributes for the configuration. The same options allowed by the `show` method are also supported by this method.

    # File lib/loquacious/configuration/help.rb, line 156
    def show_all( opts = {} )
      show_attribute(nil, opts)
    end

Also aliased as: show_attributes
show_attribute( name = nil, opts = {} ) click to toggle source

Use this method to show the description for a single attribute or for all the attributes if no name is given. The options allow you to show the values along with the attributes and to hide the descriptions (if all you want to see are the values).

    :descriptions => true to show descriptions and false to hide them
    :values       => true to show values and false to hide them

    # File lib/loquacious/configuration/help.rb, line 134
    def show_attribute( name = nil, opts = {} )
      name, opts = nil, name if name.is_a?(Hash)
      opts = {
        :descriptions => true,
        :values => false
      }.merge!(opts)

      rgxp = Regexp.new(normalize_attr(name))
      show_description = opts[:descriptions]
      show_value = opts[:values]

      Iterator.new(@config).each do |node|
        next unless rgxp =~ node.name
        next if !show_nesting_nodes? and node.config?
        print_node(node, show_description, show_value)
      end
    end

Also aliased as: show
show_attributes( opts = {} ) click to toggle source
Alias for: show_all
show_nesting_nodes?() click to toggle source

Returns `true` if the help instance is configured to show nesting configuration nodes when iterating over the attributes. This only prevents the nesting node name from being displayed. The attributes nested under the node are still displayed regardless of this setting.

    # File lib/loquacious/configuration/help.rb, line 119
    def show_nesting_nodes?
      @nesting_nodes
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.