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.

Parameters:

  • str (String)

    String to parse

  • param_schema (ParameterSchema) (defaults to: nil)

    Parameter schema to use

  • error_output (IO) (defaults to: nil)

    Stream to write outputs to.

Returns:



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

Parameters:

Returns:

  • (String)

    an input string with 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']

Parameters:

  • string (String)

    String to split

  • symbol (String)

    Symbol to split by

  • max_splits (Integer) (defaults to: -1)

    Maximum amount of splits to perform; -1 for no limit

Returns:

  • (Array<String>)

    List of split string parts



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'

Parameters:

  • string (String)

    String to unescape

Returns:

  • (String)

    Unescaped string



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

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