class Envo::CmdSet
Constants
- Name
Attributes
name[RW]
value[RW]
Public Class Methods
new(name, value)
click to toggle source
# File lib/envo/cmd_set.rb, line 50 def initialize(name, value) @name = name @value = value end
parse_cli(args)
click to toggle source
# File lib/envo/cmd_set.rb, line 19 def self.parse_cli(args) opts = CliParser.filter_opts(args) parse_tokens(args, opts) end
parse_script(args)
click to toggle source
# File lib/envo/cmd_set.rb, line 46 def self.parse_script(args) puts "#{Name} parse_script" end
parse_tokens(args, opts)
click to toggle source
# File lib/envo/cmd_set.rb, line 24 def self.parse_tokens(args, opts) # find first instance of equals i = args.find_index { |arg| arg =~ /=/ } raise Envo::Error.new "set: missing '='. Use 'set <name> = <val>'" if !i elem = args[i] eq_i = elem.index('=') first = elem[0...eq_i] second = elem[eq_i+1..] split = [first, '=', second].select { |s| !s.empty? } args[i..i] = split i = args.index('=') raise Envo::Error.new "set: bad name '#{args[0...i].join(' ')}'. Use 'set <name> = <val>'" if i != 1 return ParsedCmd.new(CmdUnset.new([args[0]]), opts) if args.size == 2 ParsedCmd.new(CmdSet.new(args[0], args[2..]), opts) end
register_cli_parser(parser)
click to toggle source
# File lib/envo/cmd_set.rb, line 11 def self.register_cli_parser(parser) parser.add_cmd(Name, ->(cmd, args) { parse_cli(args) }) end
register_help(help)
click to toggle source
# File lib/envo/cmd_set.rb, line 4 def self.register_help(help) help.add_cmd "set <name>=<val>", <<~EOF set a value to an environment variable 'set name=' unsets the value EOF end
register_script_parser(parser)
click to toggle source
# File lib/envo/cmd_set.rb, line 15 def self.register_script_parser(parser) parser.add_cmd(Name, ->(cmd, tokens, opts) { parse_tokens(tokens, opts) }) end
Public Instance Methods
execute(ctx)
click to toggle source
# File lib/envo/cmd_set.rb, line 57 def execute(ctx) ename = ctx.expand_name(@name) new_val = ctx.expand_value(@value) old_val = ctx.smart_get(ename) ok = old_val.type == new_val.type ok ||= old_val.accept_assign?(new_val) ok ||= ctx.ask("Assign #{new_val.type} to #{old_val.type}?") raise Envo::Error.new "set: assignment of #{new_val.type} to #{old_val.type}" if !ok idesc = new_val.invalid_description ok = !idesc ok ||= ctx.ask("Assign #{idesc} to #{ename}?") raise Envo::Error.new "set: assignment of #{idesc} to #{ename}" if !ok ctx.smart_set(ename, new_val) end