Module: Kommand::Scripts::Script::ClassMethods

Defined in:
lib/kommand/scripts/script.rb

Instance Method Summary collapse

Instance Method Details

#add_arguments(*args) ⇒ Object

add arguments to existing args



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/kommand/scripts/script.rb', line 65

def add_arguments(*args)
  @arguments ||= Arguments.new
  args.each_with_index do |arg,a|
    argk, argv = *parse_arg(arg)
    
    # if the argument is not a known flag, is not a valid argument and the last argument was
    # a known flag, this must be a value for the last argument
    if !argument_flag?(arg) && !valid_argument?(argk) && (a > 0 && argument_flag?(args[a-1]))
      @arguments.last.value = arg
      next
    end

    # swap key/val to create an unnamed arg - if next argument is a valid flag we must be
    # a standalone argument
    if (!args[a+1] || valid_argument?(args[a+1])) && (argv.nil? || argv.empty?) && !Commands::exists?(arg)
      argv = argk
      argk = nil
    end

    raise InvalidArgument, "Invalid Argument: #{arg}" if validate_arguments? && !valid_argument?(argk)
    @arguments << argument_object(argk)
    @arguments.last.value = argv unless argv.empty?
  end
  @arguments
end

#argument_flag?(arg) ⇒ Boolean

Returns:

  • (Boolean)


100
101
102
# File 'lib/kommand/scripts/script.rb', line 100

def argument_flag?(arg)
  arg.match(/\A(-)+[a-z0-9\-]=?.*\Z/i)
end

#argument_object(key) ⇒ Object



104
105
106
# File 'lib/kommand/scripts/script.rb', line 104

def argument_object(key)
  valid_arguments.select { |varg| varg.keys.include?(key) }.first || Argument.new(key)
end

#arguments(*args) ⇒ Object



50
51
52
# File 'lib/kommand/scripts/script.rb', line 50

def arguments(*args)
  add_arguments(*args)
end

#parse_arg(arg) ⇒ Object



91
92
93
94
# File 'lib/kommand/scripts/script.rb', line 91

def parse_arg(arg)
  arga = arg.split("=")
  [arga.slice!(0), arga.join("=")] # rejoin with '=' in case there was an '=' in the passed value
end

#runObject



11
12
13
14
15
# File 'lib/kommand/scripts/script.rb', line 11

def run
  @script ||= new
  raise "You must define a `run` method for your script." unless @script.respond_to?(:run)
  @script.run
end

#set_arguments(*args) ⇒ Object

reset arguments to the provided args



59
60
61
62
# File 'lib/kommand/scripts/script.rb', line 59

def set_arguments(*args)
  @arguments = Arguments.new
  add_arguments(*args)
end

#user_argumentsObject



54
55
56
# File 'lib/kommand/scripts/script.rb', line 54

def user_arguments
  arguments
end

#valid_argument(arg) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/kommand/scripts/script.rb', line 26

def valid_argument(arg)
  @valid_args ||= Arguments.new
  @valid_args << begin
    if arg.is_a?(Argument)
      arg
    elsif arg.is_a?(Hash)
      Argument.new(arg.keys.first.to_s, arg.values.first)
    elsif arg.is_a?(Array)
      Argument.new(arg[0].to_s, (arg.length > 1 ? arg[1] : []))
    else
      Argument.new(arg.to_s)
    end
  end
  @valid_args.last
end

#valid_argument?(key) ⇒ Boolean

Returns:

  • (Boolean)


96
97
98
# File 'lib/kommand/scripts/script.rb', line 96

def valid_argument?(key)
  valid_arguments.map(&:keys).flatten.include?(key)
end

#valid_arguments(*args) ⇒ Object



42
43
44
45
46
47
48
# File 'lib/kommand/scripts/script.rb', line 42

def valid_arguments(*args)
  @valid_args ||= Arguments.new
  return @valid_args if args.empty?
  
  args.each { |arg| valid_argument(arg) }
  @valid_args
end

#validate_arguments(val = nil) ⇒ Object



17
18
19
# File 'lib/kommand/scripts/script.rb', line 17

def validate_arguments(val=nil)
  @validate_arguments = val
end

#validate_arguments?Boolean

Returns:

  • (Boolean)


21
22
23
24
# File 'lib/kommand/scripts/script.rb', line 21

def validate_arguments?
  @validate_arguments = true if @validate_arguments.nil?
  @validate_arguments
end