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
-
.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.
-
.reconstruct_parameters_string(parameters) ⇒ String
Take a list of parameters and re-create an input string that can be parsed into these parameters.
-
.split_by_unescaped(string, symbol, max_splits = -1) ⇒ Array<String>
Splits a string by an unescaped symbol e.g.
-
.unescape(string) ⇒ String
Unescapes a symbol from the string e.g.
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 |