class Envo::CmdCopy

Constants

Name

Attributes

source[RW]
target[RW]

Public Class Methods

new(source, target) click to toggle source
# File lib/envo/cmd_copy.rb, line 30
def initialize(source, target)
  @source = source
  @target = target
end
parse_cli(args) click to toggle source
# File lib/envo/cmd_copy.rb, line 20
def self.parse_cli(args)
  opts = CliParser.filter_opts(args)
  parse_tokens(args, opts)
end
parse_tokens(tokens, opts) click to toggle source
# File lib/envo/cmd_copy.rb, line 25
def self.parse_tokens(tokens, opts)
  raise Envo::Error.new "copy: provide two names to copy. Use 'copy <source-name> <target-name>'" if tokens.size != 2
  ParsedCmd.new(CmdCopy.new(tokens[0], tokens[1]), opts)
end
register_cli_parser(parser) click to toggle source
# File lib/envo/cmd_copy.rb, line 11
def self.register_cli_parser(parser)
  parser.add_cmd(Name, ->(cmd, args) { parse_cli(args) })
  parser.add_cmd('cp', ->(cmd, args) { parse_cli(args) })
end
register_help(help) click to toggle source
# File lib/envo/cmd_copy.rb, line 4
    def self.register_help(help)
      help.add_cmd 'copy <source-name> <target-name>', <<~EOF
        copy value of source to target
          shorthand: 'cp'
      EOF
    end
register_script_parser(parser) click to toggle source
# File lib/envo/cmd_copy.rb, line 16
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_copy.rb, line 37
def execute(ctx)
  esrc = ctx.expand_name(@source)
  raw_src = ctx.raw_get(esrc)
  raise Envo::Error.new "copy: no such var '#{esrc}'" if !raw_src && !ctx.force?
  return if !raw_src

  etarget = ctx.expand_name(@target)
  raw_target = ctx.raw_get(etarget)

  ok = !raw_target
  ok ||= ctx.ask("'#{etarget}' already exists. Overwrite?")
  raise Envo::Error.new "'#{etarget}' exists" if !ok

  return if esrc == etarget # copy something over itself...
  return if !raw_src && !raw_target # no point in doing anything if they don't exist

  ctx.raw_set(etarget, raw_src)
end