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