class Gzr::Commands::Space::Ls

Public Class Methods

new(filter_spec, options) click to toggle source
Calls superclass method Gzr::Command::new
# File lib/gzr/commands/space/ls.rb, line 33
def initialize(filter_spec, options)
  super()
  @filter_spec = filter_spec
  @options = options
end

Public Instance Methods

execute(input: $stdin, output: $stdout) click to toggle source
# File lib/gzr/commands/space/ls.rb, line 61
def execute(input: $stdin, output: $stdout)
  say_warning("options: #{@options.inspect}") if @options[:debug]
  with_session do
    space_ids = process_args([@filter_spec])
    begin
      puts "No spaces match #{@filter_spec}"
      return nil
    end unless space_ids && space_ids.length > 0

    @options[:fields] = 'dashboards(id,title)' if @filter_spec == 'lookml'
    f = @options[:fields]

    data = space_ids.map do |space_id|
      query_space(space_id, f).to_attrs
    end.compact
    space_ids.each do |space_id|
      query_space_children(space_id, 'id,name,parent_id').map {|child| child.to_attrs}.each do |child|
        data.push child
      end
    end


    begin
      puts "No data returned for spaces #{space_ids.inspect}"
      return nil
    end unless data && data.length > 0

    table_hash = Hash.new
    fields = field_names(@options[:fields])
    table_hash[:header] = fields unless @options[:plain]
    table_hash[:rows] = flatten_data(data).map do |row|
      fields.collect do |e|
        row.fetch(e.to_sym,nil)
      end
    end
    table = TTY::Table.new(table_hash)
    alignments = fields.collect do |k|
      (k =~ /id\)*$/) ? :right : :left
    end
    begin
      if @options[:csv] then
        output.puts render_csv(table)
      else
        output.puts table.render(if @options[:plain] then :basic else :ascii end, alignments: alignments)
      end
    end if table
  end
end
flatten_data(raw_array) click to toggle source
# File lib/gzr/commands/space/ls.rb, line 39
def flatten_data(raw_array)
  rows = raw_array.map do |entry|
    entry.select do |k,v|
      !(v.kind_of?(Array) || v.kind_of?(Hash))
    end
  end
  raw_array.map do |entry|
    entry.select do |k,v|
      v.kind_of? Array
    end.each do |section,section_value|
      section_value.each do |section_entry|
        h = {}
        section_entry.each_pair do |k,v|
          h[:"#{section}.#{k}"] = v
        end
        rows.push(h)
      end
    end
  end
  rows
end