Module: Gapic::GrpcServiceConfig::Parser

Defined in:
lib/gapic/grpc_service_config/parser.rb

Overview

Takes a json of a GRPC service Config and parses it into the form usable by the microgenerator templates

Constant Summary collapse

METHOD_CONFIG_JSON_KEY =
"methodConfig"
RETRY_POLICY_JSON_KEY =
"retryPolicy"
NAMES_JSON_KEY =
"name"
SERVICE_NAME_JSON_KEY =
"service"
METHOD_NAME_JSON_KEY =
"method"
TIMEOUT_JSON_KEY =
"timeout"
INITIAL_DELAY_JSON_KEY =
"initialBackoff"
MAX_DELAY_JSON_KEY =
"maxBackoff"
MULTIPLIER_JSON_KEY =
"backoffMultiplier"
STATUS_CODES_JSON_KEY =
"retryableStatusCodes"

Class Method Summary collapse

Class Method Details

.get(hash, key) ⇒ Object

Look up a key including checking its underscore form

Parameters:

  • hash (Hash)

    hash structure

  • key (String)

    lowerCamelCase string

Returns:

  • (Object)

    the result, or nil if not found



196
197
198
# File 'lib/gapic/grpc_service_config/parser.rb', line 196

def self.get hash, key
  hash[key] || hash[ActiveSupport::Inflector.underscore(key)]
end

.key?(hash, key) ⇒ Boolean

Determines if the key or its underscore form exists

Parameters:

  • hash (Hash)

    hash structure

  • key (String)

    lowerCamelCase string

Returns:

  • (Boolean)


185
186
187
# File 'lib/gapic/grpc_service_config/parser.rb', line 185

def self.key? hash, key
  hash.key?(key) || hash.key?(ActiveSupport::Inflector.underscore(key))
end

.parse(service_config_json) ⇒ Gapic::GrpcServiceConfig::ServiceConfig

Parses ServiceConfig from a json of a GRPC service config

Parameters:

  • service_config_json (Hash)

    a hash that results from JSON.parse

Returns:



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/gapic/grpc_service_config/parser.rb', line 51

def self.parse service_config_json
  service_level_result = {}
  service_method_level_result = {}

  if !service_config_json.nil? && key?(service_config_json, METHOD_CONFIG_JSON_KEY)
    method_configs_json = get service_config_json, METHOD_CONFIG_JSON_KEY

    method_configs_json.each do |method_config_json|
      method_config = parse_config method_config_json
      service_names = parse_service_names get(method_config_json, NAMES_JSON_KEY)
      service_method_names = filter_service_method_names get(method_config_json, NAMES_JSON_KEY)

      service_names.each do |service_name|
        service_level_result[service_name] = method_config
      end

      service_method_names.each do |service_method_name|
        service_name = get service_method_name, SERVICE_NAME_JSON_KEY
        method_name = get service_method_name, METHOD_NAME_JSON_KEY

        service_method_level_result[service_name] ||= {}
        service_method_level_result[service_name][method_name] = method_config
      end
    end
  end

  ServiceConfig.new service_level_result, service_method_level_result
end