gapic-generator 0.1.5 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/CHANGELOG.md +55 -0
 - data/lib/gapic/formatting_utils.rb +63 -12
 - data/lib/gapic/generator/version.rb +1 -1
 - data/lib/gapic/generators/base_generator.rb +0 -8
 - data/lib/gapic/generators/default_generator.rb +13 -14
 - data/lib/gapic/helpers/filepath_helper.rb +45 -0
 - data/lib/gapic/helpers/namespace_helper.rb +51 -0
 - data/lib/gapic/presenters.rb +44 -0
 - data/{templates/default/helpers → lib/gapic}/presenters/enum_presenter.rb +19 -14
 - data/{templates/default/helpers → lib/gapic}/presenters/enum_value_presenter.rb +19 -12
 - data/lib/gapic/presenters/field_presenter.rb +154 -0
 - data/lib/gapic/presenters/file_presenter.rb +59 -0
 - data/lib/gapic/presenters/gem_presenter.rb +176 -0
 - data/lib/gapic/presenters/message_presenter.rb +73 -0
 - data/lib/gapic/presenters/method_presenter.rb +307 -0
 - data/lib/gapic/presenters/package_presenter.rb +80 -0
 - data/lib/gapic/presenters/resource_presenter.rb +99 -0
 - data/lib/gapic/presenters/sample_presenter.rb +84 -0
 - data/lib/gapic/presenters/service_presenter.rb +306 -0
 - data/lib/gapic/resource_lookup.rb +23 -38
 - data/lib/gapic/schema/api.rb +70 -0
 - data/lib/gapic/schema/loader.rb +9 -2
 - data/lib/gapic/schema/wrappers.rb +134 -24
 - data/templates/default/gem/entrypoint.erb +8 -0
 - data/templates/default/gem/gemspec.erb +2 -2
 - data/templates/default/gem/readme.erb +17 -3
 - data/templates/default/gem/rubocop.erb +13 -41
 - data/templates/default/helpers/filepath_helper.rb +2 -21
 - data/templates/default/helpers/namespace_helper.rb +2 -27
 - data/templates/default/layouts/_ruby.erb +1 -3
 - data/templates/default/lib/_package.erb +17 -0
 - data/templates/default/lib/_service.erb +32 -0
 - data/templates/default/package.erb +5 -5
 - data/templates/default/service.erb +5 -7
 - data/templates/default/service/_helpers.erb +3 -0
 - data/templates/default/service/client/_client.erb +7 -17
 - data/templates/default/service/client/_operations.erb +0 -4
 - data/templates/default/service/client/_paths.erb +1 -0
 - data/templates/default/service/client/method/def/_options_defaults.erb +1 -1
 - data/templates/default/service/client/method/def/_response_normal.erb +1 -1
 - data/templates/default/service/client/method/docs/_request_normal.erb +10 -5
 - data/templates/default/service/client/method/docs/_request_streaming.erb +1 -1
 - metadata +20 -15
 - data/templates/default/helpers/presenter_helper.rb +0 -24
 - data/templates/default/helpers/presenters/field_presenter.rb +0 -146
 - data/templates/default/helpers/presenters/file_presenter.rb +0 -53
 - data/templates/default/helpers/presenters/gem_presenter.rb +0 -140
 - data/templates/default/helpers/presenters/message_presenter.rb +0 -66
 - data/templates/default/helpers/presenters/method_presenter.rb +0 -293
 - data/templates/default/helpers/presenters/package_presenter.rb +0 -65
 - data/templates/default/helpers/presenters/resource_presenter.rb +0 -92
 - data/templates/default/helpers/presenters/sample_presenter.rb +0 -74
 - data/templates/default/helpers/presenters/service_presenter.rb +0 -276
 - data/templates/default/service/client/_helpers.erb +0 -9
 
| 
         @@ -1,53 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            # Copyright 2018 Google LLC
         
     | 
| 
       4 
     | 
    
         
            -
            #
         
     | 
| 
       5 
     | 
    
         
            -
            # Licensed under the Apache License, Version 2.0 (the "License");
         
     | 
| 
       6 
     | 
    
         
            -
            # you may not use this file except in compliance with the License.
         
     | 
| 
       7 
     | 
    
         
            -
            # You may obtain a copy of the License at
         
     | 
| 
       8 
     | 
    
         
            -
            #
         
     | 
| 
       9 
     | 
    
         
            -
            #     https://www.apache.org/licenses/LICENSE-2.0
         
     | 
| 
       10 
     | 
    
         
            -
            #
         
     | 
| 
       11 
     | 
    
         
            -
            # Unless required by applicable law or agreed to in writing, software
         
     | 
| 
       12 
     | 
    
         
            -
            # distributed under the License is distributed on an "AS IS" BASIS,
         
     | 
| 
       13 
     | 
    
         
            -
            # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         
     | 
| 
       14 
     | 
    
         
            -
            # See the License for the specific language governing permissions and
         
     | 
| 
       15 
     | 
    
         
            -
            # limitations under the License.
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
            require_relative "enum_presenter"
         
     | 
| 
       18 
     | 
    
         
            -
            require_relative "message_presenter"
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
            class FilePresenter
         
     | 
| 
       21 
     | 
    
         
            -
              include NamespaceHelper
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
              # @param file [Gapic::Schema::File] the file to present
         
     | 
| 
       24 
     | 
    
         
            -
              def initialize api, file
         
     | 
| 
       25 
     | 
    
         
            -
                @api = api
         
     | 
| 
       26 
     | 
    
         
            -
                @file = file
         
     | 
| 
       27 
     | 
    
         
            -
              end
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
              def name
         
     | 
| 
       30 
     | 
    
         
            -
                @file.name
         
     | 
| 
       31 
     | 
    
         
            -
              end
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
              def address
         
     | 
| 
       34 
     | 
    
         
            -
                @file.address
         
     | 
| 
       35 
     | 
    
         
            -
              end
         
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
              def namespace
         
     | 
| 
       38 
     | 
    
         
            -
                return @file.ruby_package if @file.ruby_package.present?
         
     | 
| 
       39 
     | 
    
         
            -
                ruby_namespace_for_address address
         
     | 
| 
       40 
     | 
    
         
            -
              end
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
              def messages
         
     | 
| 
       43 
     | 
    
         
            -
                @messages ||= @file.messages.map { |m| MessagePresenter.new @api, m }
         
     | 
| 
       44 
     | 
    
         
            -
              end
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
              def enums
         
     | 
| 
       47 
     | 
    
         
            -
                @enums ||= @file.enums.map { |e| EnumPresenter.new e }
         
     | 
| 
       48 
     | 
    
         
            -
              end
         
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
              def docs_file_path
         
     | 
| 
       51 
     | 
    
         
            -
                @file.name.gsub ".proto", ".rb"
         
     | 
| 
       52 
     | 
    
         
            -
              end
         
     | 
| 
       53 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,140 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            # Copyright 2019 Google LLC
         
     | 
| 
       4 
     | 
    
         
            -
            #
         
     | 
| 
       5 
     | 
    
         
            -
            # Licensed under the Apache License, Version 2.0 (the "License");
         
     | 
| 
       6 
     | 
    
         
            -
            # you may not use this file except in compliance with the License.
         
     | 
| 
       7 
     | 
    
         
            -
            # You may obtain a copy of the License at
         
     | 
| 
       8 
     | 
    
         
            -
            #
         
     | 
| 
       9 
     | 
    
         
            -
            #     https://www.apache.org/licenses/LICENSE-2.0
         
     | 
| 
       10 
     | 
    
         
            -
            #
         
     | 
| 
       11 
     | 
    
         
            -
            # Unless required by applicable law or agreed to in writing, software
         
     | 
| 
       12 
     | 
    
         
            -
            # distributed under the License is distributed on an "AS IS" BASIS,
         
     | 
| 
       13 
     | 
    
         
            -
            # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         
     | 
| 
       14 
     | 
    
         
            -
            # See the License for the specific language governing permissions and
         
     | 
| 
       15 
     | 
    
         
            -
            # limitations under the License.
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
            require_relative "file_presenter"
         
     | 
| 
       18 
     | 
    
         
            -
            require_relative "package_presenter"
         
     | 
| 
       19 
     | 
    
         
            -
            require_relative "service_presenter"
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
            class GemPresenter
         
     | 
| 
       22 
     | 
    
         
            -
              include FilepathHelper
         
     | 
| 
       23 
     | 
    
         
            -
              include NamespaceHelper
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
              def initialize api
         
     | 
| 
       26 
     | 
    
         
            -
                @api = api
         
     | 
| 
       27 
     | 
    
         
            -
              end
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
              def packages
         
     | 
| 
       30 
     | 
    
         
            -
                @packages ||= begin
         
     | 
| 
       31 
     | 
    
         
            -
                  packages = @api.generate_files.map(&:package).uniq.sort
         
     | 
| 
       32 
     | 
    
         
            -
                  packages.map { |p| PackagePresenter.new @api, p }.delete_if(&:empty?)
         
     | 
| 
       33 
     | 
    
         
            -
                end
         
     | 
| 
       34 
     | 
    
         
            -
              end
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
              def services
         
     | 
| 
       37 
     | 
    
         
            -
                @services ||= begin
         
     | 
| 
       38 
     | 
    
         
            -
                  files = @api.generate_files
         
     | 
| 
       39 
     | 
    
         
            -
                  files.map(&:services).flatten.map { |s| ServicePresenter.new @api, s }
         
     | 
| 
       40 
     | 
    
         
            -
                end
         
     | 
| 
       41 
     | 
    
         
            -
              end
         
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
              def proto_files
         
     | 
| 
       44 
     | 
    
         
            -
                @proto_files ||= begin
         
     | 
| 
       45 
     | 
    
         
            -
                  files = @api.files
         
     | 
| 
       46 
     | 
    
         
            -
                  files = files.reject { |f| blacklist_protos.include? f.name }
         
     | 
| 
       47 
     | 
    
         
            -
                  files = files.reject { |f| f.messages.empty? && f.enums.empty? }
         
     | 
| 
       48 
     | 
    
         
            -
                  files.map { |f| FilePresenter.new @api, f }
         
     | 
| 
       49 
     | 
    
         
            -
                end
         
     | 
| 
       50 
     | 
    
         
            -
              end
         
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
       52 
     | 
    
         
            -
              def address
         
     | 
| 
       53 
     | 
    
         
            -
                name.split("-").map(&:camelize)
         
     | 
| 
       54 
     | 
    
         
            -
              end
         
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
              def name
         
     | 
| 
       57 
     | 
    
         
            -
                gem_config :name
         
     | 
| 
       58 
     | 
    
         
            -
              end
         
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
       60 
     | 
    
         
            -
              def namespace
         
     | 
| 
       61 
     | 
    
         
            -
                gem_config(:namespace) ||
         
     | 
| 
       62 
     | 
    
         
            -
                  fix_namespace(@api, name.split("-").map(&:camelize).join("::"))
         
     | 
| 
       63 
     | 
    
         
            -
              end
         
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
     | 
    
         
            -
              def title
         
     | 
| 
       66 
     | 
    
         
            -
                gem_config(:title) ||
         
     | 
| 
       67 
     | 
    
         
            -
                  namespace.split("::").join(" ")
         
     | 
| 
       68 
     | 
    
         
            -
              end
         
     | 
| 
       69 
     | 
    
         
            -
             
     | 
| 
       70 
     | 
    
         
            -
              def version
         
     | 
| 
       71 
     | 
    
         
            -
                gem_config(:version) ||
         
     | 
| 
       72 
     | 
    
         
            -
                  "0.0.1"
         
     | 
| 
       73 
     | 
    
         
            -
              end
         
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
     | 
    
         
            -
              def version_require
         
     | 
| 
       76 
     | 
    
         
            -
                ruby_file_path @api, version_name_full
         
     | 
| 
       77 
     | 
    
         
            -
              end
         
     | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
       79 
     | 
    
         
            -
              def version_file_path
         
     | 
| 
       80 
     | 
    
         
            -
                "#{version_require}.rb"
         
     | 
| 
       81 
     | 
    
         
            -
              end
         
     | 
| 
       82 
     | 
    
         
            -
             
     | 
| 
       83 
     | 
    
         
            -
              def version_name_full
         
     | 
| 
       84 
     | 
    
         
            -
                "#{namespace}::VERSION"
         
     | 
| 
       85 
     | 
    
         
            -
              end
         
     | 
| 
       86 
     | 
    
         
            -
             
     | 
| 
       87 
     | 
    
         
            -
              def authors
         
     | 
| 
       88 
     | 
    
         
            -
                gem_config(:authors) ||
         
     | 
| 
       89 
     | 
    
         
            -
                  ["Google LLC"]
         
     | 
| 
       90 
     | 
    
         
            -
              end
         
     | 
| 
       91 
     | 
    
         
            -
             
     | 
| 
       92 
     | 
    
         
            -
              def email
         
     | 
| 
       93 
     | 
    
         
            -
                gem_config(:email) ||
         
     | 
| 
       94 
     | 
    
         
            -
                  "googleapis-packages@google.com"
         
     | 
| 
       95 
     | 
    
         
            -
              end
         
     | 
| 
       96 
     | 
    
         
            -
             
     | 
| 
       97 
     | 
    
         
            -
              def description
         
     | 
| 
       98 
     | 
    
         
            -
                gem_config(:description) ||
         
     | 
| 
       99 
     | 
    
         
            -
                  "#{name} is the official library for #{title} API."
         
     | 
| 
       100 
     | 
    
         
            -
              end
         
     | 
| 
       101 
     | 
    
         
            -
             
     | 
| 
       102 
     | 
    
         
            -
              def summary
         
     | 
| 
       103 
     | 
    
         
            -
                gem_config(:summary) ||
         
     | 
| 
       104 
     | 
    
         
            -
                  "API Client library for #{title} API"
         
     | 
| 
       105 
     | 
    
         
            -
              end
         
     | 
| 
       106 
     | 
    
         
            -
             
     | 
| 
       107 
     | 
    
         
            -
              def homepage
         
     | 
| 
       108 
     | 
    
         
            -
                gem_config(:homepage) ||
         
     | 
| 
       109 
     | 
    
         
            -
                  "https://github.com/googleapis/googleapis"
         
     | 
| 
       110 
     | 
    
         
            -
              end
         
     | 
| 
       111 
     | 
    
         
            -
             
     | 
| 
       112 
     | 
    
         
            -
              def env_prefix
         
     | 
| 
       113 
     | 
    
         
            -
                (gem_config(:env_prefix) || name.split("-").last).upcase
         
     | 
| 
       114 
     | 
    
         
            -
              end
         
     | 
| 
       115 
     | 
    
         
            -
             
     | 
| 
       116 
     | 
    
         
            -
              def iam_dependency?
         
     | 
| 
       117 
     | 
    
         
            -
                @api.files.map(&:name).include? "google/iam/v1/iam_policy.proto"
         
     | 
| 
       118 
     | 
    
         
            -
              end
         
     | 
| 
       119 
     | 
    
         
            -
             
     | 
| 
       120 
     | 
    
         
            -
              private
         
     | 
| 
       121 
     | 
    
         
            -
             
     | 
| 
       122 
     | 
    
         
            -
              def gem_config key
         
     | 
| 
       123 
     | 
    
         
            -
                return unless @api.configuration[:gem]
         
     | 
| 
       124 
     | 
    
         
            -
             
     | 
| 
       125 
     | 
    
         
            -
                @api.configuration[:gem][key]
         
     | 
| 
       126 
     | 
    
         
            -
              end
         
     | 
| 
       127 
     | 
    
         
            -
             
     | 
| 
       128 
     | 
    
         
            -
              def blacklist_protos
         
     | 
| 
       129 
     | 
    
         
            -
                blacklist = gem_config :blacklist
         
     | 
| 
       130 
     | 
    
         
            -
             
     | 
| 
       131 
     | 
    
         
            -
                return default_blacklist_protos if blacklist.nil?
         
     | 
| 
       132 
     | 
    
         
            -
                return default_blacklist_protos if blacklist[:protos].nil?
         
     | 
| 
       133 
     | 
    
         
            -
             
     | 
| 
       134 
     | 
    
         
            -
                default_blacklist_protos[:protos]
         
     | 
| 
       135 
     | 
    
         
            -
              end
         
     | 
| 
       136 
     | 
    
         
            -
             
     | 
| 
       137 
     | 
    
         
            -
              def default_blacklist_protos
         
     | 
| 
       138 
     | 
    
         
            -
                ["google/api/http.proto", "google/protobuf/descriptor.proto"]
         
     | 
| 
       139 
     | 
    
         
            -
              end
         
     | 
| 
       140 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,66 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            # Copyright 2018 Google LLC
         
     | 
| 
       4 
     | 
    
         
            -
            #
         
     | 
| 
       5 
     | 
    
         
            -
            # Licensed under the Apache License, Version 2.0 (the "License");
         
     | 
| 
       6 
     | 
    
         
            -
            # you may not use this file except in compliance with the License.
         
     | 
| 
       7 
     | 
    
         
            -
            # You may obtain a copy of the License at
         
     | 
| 
       8 
     | 
    
         
            -
            #
         
     | 
| 
       9 
     | 
    
         
            -
            #     https://www.apache.org/licenses/LICENSE-2.0
         
     | 
| 
       10 
     | 
    
         
            -
            #
         
     | 
| 
       11 
     | 
    
         
            -
            # Unless required by applicable law or agreed to in writing, software
         
     | 
| 
       12 
     | 
    
         
            -
            # distributed under the License is distributed on an "AS IS" BASIS,
         
     | 
| 
       13 
     | 
    
         
            -
            # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         
     | 
| 
       14 
     | 
    
         
            -
            # See the License for the specific language governing permissions and
         
     | 
| 
       15 
     | 
    
         
            -
            # limitations under the License.
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
            require "active_support/inflector"
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
            require_relative "field_presenter"
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
            class MessagePresenter
         
     | 
| 
       22 
     | 
    
         
            -
              include NamespaceHelper
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
              def initialize api, message
         
     | 
| 
       25 
     | 
    
         
            -
                @api = api
         
     | 
| 
       26 
     | 
    
         
            -
                @message = message
         
     | 
| 
       27 
     | 
    
         
            -
              end
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
              def name
         
     | 
| 
       30 
     | 
    
         
            -
                @message.name
         
     | 
| 
       31 
     | 
    
         
            -
              end
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
              def doc_types
         
     | 
| 
       34 
     | 
    
         
            -
                type_name_full
         
     | 
| 
       35 
     | 
    
         
            -
              end
         
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
              def doc_description
         
     | 
| 
       38 
     | 
    
         
            -
                @message.docs_leading_comments
         
     | 
| 
       39 
     | 
    
         
            -
              end
         
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
              def default_value
         
     | 
| 
       42 
     | 
    
         
            -
                "{}"
         
     | 
| 
       43 
     | 
    
         
            -
              end
         
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
              def type_name_full
         
     | 
| 
       46 
     | 
    
         
            -
                message_ruby_type @message
         
     | 
| 
       47 
     | 
    
         
            -
              end
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
              def fields
         
     | 
| 
       50 
     | 
    
         
            -
                @fields = @message.fields.map { |f| FieldPresenter.new @api, @message, f }
         
     | 
| 
       51 
     | 
    
         
            -
              end
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
              def nested_enums
         
     | 
| 
       54 
     | 
    
         
            -
                @nested_enums ||= @message.nested_enums.map { |e| EnumPresenter.new e }
         
     | 
| 
       55 
     | 
    
         
            -
              end
         
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
              def nested_messages
         
     | 
| 
       58 
     | 
    
         
            -
                @nested_messages ||= @message.nested_messages.map { |m| MessagePresenter.new @api, m }
         
     | 
| 
       59 
     | 
    
         
            -
              end
         
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
     | 
    
         
            -
              protected
         
     | 
| 
       62 
     | 
    
         
            -
             
     | 
| 
       63 
     | 
    
         
            -
              def message_ruby_type message
         
     | 
| 
       64 
     | 
    
         
            -
                ruby_namespace @api, message.address.join(".")
         
     | 
| 
       65 
     | 
    
         
            -
              end
         
     | 
| 
       66 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,293 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            # Copyright 2018 Google LLC
         
     | 
| 
       4 
     | 
    
         
            -
            #
         
     | 
| 
       5 
     | 
    
         
            -
            # Licensed under the Apache License, Version 2.0 (the "License");
         
     | 
| 
       6 
     | 
    
         
            -
            # you may not use this file except in compliance with the License.
         
     | 
| 
       7 
     | 
    
         
            -
            # You may obtain a copy of the License at
         
     | 
| 
       8 
     | 
    
         
            -
            #
         
     | 
| 
       9 
     | 
    
         
            -
            #     https://www.apache.org/licenses/LICENSE-2.0
         
     | 
| 
       10 
     | 
    
         
            -
            #
         
     | 
| 
       11 
     | 
    
         
            -
            # Unless required by applicable law or agreed to in writing, software
         
     | 
| 
       12 
     | 
    
         
            -
            # distributed under the License is distributed on an "AS IS" BASIS,
         
     | 
| 
       13 
     | 
    
         
            -
            # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         
     | 
| 
       14 
     | 
    
         
            -
            # See the License for the specific language governing permissions and
         
     | 
| 
       15 
     | 
    
         
            -
            # limitations under the License.
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
            require "active_support/inflector"
         
     | 
| 
       18 
     | 
    
         
            -
            require "gapic/path_template"
         
     | 
| 
       19 
     | 
    
         
            -
            require_relative "service_presenter"
         
     | 
| 
       20 
     | 
    
         
            -
            require_relative "field_presenter"
         
     | 
| 
       21 
     | 
    
         
            -
            require_relative "sample_presenter"
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
            class MethodPresenter
         
     | 
| 
       24 
     | 
    
         
            -
              include NamespaceHelper
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
              def initialize api, method
         
     | 
| 
       27 
     | 
    
         
            -
                @api = api
         
     | 
| 
       28 
     | 
    
         
            -
                @method = method
         
     | 
| 
       29 
     | 
    
         
            -
              end
         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
              def service
         
     | 
| 
       32 
     | 
    
         
            -
                ServicePresenter.new @api, @method.parent
         
     | 
| 
       33 
     | 
    
         
            -
              end
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
              def name
         
     | 
| 
       36 
     | 
    
         
            -
                ActiveSupport::Inflector.underscore @method.name
         
     | 
| 
       37 
     | 
    
         
            -
              end
         
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
              def kind
         
     | 
| 
       40 
     | 
    
         
            -
                if client_streaming?
         
     | 
| 
       41 
     | 
    
         
            -
                  if server_streaming?
         
     | 
| 
       42 
     | 
    
         
            -
                    :bidi
         
     | 
| 
       43 
     | 
    
         
            -
                  else
         
     | 
| 
       44 
     | 
    
         
            -
                    :client
         
     | 
| 
       45 
     | 
    
         
            -
                  end
         
     | 
| 
       46 
     | 
    
         
            -
                elsif server_streaming?
         
     | 
| 
       47 
     | 
    
         
            -
                  :server
         
     | 
| 
       48 
     | 
    
         
            -
                else
         
     | 
| 
       49 
     | 
    
         
            -
                  :normal
         
     | 
| 
       50 
     | 
    
         
            -
                end
         
     | 
| 
       51 
     | 
    
         
            -
              end
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
              def doc_description
         
     | 
| 
       54 
     | 
    
         
            -
                @method.docs_leading_comments
         
     | 
| 
       55 
     | 
    
         
            -
              end
         
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
              def doc_response_type
         
     | 
| 
       58 
     | 
    
         
            -
                ret = return_type
         
     | 
| 
       59 
     | 
    
         
            -
                ret = "Gapic::Operation" if lro?
         
     | 
| 
       60 
     | 
    
         
            -
                if server_streaming?
         
     | 
| 
       61 
     | 
    
         
            -
                  ret = "Enumerable<#{ret}>"
         
     | 
| 
       62 
     | 
    
         
            -
                elsif paged?
         
     | 
| 
       63 
     | 
    
         
            -
                  paged_type = paged_response_type
         
     | 
| 
       64 
     | 
    
         
            -
                  paged_type = "Gapic::Operation" if paged_type == "Google::Longrunning::Operation"
         
     | 
| 
       65 
     | 
    
         
            -
                  ret = "Gapic::PagedEnumerable<#{paged_type}>"
         
     | 
| 
       66 
     | 
    
         
            -
                end
         
     | 
| 
       67 
     | 
    
         
            -
                ret
         
     | 
| 
       68 
     | 
    
         
            -
              end
         
     | 
| 
       69 
     | 
    
         
            -
             
     | 
| 
       70 
     | 
    
         
            -
              def arguments
         
     | 
| 
       71 
     | 
    
         
            -
                arguments = @method.input.fields.reject(&:output_only?)
         
     | 
| 
       72 
     | 
    
         
            -
                arguments.map { |arg| FieldPresenter.new @api, @method.input, arg }
         
     | 
| 
       73 
     | 
    
         
            -
              end
         
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
     | 
    
         
            -
              def fields
         
     | 
| 
       76 
     | 
    
         
            -
                @method.input.fields.map { |field| FieldPresenter.new @api, @method.input, field }
         
     | 
| 
       77 
     | 
    
         
            -
              end
         
     | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
       79 
     | 
    
         
            -
              def fields_with_first_oneof
         
     | 
| 
       80 
     | 
    
         
            -
                return fields if @method.input.oneof_decl.empty?
         
     | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
       82 
     | 
    
         
            -
                selected_fields = []
         
     | 
| 
       83 
     | 
    
         
            -
                have_oneof = []
         
     | 
| 
       84 
     | 
    
         
            -
             
     | 
| 
       85 
     | 
    
         
            -
                @method.input.fields.each do |field|
         
     | 
| 
       86 
     | 
    
         
            -
                  idx = field.oneof_index
         
     | 
| 
       87 
     | 
    
         
            -
                  selected_fields << field unless have_oneof.include? idx
         
     | 
| 
       88 
     | 
    
         
            -
                  have_oneof << idx
         
     | 
| 
       89 
     | 
    
         
            -
                end
         
     | 
| 
       90 
     | 
    
         
            -
             
     | 
| 
       91 
     | 
    
         
            -
                selected_fields.map { |field| FieldPresenter.new @api, @method.input, field }
         
     | 
| 
       92 
     | 
    
         
            -
              end
         
     | 
| 
       93 
     | 
    
         
            -
             
     | 
| 
       94 
     | 
    
         
            -
              def request_type
         
     | 
| 
       95 
     | 
    
         
            -
                message_ruby_type @method.input
         
     | 
| 
       96 
     | 
    
         
            -
              end
         
     | 
| 
       97 
     | 
    
         
            -
             
     | 
| 
       98 
     | 
    
         
            -
              def return_type
         
     | 
| 
       99 
     | 
    
         
            -
                message_ruby_type @method.output
         
     | 
| 
       100 
     | 
    
         
            -
              end
         
     | 
| 
       101 
     | 
    
         
            -
             
     | 
| 
       102 
     | 
    
         
            -
              def yields?
         
     | 
| 
       103 
     | 
    
         
            -
                # Server streaming RCP calls are the only one that does not yield
         
     | 
| 
       104 
     | 
    
         
            -
                !server_streaming?
         
     | 
| 
       105 
     | 
    
         
            -
              end
         
     | 
| 
       106 
     | 
    
         
            -
             
     | 
| 
       107 
     | 
    
         
            -
              def yield_doc_description
         
     | 
| 
       108 
     | 
    
         
            -
                return "Register a callback to be run when an operation is done." if lro?
         
     | 
| 
       109 
     | 
    
         
            -
             
     | 
| 
       110 
     | 
    
         
            -
                "Access the result along with the RPC operation"
         
     | 
| 
       111 
     | 
    
         
            -
              end
         
     | 
| 
       112 
     | 
    
         
            -
             
     | 
| 
       113 
     | 
    
         
            -
              def yield_params
         
     | 
| 
       114 
     | 
    
         
            -
                if lro?
         
     | 
| 
       115 
     | 
    
         
            -
                  return [
         
     | 
| 
       116 
     | 
    
         
            -
                    OpenStruct.new(
         
     | 
| 
       117 
     | 
    
         
            -
                      name:      "operation",
         
     | 
| 
       118 
     | 
    
         
            -
                      doc_types: "Gapic::Operation"
         
     | 
| 
       119 
     | 
    
         
            -
                    )
         
     | 
| 
       120 
     | 
    
         
            -
                  ]
         
     | 
| 
       121 
     | 
    
         
            -
                end
         
     | 
| 
       122 
     | 
    
         
            -
                [
         
     | 
| 
       123 
     | 
    
         
            -
                  OpenStruct.new(
         
     | 
| 
       124 
     | 
    
         
            -
                    name:      "result",
         
     | 
| 
       125 
     | 
    
         
            -
                    doc_types: return_type
         
     | 
| 
       126 
     | 
    
         
            -
                  ),
         
     | 
| 
       127 
     | 
    
         
            -
                  OpenStruct.new(
         
     | 
| 
       128 
     | 
    
         
            -
                    name:      "operation",
         
     | 
| 
       129 
     | 
    
         
            -
                    doc_types: "GRPC::ActiveCall::Operation"
         
     | 
| 
       130 
     | 
    
         
            -
                  )
         
     | 
| 
       131 
     | 
    
         
            -
                ]
         
     | 
| 
       132 
     | 
    
         
            -
              end
         
     | 
| 
       133 
     | 
    
         
            -
             
     | 
| 
       134 
     | 
    
         
            -
              # @api.incode samples and sample_configs are yaml configuration files such as
         
     | 
| 
       135 
     | 
    
         
            -
              # speech_transcribe_sync_gcs.yaml
         
     | 
| 
       136 
     | 
    
         
            -
              def samples
         
     | 
| 
       137 
     | 
    
         
            -
                sample_configs = @api.incode_samples.select do |sample_config|
         
     | 
| 
       138 
     | 
    
         
            -
                  sample_config["service"] == @method.address[0...-1].join(".") &&
         
     | 
| 
       139 
     | 
    
         
            -
                    sample_config["rpc"] == @method.name
         
     | 
| 
       140 
     | 
    
         
            -
                end
         
     | 
| 
       141 
     | 
    
         
            -
                sample_configs.map { |sample_config| SamplePresenter.new @api, sample_config }
         
     | 
| 
       142 
     | 
    
         
            -
              end
         
     | 
| 
       143 
     | 
    
         
            -
             
     | 
| 
       144 
     | 
    
         
            -
              def lro?
         
     | 
| 
       145 
     | 
    
         
            -
                return paged_response_type == "Google::Longrunning::Operation" if paged?
         
     | 
| 
       146 
     | 
    
         
            -
             
     | 
| 
       147 
     | 
    
         
            -
                message_ruby_type(@method.output) == "Google::Longrunning::Operation"
         
     | 
| 
       148 
     | 
    
         
            -
              end
         
     | 
| 
       149 
     | 
    
         
            -
             
     | 
| 
       150 
     | 
    
         
            -
              def client_streaming?
         
     | 
| 
       151 
     | 
    
         
            -
                @method.client_streaming
         
     | 
| 
       152 
     | 
    
         
            -
              end
         
     | 
| 
       153 
     | 
    
         
            -
             
     | 
| 
       154 
     | 
    
         
            -
              def server_streaming?
         
     | 
| 
       155 
     | 
    
         
            -
                @method.server_streaming
         
     | 
| 
       156 
     | 
    
         
            -
              end
         
     | 
| 
       157 
     | 
    
         
            -
             
     | 
| 
       158 
     | 
    
         
            -
              def paged?
         
     | 
| 
       159 
     | 
    
         
            -
                return false if server_streaming? # Cannot page a streaming response
         
     | 
| 
       160 
     | 
    
         
            -
                paged_request?(@method.input) && paged_response?(@method.output)
         
     | 
| 
       161 
     | 
    
         
            -
              end
         
     | 
| 
       162 
     | 
    
         
            -
             
     | 
| 
       163 
     | 
    
         
            -
              def paged_response_type
         
     | 
| 
       164 
     | 
    
         
            -
                return nil unless paged_response? @method.output
         
     | 
| 
       165 
     | 
    
         
            -
             
     | 
| 
       166 
     | 
    
         
            -
                repeated_field = @method.output.fields.find do |f|
         
     | 
| 
       167 
     | 
    
         
            -
                  f.label == Google::Protobuf::FieldDescriptorProto::Label::LABEL_REPEATED &&
         
     | 
| 
       168 
     | 
    
         
            -
                    f.type == Google::Protobuf::FieldDescriptorProto::Type::TYPE_MESSAGE
         
     | 
| 
       169 
     | 
    
         
            -
                end
         
     | 
| 
       170 
     | 
    
         
            -
                message_ruby_type repeated_field.message
         
     | 
| 
       171 
     | 
    
         
            -
              end
         
     | 
| 
       172 
     | 
    
         
            -
             
     | 
| 
       173 
     | 
    
         
            -
              ##
         
     | 
| 
       174 
     | 
    
         
            -
              #
         
     | 
| 
       175 
     | 
    
         
            -
              # @return [Array<String>] The segment key names.
         
     | 
| 
       176 
     | 
    
         
            -
              #
         
     | 
| 
       177 
     | 
    
         
            -
              def routing_params
         
     | 
| 
       178 
     | 
    
         
            -
                segments = Gapic::PathTemplate.parse method_path
         
     | 
| 
       179 
     | 
    
         
            -
                segments.select { |s| s.is_a? Gapic::PathTemplate::Segment }.map(&:name)
         
     | 
| 
       180 
     | 
    
         
            -
              end
         
     | 
| 
       181 
     | 
    
         
            -
             
     | 
| 
       182 
     | 
    
         
            -
              def routing_params?
         
     | 
| 
       183 
     | 
    
         
            -
                routing_params.any?
         
     | 
| 
       184 
     | 
    
         
            -
              end
         
     | 
| 
       185 
     | 
    
         
            -
             
     | 
| 
       186 
     | 
    
         
            -
              def grpc_service_config
         
     | 
| 
       187 
     | 
    
         
            -
                if @api.grpc_service_config&.service_method_level_configs&.key?(service.grpc_full_name) &&
         
     | 
| 
       188 
     | 
    
         
            -
                   @api.grpc_service_config.service_method_level_configs[service.grpc_full_name]&.key?(grpc_method_name)
         
     | 
| 
       189 
     | 
    
         
            -
                  @api.grpc_service_config.service_method_level_configs[service.grpc_full_name][grpc_method_name]
         
     | 
| 
       190 
     | 
    
         
            -
                end
         
     | 
| 
       191 
     | 
    
         
            -
              end
         
     | 
| 
       192 
     | 
    
         
            -
             
     | 
| 
       193 
     | 
    
         
            -
              def grpc_method_name
         
     | 
| 
       194 
     | 
    
         
            -
                @method.name
         
     | 
| 
       195 
     | 
    
         
            -
              end
         
     | 
| 
       196 
     | 
    
         
            -
             
     | 
| 
       197 
     | 
    
         
            -
              protected
         
     | 
| 
       198 
     | 
    
         
            -
             
     | 
| 
       199 
     | 
    
         
            -
              def message_ruby_type message
         
     | 
| 
       200 
     | 
    
         
            -
                ruby_namespace @api, message.address.join(".")
         
     | 
| 
       201 
     | 
    
         
            -
              end
         
     | 
| 
       202 
     | 
    
         
            -
             
     | 
| 
       203 
     | 
    
         
            -
              def doc_types_for arg
         
     | 
| 
       204 
     | 
    
         
            -
                if arg.message?
         
     | 
| 
       205 
     | 
    
         
            -
                  "#{message_ruby_type arg.message} | Hash"
         
     | 
| 
       206 
     | 
    
         
            -
                elsif arg.enum?
         
     | 
| 
       207 
     | 
    
         
            -
                  # TODO: handle when arg message is nil and enum is the type
         
     | 
| 
       208 
     | 
    
         
            -
                  message_ruby_type arg.enum
         
     | 
| 
       209 
     | 
    
         
            -
                else
         
     | 
| 
       210 
     | 
    
         
            -
                  case arg.type
         
     | 
| 
       211 
     | 
    
         
            -
                  when 1, 2                              then "Float"
         
     | 
| 
       212 
     | 
    
         
            -
                  when 3, 4, 5, 6, 7, 13, 15, 16, 17, 18 then "Integer"
         
     | 
| 
       213 
     | 
    
         
            -
                  when 9, 12                             then "String"
         
     | 
| 
       214 
     | 
    
         
            -
                  when 8                                 then "Boolean"
         
     | 
| 
       215 
     | 
    
         
            -
                  else
         
     | 
| 
       216 
     | 
    
         
            -
                    "Object"
         
     | 
| 
       217 
     | 
    
         
            -
                  end
         
     | 
| 
       218 
     | 
    
         
            -
                end
         
     | 
| 
       219 
     | 
    
         
            -
              end
         
     | 
| 
       220 
     | 
    
         
            -
             
     | 
| 
       221 
     | 
    
         
            -
              def doc_desc_for arg
         
     | 
| 
       222 
     | 
    
         
            -
                return nil if arg.docs.leading_comments.empty?
         
     | 
| 
       223 
     | 
    
         
            -
             
     | 
| 
       224 
     | 
    
         
            -
                arg.docs.leading_comments
         
     | 
| 
       225 
     | 
    
         
            -
              end
         
     | 
| 
       226 
     | 
    
         
            -
             
     | 
| 
       227 
     | 
    
         
            -
              def default_value_for arg
         
     | 
| 
       228 
     | 
    
         
            -
                if arg.message?
         
     | 
| 
       229 
     | 
    
         
            -
                  "{}"
         
     | 
| 
       230 
     | 
    
         
            -
                elsif arg.enum?
         
     | 
| 
       231 
     | 
    
         
            -
                  # TODO: select the first non-0 enum value
         
     | 
| 
       232 
     | 
    
         
            -
                  # ":ENUM"
         
     | 
| 
       233 
     | 
    
         
            -
                  arg.enum.values.first
         
     | 
| 
       234 
     | 
    
         
            -
                else
         
     | 
| 
       235 
     | 
    
         
            -
                  case arg.type
         
     | 
| 
       236 
     | 
    
         
            -
                  when 1, 2                              then "3.14"
         
     | 
| 
       237 
     | 
    
         
            -
                  when 3, 4, 5, 6, 7, 13, 15, 16, 17, 18 then "42"
         
     | 
| 
       238 
     | 
    
         
            -
                  when 9, 12                             then "\"hello world\""
         
     | 
| 
       239 
     | 
    
         
            -
                  when 8                                 then "true"
         
     | 
| 
       240 
     | 
    
         
            -
                  else
         
     | 
| 
       241 
     | 
    
         
            -
                    "Object"
         
     | 
| 
       242 
     | 
    
         
            -
                  end
         
     | 
| 
       243 
     | 
    
         
            -
                end
         
     | 
| 
       244 
     | 
    
         
            -
              end
         
     | 
| 
       245 
     | 
    
         
            -
             
     | 
| 
       246 
     | 
    
         
            -
              def method_path
         
     | 
| 
       247 
     | 
    
         
            -
                return "" if @method.http.nil?
         
     | 
| 
       248 
     | 
    
         
            -
             
     | 
| 
       249 
     | 
    
         
            -
                method = [
         
     | 
| 
       250 
     | 
    
         
            -
                  @method.http.get, @method.http.post, @method.http.put,
         
     | 
| 
       251 
     | 
    
         
            -
                  @method.http.patch, @method.http.delete
         
     | 
| 
       252 
     | 
    
         
            -
                ].find { |x| !x.empty? }
         
     | 
| 
       253 
     | 
    
         
            -
                return method unless method.nil?
         
     | 
| 
       254 
     | 
    
         
            -
             
     | 
| 
       255 
     | 
    
         
            -
                return @method.http.custom.path unless @method.http.custom.nil?
         
     | 
| 
       256 
     | 
    
         
            -
              end
         
     | 
| 
       257 
     | 
    
         
            -
             
     | 
| 
       258 
     | 
    
         
            -
              def paged_request? request
         
     | 
| 
       259 
     | 
    
         
            -
                page_token = request.fields.find do |f|
         
     | 
| 
       260 
     | 
    
         
            -
                  f.name == "page_token" && f.type == Google::Protobuf::FieldDescriptorProto::Type::TYPE_STRING
         
     | 
| 
       261 
     | 
    
         
            -
                end
         
     | 
| 
       262 
     | 
    
         
            -
                return false if page_token.nil?
         
     | 
| 
       263 
     | 
    
         
            -
             
     | 
| 
       264 
     | 
    
         
            -
                page_size_types = [
         
     | 
| 
       265 
     | 
    
         
            -
                  Google::Protobuf::FieldDescriptorProto::Type::TYPE_INT32,
         
     | 
| 
       266 
     | 
    
         
            -
                  Google::Protobuf::FieldDescriptorProto::Type::TYPE_INT64
         
     | 
| 
       267 
     | 
    
         
            -
                ]
         
     | 
| 
       268 
     | 
    
         
            -
                page_size = request.fields.find do |f|
         
     | 
| 
       269 
     | 
    
         
            -
                  f.name == "page_size" && page_size_types.include?(f.type)
         
     | 
| 
       270 
     | 
    
         
            -
                end
         
     | 
| 
       271 
     | 
    
         
            -
                return false if page_size.nil?
         
     | 
| 
       272 
     | 
    
         
            -
             
     | 
| 
       273 
     | 
    
         
            -
                true
         
     | 
| 
       274 
     | 
    
         
            -
              end
         
     | 
| 
       275 
     | 
    
         
            -
             
     | 
| 
       276 
     | 
    
         
            -
              def paged_response? response
         
     | 
| 
       277 
     | 
    
         
            -
                next_page_token = response.fields.find do |f|
         
     | 
| 
       278 
     | 
    
         
            -
                  f.name == "next_page_token" && f.type == Google::Protobuf::FieldDescriptorProto::Type::TYPE_STRING
         
     | 
| 
       279 
     | 
    
         
            -
                end
         
     | 
| 
       280 
     | 
    
         
            -
                return false if next_page_token.nil?
         
     | 
| 
       281 
     | 
    
         
            -
             
     | 
| 
       282 
     | 
    
         
            -
                repeated_field = response.fields.find do |f|
         
     | 
| 
       283 
     | 
    
         
            -
                  f.label == Google::Protobuf::FieldDescriptorProto::Label::LABEL_REPEATED &&
         
     | 
| 
       284 
     | 
    
         
            -
                    f.type == Google::Protobuf::FieldDescriptorProto::Type::TYPE_MESSAGE
         
     | 
| 
       285 
     | 
    
         
            -
                end
         
     | 
| 
       286 
     | 
    
         
            -
                return false if repeated_field.nil?
         
     | 
| 
       287 
     | 
    
         
            -
             
     | 
| 
       288 
     | 
    
         
            -
                # We want to make sure the first repeated field is also has the lowest field number,
         
     | 
| 
       289 
     | 
    
         
            -
                # but the google-protobuf gem sorts fields by number, so we lose the original order.
         
     | 
| 
       290 
     | 
    
         
            -
             
     | 
| 
       291 
     | 
    
         
            -
                true
         
     | 
| 
       292 
     | 
    
         
            -
              end
         
     | 
| 
       293 
     | 
    
         
            -
            end
         
     |