Class: Rubycli::Arguments::ValueConverter

Inherits:
Object
  • Object
show all
Defined in:
lib/rubycli/arguments/value_converter.rb

Overview

Converts raw CLI tokens into Ruby primitives when safe to do so.

Constant Summary collapse

LITERAL_PARSE_FAILURE =
Object.new

Instance Method Summary collapse

Instance Method Details

#convert(value) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/rubycli/arguments/value_converter.rb', line 11

def convert(value)
  return value if Rubycli.eval_mode? || Rubycli.json_mode?
  return value unless value.is_a?(String)

  trimmed = value.strip
  return value if trimmed.empty?

  if symbol_literal?(trimmed)
    symbol_value = trimmed.delete_prefix(':')
    return symbol_value.to_sym unless symbol_value.empty?
  end

  if literal_like?(trimmed)
    literal = try_literal_parse(value)
    return literal unless literal.equal?(LITERAL_PARSE_FAILURE)
  end

  return nil if null_literal?(trimmed)

  lower = trimmed.downcase
  return true if lower == 'true'
  return false if lower == 'false'
  return value.to_i if integer_string?(trimmed)
  return value.to_f if float_string?(trimmed)

  value
end