class Aws::Resources::Batch

A batch provides array like access to a list of resources. Batches also provide the ability to invoke certain operations against the entire batch.

## Getting a Batch

You should normally not need to construct a batch. Anywhere a list of resources is returned, they are returned as a batch:

# security_groups is a batch
security_groups = ec2.instance('i-12345678').security_groups

When the possible number of resources is unknown or large, the resources will be returned in a collection. Collections can enumerate individual resources or batches. They manage paging over the AWS request/responses to produce batches.

# objects is a collection
objects = s3.bucket('aws-sdk').objects

You can invoke batch operations against collections and they will invoke them on each batch.

# delete all objects in this bucket in batches of 1k
objects = s3.bucket('aws-sdk').objects
objects.delete

## Batch Operations

Batches provide operations that operate on the entire batch. These operations are only defined for resources where the AWS API accepts multiple inputs. This means a batch operation for n resources will only make one request.

Resource classes document each of their own batch operations. See {S3::Object} for an example.

Attributes

count[R]

@return [Integer]

resource_class[R]

@return [Class<Resource>]

response[R]

@return [Seahorse::Client::Response, nil]

size[R]

@return [Integer]

Public Class Methods

new(resource_class, resources, options = {}) click to toggle source

@param [Array<Resource>] resources @option options [Seahorse::Client::Response] :response

# File lib/aws-sdk-resources/batch.rb, line 47
def initialize(resource_class, resources, options = {})
  @resource_class = resource_class
  @resources = resources
  @response = options[:response]
  @size = resources.size
  @options = options
end

Private Class Methods

validate_batch_args!(args) click to toggle source

@api private

# File lib/aws-sdk-resources/batch.rb, line 128
def validate_batch_args!(args)
  case args.count
  when 0
  when 1
    unless Hash === args.first
      raise ArgumentError, "expected options to be a hash"
    end
  else
    raise ArgumentError, "wrong number of arguments, expected 0 or 1"
  end
end

Public Instance Methods

[](index) click to toggle source

@param [Integer] index @return [Resource]

# File lib/aws-sdk-resources/batch.rb, line 68
def [](index)
  @resources[index]
end
each(&block) click to toggle source

Yields each resource of the batch, one at a time.

# File lib/aws-sdk-resources/batch.rb, line 73
def each(&block)
  enum = @resources.to_enum
  enum.each(&block) if block_given?
  enum
end
empty?() click to toggle source

@return [Boolean]

# File lib/aws-sdk-resources/batch.rb, line 90
def empty?
  @resources.empty?
end
first(count = nil) click to toggle source

@param [Integer] count @return [Resource, Batch]

# File lib/aws-sdk-resources/batch.rb, line 81
def first(count = nil)
  if count
    self.class.new(@resource_class, @resources.first(count), @options)
  else
    @resources.first
  end
end
inspect() click to toggle source

@api private

# File lib/aws-sdk-resources/batch.rb, line 95
def inspect
  "#<#{self.class.name} resources=#{@resources.inspect}>"
end
method_missing(method_name, *args, &block) click to toggle source

@api private

Calls superclass method
# File lib/aws-sdk-resources/batch.rb, line 109
def method_missing(method_name, *args, &block)
  if respond_to?(method_name)
    invoke_batch_operation(method_name, args, block) unless empty?
  else
    super
  end
end
respond_to?(method_name, *args) click to toggle source

@api private

Calls superclass method
# File lib/aws-sdk-resources/batch.rb, line 100
def respond_to?(method_name, *args)
  if @resource_class.batch_operation_names.include?(method_name.to_sym)
    true
  else
    super
  end
end

Private Instance Methods

invoke_batch_operation(method_name, args, block) click to toggle source
# File lib/aws-sdk-resources/batch.rb, line 119
def invoke_batch_operation(method_name, args, block)
  self.class.validate_batch_args!(args)
  operation = @resource_class.batch_operation(method_name)
  operation.call(resource:self, args:args, block:block)
end