class Meer::CLI

Constants

JOB_HEADERS

Public Instance Methods

csv(workbook, sheet) click to toggle source
# File lib/meer/cli.rb, line 30
def csv(workbook, sheet)
  puts client.workbook_data(workbook, sheet)
end
jobs() click to toggle source
# File lib/meer/cli.rb, line 59
def jobs
  data = client.running_jobs
  
  rows = if data.size > 0
    data.select!{|r| r['dapJobConfigurationId'].to_i == options[:workbook] } if options[:workbook]
    data.select!{|r| r['jobExecutionId'].to_i == options[:job] } if options[:job]
    data.sort_by {|r| -r['progress'].to_i }.map { |r| JOB_HEADERS.map{|k| r[k]} }
  else
    []
  end

  puts Terminal::Table.new(headings: JOB_HEADERS, rows: rows)
end
login() click to toggle source
# File lib/meer/cli.rb, line 7
def login
  user     = ask("username:", default: ENV['USER'])
  password = ask("password:", :echo => false)
  puts
  
  client(user, password).login
end
sheets(workbook_id) click to toggle source
# File lib/meer/cli.rb, line 23
def sheets(workbook_id)
  client.workbook(workbook_id)['sheets'].each do |sheet|
    puts " - #{sheet['name']}"
  end
end
start(wb_id) click to toggle source
# File lib/meer/cli.rb, line 50
def start(wb_id)
  puts client.run_workbook(wb_id).to_yaml
end
table(workbook, sheet) click to toggle source
# File lib/meer/cli.rb, line 37
def table(workbook, sheet)
  data = client.workbook_data(workbook, sheet)
  rows = CSV.parse(data, :headers => true).to_a
  headers = rows.slice!(0)
  schema = parse_schema(headers, rows.first)
  
  filter!(schema, rows, options[:filter]) if options[:filter]
  sort!(schema, rows, options[:sort]) if options[:sort]
  
  puts Terminal::Table.new(headings: headers, rows: rows)
end
workbooks() click to toggle source
# File lib/meer/cli.rb, line 16
def workbooks 
  client.workbooks.sort_by { |w| w['path'] }.each do |workbook|
    puts " - [#{workbook['id']}] #{workbook['path']}"
  end
end

Private Instance Methods

client(user=nil, password=nil) click to toggle source
# File lib/meer/cli.rb, line 75
def client user=nil, password=nil
  @client = Datameer.new ENV['DATAMEER_URL'], user, password
end
filter!(schema, rows, filter_str) click to toggle source
# File lib/meer/cli.rb, line 93
def filter! schema, rows, filter_str
  cols = filter_str.split(?,).map do |name| 
    name, q = name.split('=')
    OpenStruct.new(col: schema[name], query: q)
  end

  rows.select! do |row|
    cols.map{|c| row[c.col.index].to_s =~ /#{c.query}/ }.all?
  end
end
parse_schema(headers, row) click to toggle source
# File lib/meer/cli.rb, line 79
def parse_schema(headers, row)
  schema = Hash.new
  headers.each_with_index do |col_name, idx|
    
    type    = :number if Float(row[idx]) rescue false
    type  ||= :time   if row[idx] =~ /\A\w+ \d{1,2}, \d{4} \d{1,2}:\d{1,2}:\d{1,2} (AM|PM)\z/
    type  ||= :string
    
    schema[col_name] = OpenStruct.new type: type, index: idx
  end
  
  schema
end
sort!(schema, rows, sort_str) click to toggle source
# File lib/meer/cli.rb, line 105
def sort! schema, rows, sort_str
  cols = sort_str.split(',').map do |name| 
    reverse = name[-1] == '-'
    name    = name[0..-2] if reverse

    OpenStruct.new(col: schema[name], reverse: reverse)
  end
  
  rows.sort_by! do |row| 
    cols.map do |c| 
      val = row[c.col.index]
      val = val.to_f              if c.col.type == :number
      val = Time.parse(val)       if c.col.type == :time
      val = ReverseOrder.new(val) if c.reverse
      val
    end
  end
end