lib/gcloud/logging/sink/list.rb in gcloud-0.10.0 vs lib/gcloud/logging/sink/list.rb in gcloud-0.11.0
- old
+ new
@@ -32,55 +32,132 @@
super arr
end
##
# Whether there is a next page of sinks.
+ #
+ # @return [Boolean]
+ #
+ # @example
+ # require "gcloud"
+ #
+ # gcloud = Gcloud.new
+ # logging = gcloud.logging
+ #
+ # sinks = logging.sinks
+ # if sinks.next?
+ # next_sinks = sinks.next
+ # end
+ #
def next?
!token.nil?
end
##
# Retrieve the next page of sinks.
+ #
+ # @return [Sink::List]
+ #
+ # @example
+ # require "gcloud"
+ #
+ # gcloud = Gcloud.new
+ # logging = gcloud.logging
+ #
+ # sinks = dataset.sinks
+ # if sinks.next?
+ # next_sinks = sinks.next
+ # end
+ #
def next
return nil unless next?
ensure_service!
- list_grpc = @service.list_sinks token: token
+ list_grpc = @service.list_sinks token: token, max: @max
self.class.from_grpc list_grpc, @service
rescue GRPC::BadStatus => e
raise Gcloud::Error.from_error(e)
end
##
- # Retrieves all sinks by repeatedly loading {#next?} until {#next?}
- # returns `false`. Returns the list instance for method chaining.
+ # Retrieves all sinks by repeatedly loading {#next} until {#next?}
+ # returns `false`. Calls the given block once for each sink, which is
+ # passed as the parameter.
#
- # @example
+ # An Enumerator is returned if no block is given.
+ #
+ # This method may make several API calls until all sinks are retrieved.
+ # Be sure to use as narrow a search criteria as possible. Please use
+ # with caution.
+ #
+ # @param [Integer] request_limit The upper limit of API requests to make
+ # to load all sinks. Default is no limit.
+ # @yield [sink] The block for accessing each sink.
+ # @yieldparam [Sink] sink The sink object.
+ #
+ # @return [Enumerator]
+ #
+ # @example Iterating each sink by passing a block:
# require "gcloud"
#
# gcloud = Gcloud.new
# logging = gcloud.logging
- # all_sinks = logging.sinks.all # Load all pages of sinks
+ # sinks = logging.sinks
#
- def all
- while next?
- next_records = self.next
- push(*next_records)
- self.token = next_records.token
+ # sinks.all do |sink|
+ # puts "#{sink.name}: #{sink.filter} -> #{sink.destination}"
+ # end
+ #
+ # @example Using the enumerator by not passing a block:
+ # require "gcloud"
+ #
+ # gcloud = Gcloud.new
+ # logging = gcloud.logging
+ # sinks = logging.sinks
+ #
+ # all_names = sinks.all.map do |sink|
+ # sink.name
+ # end
+ #
+ # @example Limit the number of API calls made:
+ # require "gcloud"
+ #
+ # gcloud = Gcloud.new
+ # logging = gcloud.logging
+ # sinks = logging.sinks
+ #
+ # sinks.all(request_limit: 10) do |sink|
+ # puts "#{sink.name}: #{sink.filter} -> #{sink.destination}"
+ # end
+ #
+ def all request_limit: nil
+ request_limit = request_limit.to_i if request_limit
+ unless block_given?
+ return enum_for(:all, request_limit: request_limit)
end
- self
+ results = self
+ loop do
+ results.each { |r| yield r }
+ if request_limit
+ request_limit -= 1
+ break if request_limit < 0
+ end
+ break unless results.next?
+ results = results.next
+ end
end
##
# @private New Sink::List from a Google::Logging::V2::ListSinksResponse
# object.
- def self.from_grpc grpc_list, service
+ def self.from_grpc grpc_list, service, max = nil
sinks = new(Array(grpc_list.sinks).map do |grpc|
Sink.from_grpc grpc, service
end)
token = grpc_list.next_page_token
token = nil if token == ""
sinks.instance_variable_set "@token", token
sinks.instance_variable_set "@service", service
+ sinks.instance_variable_set "@max", max
sinks
end
protected