Class: Envo::CmdSet
- Inherits:
-
Object
- Object
- Envo::CmdSet
- Defined in:
- lib/envo/cmd_set.rb
Constant Summary collapse
- Name =
'set'
Instance Attribute Summary collapse
-
#name ⇒ Object
Returns the value of attribute name.
-
#value ⇒ Object
Returns the value of attribute value.
Class Method Summary collapse
- .parse_cli(args) ⇒ Object
- .parse_script(args) ⇒ Object
- .parse_tokens(args, opts) ⇒ Object
- .register_cli_parser(parser) ⇒ Object
- .register_help(help) ⇒ Object
- .register_script_parser(parser) ⇒ Object
Instance Method Summary collapse
- #execute(ctx) ⇒ Object
-
#initialize(name, value) ⇒ CmdSet
constructor
A new instance of CmdSet.
Constructor Details
#initialize(name, value) ⇒ CmdSet
Returns a new instance of CmdSet.
50 51 52 53 |
# File 'lib/envo/cmd_set.rb', line 50 def initialize(name, value) @name = name @value = value end |
Instance Attribute Details
#name ⇒ Object
Returns the value of attribute name.
55 56 57 |
# File 'lib/envo/cmd_set.rb', line 55 def name @name end |
#value ⇒ Object
Returns the value of attribute value.
55 56 57 |
# File 'lib/envo/cmd_set.rb', line 55 def value @value end |
Class Method Details
.parse_cli(args) ⇒ Object
19 20 21 22 |
# 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) ⇒ Object
46 47 48 |
# File 'lib/envo/cmd_set.rb', line 46 def self.parse_script(args) puts "#{Name} parse_script" end |
.parse_tokens(args, opts) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# 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) ⇒ Object
11 12 13 |
# 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) ⇒ Object
4 5 6 7 8 9 |
# 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) ⇒ Object
15 16 17 |
# 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 |
Instance Method Details
#execute(ctx) ⇒ Object
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/envo/cmd_set.rb', line 57 def execute(ctx) ename = ctx.(@name) new_val = ctx.(@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 |