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 83 |
# 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 if param_type == :bool && !["true", "false"].include?(unescape(value_str)) error_str = "WARNING: parameter #{param_name_input} (recognised as bool " \ "#{param_config_name}) will be discarded because of " \ "invalid value. Value should be either 'true' or 'false'." error_output&.puts error_str end param_value = parse_param_value param_type, value_str if param_value 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
89 90 91 |
# File 'lib/gapic/schema/request_param_parser.rb', line 89 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 |