Module: Gapic::Schema::RequestParamParser

Defined in:
lib/gapic/schema/request_param_parser.rb

Overview

Contains logic for parsing protoc request parameters from the plugin_opt command line

Class Method Summary collapse

Class Method Details

.parse_parameters_string(str, param_schema: nil, error_output: nil) ⇒ Array<RequestParameter>

Parse a comma-delimited list of equals-delimited lists of strings, while mapping backslash-escaped commas and equal signs to literal characters.



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/gapic/schema/request_param_parser.rb', line 60

def parse_parameters_string str, param_schema: nil, error_output: nil
  return [] if str.empty?
  param_schema ||= Gapic::Generators::DefaultGeneratorParameters.default_schema

  param_val_input_strings = split_by_unescaped str, ","
  param_val_input_strings.map do |param_val_input_str|
    param_name_input_esc, value_str = split_by_unescaped param_val_input_str, "=", 1
    param_name_input = unescape param_name_input_esc
    param_type, param_config_name = param_schema.schema_name_type_for param_name_input

    param_value = parse_validate_param_value(
      param_type,
      param_name_input,
      param_config_name,
      value_str,
      error_output
    )

    unless param_value.nil?
      RequestParameter.new param_val_input_str, param_name_input_esc, value_str, param_config_name, param_value
    end
  end.compact # known bool parameters with invalid values will not be added so we have to compact
end

.reconstruct_parameters_string(parameters) ⇒ String

Take a list of parameters and re-create an input string that can be parsed into these parameters



88
89
90
# File 'lib/gapic/schema/request_param_parser.rb', line 88

def reconstruct_parameters_string parameters
  parameters.map(&:input_str).join ","
end

.split_by_unescaped(string, symbol, max_splits = -1) ⇒ Array<String>

Splits a string by an unescaped symbol e.g. 'a\.b.c.d\.e', '.' => ['a\.b', 'c', 'd\.e']



40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/gapic/schema/request_param_parser.rb', line 40

def split_by_unescaped string, symbol, max_splits = -1
  splits = 0
  escaped_symbol = Regexp.escape symbol
  string.scan(/\\.|#{escaped_symbol}|[^#{escaped_symbol}\\]+/).each_with_object([String.new]) do |tok, arr|
    if tok == symbol && (max_splits.negative? || splits < max_splits)
      arr.append String.new
      splits += 1
    else
      arr.last << tok
    end
    arr
  end
end

.unescape(string) ⇒ String

Unescapes a symbol from the string e.g. 'a\.b', '.' => 'a.b'



30
31
32
# File 'lib/gapic/schema/request_param_parser.rb', line 30

def unescape string
  string.gsub(/\\./) { |escaped| escaped[1] }
end