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