class Envo::CmdListDel

Attributes

name[RW]
value[RW]

Public Class Methods

new(name, value) click to toggle source
# File lib/envo/cmd_list_del.rb, line 30
def initialize(name, value)
  @name = name
  @value = value
end
parse_cli_all(args) click to toggle source
# File lib/envo/cmd_list_del.rb, line 14
def self.parse_cli_all(args)
  opts = CliParser.filter_opts_front(args)
  raise Envo::Error.new "list-del: missing name. Use 'ld <name> <val|index>'" if args.empty?
  parse_cli_args(args[0], args[1..], opts)
end
parse_cli_args(name, args, opts) click to toggle source
# File lib/envo/cmd_list_del.rb, line 20
def self.parse_cli_args(name, args, opts)
  opts += CliParser.filter_opts(args)
  parse_tokens(name, args, opts)
end
parse_tokens(name, tokens, opts) click to toggle source
# File lib/envo/cmd_list_del.rb, line 25
def self.parse_tokens(name, tokens, opts)
  raise Envo::Error.new "list-del: provide one value or index to delete. Use 'list <name> del <val|index>'" if tokens.size != 1
  ParsedCmd.new(CmdListDel.new(name, tokens[0]), opts)
end
register_cli_parser(parser) click to toggle source
# File lib/envo/cmd_list_del.rb, line 7
def self.register_cli_parser(parser)
  parser.add_cmd('ld', ->(cmd, args) { parse_cli_all(args) })
end
register_help(help) click to toggle source
# File lib/envo/cmd_list_del.rb, line 3
def self.register_help(help)
  help.add_cmd 'ld <name> <val|index>', "shorthand for 'list <name> del <val|index>'"
end
register_script_parser(parser) click to toggle source
# File lib/envo/cmd_list_del.rb, line 11
def self.register_script_parser(parser)
end

Public Instance Methods

execute(ctx) click to toggle source
# File lib/envo/cmd_list_del.rb, line 37
def execute(ctx)
  ename = ctx.expand_name(@name)

  list = ctx.smart_get(ename)

  if list.type == :empty
    return if ctx.force?
    raise Envo::Error.new "list-del: deleting an item from a non-exiting value"
  end

  ok = list.list?
  ok ||= ctx.ask("#{ename} is not a list, but a #{list.type}. Convert?")
  raise Envo::Error.new "list-del: deleting an item from a non-list" if !ok

  list = list.to_list

  val = ctx.expand_value(@value)
  if val.list?
    raise Envo::Error.new "list-del: can't delete a list from a list" if !ctx.force?
    return
  end
  val = val.to_s

  index = val.to_i
  if !ctx.raw? && index.to_s == val
    deleted = list.delete_at(index)
    if !deleted
      raise Envo::Error.new "list-del: no index #{val} in #{ename}" if !ctx.force?
      return
    end
  else
    deleted = list.delete(val)
    if !deleted
      raise Envo::Error.new "list-del: no item '#{val}' in #{ename}" if !deleted
      return
    end
  end

  ctx.smart_set(ename, list)
end