Module: Gapic::Model::Method

Defined in:
lib/gapic/model/method/lro.rb,
lib/gapic/model/method/routing.rb,
lib/gapic/model/method/http_annotation.rb

Overview

Method-level models

Defined Under Namespace

Classes: AipLro, HttpAnnotation, NoLro, NonStandardLro, Routing

Class Method Summary collapse

Class Method Details

.parse_lro(method, api) ⇒ Object

Inspects the method and returns it's long-running operation model

Parameters:



131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# File 'lib/gapic/model/method/lro.rb', line 131

def parse_lro method, api
  is_aip_lro = method.output.full_name == "google.longrunning.Operation"
  return AipLro.instance if is_aip_lro

  # If a method is annotated with operation_service, this is a nonstandard LRO consumer method
  is_nonstandard_lro = !method.operation_service.nil? && !method.operation_service.empty?
  if is_nonstandard_lro
    # LRO service name is given plain, so it has to be in the same package as this method's service
    service_full_name = (method.address[0..-3] << method.operation_service).join "."
    ops_service_lro = api.nonstandard_lro_model_for service_full_name
    unless ops_service_lro.nonstandard_lro?
      error_text = "A service #{service_full_name} specified as a nonstandard LRO service for " \
                   "the method #{method.full_name} was not found."
      raise ModelError, error_text
    end

    unless method.output.full_name == ops_service_lro.lro_object_full_name
      error_text = "A service #{service_full_name} specified as a nonstandard LRO service for " \
                   "the method #{method.full_name} has a different LRO object " \
                   "(#{ops_service_lro.lro_object_full_name}) from the method's return type " \
                   "(#{method.output.full_name})."
      raise ModelError, error_text
    end

    return NonStandardLro.new method, service_full_name
  end

  NoLro.instance
end