module Libis::Metadata::Cli::Helper

Attributes

prompt[R]

Public Class Methods

included(base) click to toggle source
# File lib/libis/metadata/cli/cli_helper.rb, line 14
def self.included(base)
  base.extend(ClassMethods)
end
new(*args) click to toggle source
Calls superclass method
# File lib/libis/metadata/cli/cli_helper.rb, line 20
def initialize(*args)
  @prompt = TTY::Prompt.new
  super
end

Private Instance Methods

ask(question, config, field, enum: nil, default: nil, mask: false) click to toggle source
# File lib/libis/metadata/cli/cli_helper.rb, line 33
def ask(question, config, field, enum: nil, default: nil, mask: false)
  cmd, args, opts = :ask, [question], {}
  if enum
    cmd = :select
    args << enum
    # Change default to its index in the enum
    default = index_of(enum, default)
    # Force the question if the supplied value is not valid
    config[field] = nil unless enum.include? config[field]
  end
  cmd = :mask if mask
  opts[:default] = default if default
  config[field] = prompt.send cmd, *args, opts if config[field].nil?
end
index_of(list, value) click to toggle source
# File lib/libis/metadata/cli/cli_helper.rb, line 27
def index_of(list, value)
  i = list.index(value)
  i += 1 if i
  i
end
tree_select(path, question: nil, file: false, page_size: 22, filter: true, cycle: false) click to toggle source
# File lib/libis/metadata/cli/cli_helper.rb, line 48
def tree_select(path, question: nil, file: false, page_size: 22, filter: true, cycle: false)
  path = Pathname.new(path) unless path.is_a? Pathname
  path = path.realpath

  dirs = path.children.select {|x| x.directory?}.sort
  files = file ? path.children.select {|x| x.file?}.sort : []

  choices = []
  choices << {name: "#{path}", value: path, disabled: file ? '' : false}
  choices << {name: '[..]', value: path.parent}

  dirs.each {|d| choices << {name: "[#{d.basename}]", value: d}}
  files.each {|f| choices << {name: f.basename.to_path, value: f}}

  question ||= "Select #{'file or ' if files}directory"
  selection = prompt.select question, choices,
                            per_page: page_size, filter: filter, cycle: cycle, default: file ? 2 : 1

  return selection.to_path if selection == path || selection.file?

  tree_select selection, file: file, page_size: page_size, filter: filter, cycle: cycle
end