module Chef::Knife::GithubBaseList

Public Class Methods

included(includer) click to toggle source
# File lib/chef/knife/github_baselist.rb, line 23
def self.included(includer)
  includer.class_eval do

    option :fields,
      :long => "--fields 'NAME, NAME'",
      :description => "The fields to output, comma-separated"

    option :fieldlist,
      :long => "--fieldlist",
      :description => "The available fields to output/filter",
      :boolean => true

    option :noheader,
      :long => "--noheader",
      :description => "Removes header from output",
      :boolean => true

    def display_info(data, columns, match = [])
      object_list = []

      if config[:fields]
        config[:fields].split(',').each { |n| object_list << ui.color(("#{n}").capitalize.strip, :bold) }
      else
        columns.each { |c| r = c.split(","); object_list << ui.color(("#{r.last}").strip, :bold) }
      end

      col = object_list.count
      object_list = [] if config[:noheader]

      data.each do |k,v|
        if config[:fields]
          config[:fields].downcase.split(',').each { |n| object_list << ((v["#{n}".strip]).to_s || 'n/a') }
        else
          color = :white
          if !match.empty? && !config[:all]
            matches = []; match.each { |m| matches << v[m].to_s }
            if matches.uniq.count == 1
              next if config[:mismatch]
            else
              color = :yellow
            end
          end
          columns.each { |c|  r = c.split(","); object_list << ui.color((v["#{r.first}"]).to_s, color) || 'n/a' }
        end
      end

      puts ui.list(object_list, :uneven_columns_across, col)
      display_object_fields(data) if locate_config_value(:fieldlist)
    end

    def display_object_fields(object)
      exit 1 if object.nil? || object.empty?
      object_fields = [
        ui.color('Key', :bold),
        ui.color('Type', :bold),
        ui.color('Value', :bold)
      ]
      object.first.each do |n|
        if n.class == Hash
          n.keys.each do |k,v|
            object_fields << ui.color(k, :yellow, :bold)
            object_fields << n[k].class.to_s
            if n[k].kind_of?(Array)
              object_fields << '<Array>'
            elsif n[k].kind_of?(Hash)
              object_fields << '<Hash>'
            else
              object_fields << ("#{n[k]}").strip.to_s
            end
          end
        end
      end
      puts "\n"
      puts ui.list(object_fields, :uneven_columns_across, 3)
    end
  end
end

Public Instance Methods

display_info(data, columns, match = []) click to toggle source
# File lib/chef/knife/github_baselist.rb, line 40
def display_info(data, columns, match = [])
  object_list = []

  if config[:fields]
    config[:fields].split(',').each { |n| object_list << ui.color(("#{n}").capitalize.strip, :bold) }
  else
    columns.each { |c| r = c.split(","); object_list << ui.color(("#{r.last}").strip, :bold) }
  end

  col = object_list.count
  object_list = [] if config[:noheader]

  data.each do |k,v|
    if config[:fields]
      config[:fields].downcase.split(',').each { |n| object_list << ((v["#{n}".strip]).to_s || 'n/a') }
    else
      color = :white
      if !match.empty? && !config[:all]
        matches = []; match.each { |m| matches << v[m].to_s }
        if matches.uniq.count == 1
          next if config[:mismatch]
        else
          color = :yellow
        end
      end
      columns.each { |c|  r = c.split(","); object_list << ui.color((v["#{r.first}"]).to_s, color) || 'n/a' }
    end
  end

  puts ui.list(object_list, :uneven_columns_across, col)
  display_object_fields(data) if locate_config_value(:fieldlist)
end
display_object_fields(object) click to toggle source
# File lib/chef/knife/github_baselist.rb, line 73
def display_object_fields(object)
  exit 1 if object.nil? || object.empty?
  object_fields = [
    ui.color('Key', :bold),
    ui.color('Type', :bold),
    ui.color('Value', :bold)
  ]
  object.first.each do |n|
    if n.class == Hash
      n.keys.each do |k,v|
        object_fields << ui.color(k, :yellow, :bold)
        object_fields << n[k].class.to_s
        if n[k].kind_of?(Array)
          object_fields << '<Array>'
        elsif n[k].kind_of?(Hash)
          object_fields << '<Hash>'
        else
          object_fields << ("#{n[k]}").strip.to_s
        end
      end
    end
  end
  puts "\n"
  puts ui.list(object_fields, :uneven_columns_across, 3)
end