class Gapic::Schema::Proto

Base class for all generic proto types including: enums, messages, methods and services.

@!attribute [r] descriptor

@return [Object] the descriptor of the proto

@!attribute [r] address

@return [Enumerable<String>] A sequence of names which determines
  the address of the proto. For example, a message named "Foo" in
  package "google.example.v1" will have the address:
  ["google", "example", "v1", "Foo"].
  and a nested message within "Foo" named "Bar" will have the address:
  ["google", "example", "v1", "Foo", "Bar"]

@!attribute [r] docs

@return [Google::Protobuf::SourceCodeInfo::Location]
  A Location identifies a piece of source code in a .proto file which
  corresponds to a particular definition.  This information is
  intended to be useful to IDEs, code indexers, documentation
  generators, and similar tools.

  For example, say we have a file like:
    message Foo {
      optional string foo = 1;
    }
  Let's look at just the field definition:
    optional string foo = 1;
    ^       ^^     ^^  ^  ^^^
    a       bc     de  f  ghi
  We have the following locations:
    span   path               represents
    [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
    [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
    [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
    [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
    [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).

  Notes:
  - A location may refer to a repeated field itself (i.e. not to any
    particular index within it).  This is used whenever a set of
    elements are logically enclosed in a single code segment.  For
    example, an entire extend block (possibly containing multiple
    extension definitions) will have an outer location whose path
    refers to the "extensions" repeated field without an index.
  - Multiple locations may have the same path.  This happens when a
    single logical declaration is spread out across multiple places.
    The most obvious example is the "extend" block again -- there may
    be multiple extend blocks in the same scope, each of which will
    have the same path.
  - A location's span is not always a subset of its parent's span.
    For example, the "extendee" of an extension declaration appears at
    the beginning of the "extend" block and is shared by all
    extensions within the block.
  - Just because a location's span is a subset of some other
    location's span does not mean that it is a descendent. For
    example, a "group" defines both a type and a field in a single
    declaration. Thus, the locations corresponding to the type and
    field and their components will overlap.
  - Code which tries to interpret locations should probably be
    designed to ignore those that it doesn't understand, as more types
    of locations could be recorded in the future.

Attributes

address[R]
descriptor[R]
docs[R]
parent[RW]

Public Class Methods

new(descriptor, address, docs) click to toggle source

Initializes a Proto object. @param descriptor [Object] the protobuf

representation of this service.

@param address [Enumerable<String>] The address of the proto. See

#address for more info.

@param docs [Google::Protobuf::SourceCodeInfo::Location] The docs

of the proto. See #docs for more info.
# File lib/gapic/schema/wrappers.rb, line 97
def initialize descriptor, address, docs
  @descriptor = descriptor
  @address = address
  @docs = docs
end

Public Instance Methods

containing_api() click to toggle source

Returns the “root” of this schema. @return [Gapic::Schema::Api]

# File lib/gapic/schema/wrappers.rb, line 105
def containing_api
  parent&.containing_api
end
containing_file() click to toggle source

Returns the file containing this proto entity @return [Gapic::Schema::File]

# File lib/gapic/schema/wrappers.rb, line 111
def containing_file
  parent&.containing_file
end
docs_leading_comments(disable_xrefs: false) click to toggle source

Gets the cleaned up leading comments documentation

@param disable_xrefs [Boolean] (default is `false`) Disable linking to

cross-references, and render them simply as text. This can be used if
it is known that the targets are not present in the current library.

@return [String]

# File lib/gapic/schema/wrappers.rb, line 123
def docs_leading_comments disable_xrefs: false
  return nil if @docs.nil?
  return nil if @docs.leading_comments.empty?

  lines = @docs.leading_comments.each_line.to_a
  lines.map! { |line| line.start_with?(" ") ? line[1..-1] : line }
  lines = FormattingUtils.format_doc_lines containing_api, lines, disable_xrefs: disable_xrefs
  lines.join
end