class Guard::DslDescriber

def show

Other tags:
    See: CLI#show -
def show
  # collect metadata
  groups = Guard.state.session.groups.all
  objects = []
  empty_plugin = OpenStruct.new
  empty_plugin.options = [["", nil]]
  groups.each do |group|
    plugins = Array(Guard.state.session.plugins.all(group: group.name))
    plugins = [empty_plugin] if plugins.empty?
    plugins.each do |plugin|
      options = plugin.options
      options = [["", nil]] if options.empty?
      options.each do |option, raw_value|
        value = raw_value.nil? ? "" : raw_value.inspect
        objects << [group.title, plugin.title, option.to_s, value]
      end
    end
  end
  # presentation
  rows = []
  prev_group = prev_plugin = prev_option = prev_value = nil
  objects.each do |group, plugin, option, value|
    group_changed = prev_group != group
    plugin_changed = (prev_plugin != plugin || group_changed)
    rows << :split if group_changed || plugin_changed
    rows << {
      Group: group_changed ? group : "",
      Plugin: plugin_changed ? plugin : "",
      Option: option,
      Value: value
    }
    prev_group = group
    prev_plugin = plugin
    prev_option = option
    prev_value = value
  end
  # render
  Formatador.display_compact_table(
    rows.drop(1),
    [:Group, :Plugin, :Option, :Value]
  )
end