Class Amazon::AWS::MultipleOperation
In: lib/amazon/aws.rb
Parent: Operation

This class can be used to merge operations into a single operation. AWS currently supports combining two operations,

Methods

new  

Public Class methods

This will allow you to take two Operation objects and combine them to form a single object, which can then be used to perform searches. AWS itself imposes the maximum of two combined operations.

operation1 and operation2 are both objects from a subclass of Operation, such as ItemSearch, ItemLookup, etc.

There are currently a few restrictions in the Ruby/AWS implementation of multiple operations:

  • ResponseGroup objects used when calling AWS::Search::Request#search apply to both operations. You cannot have a separate ResponseGroup set per operation.
  • One or both operations may have multiple results pages available, but only the first page can be returned. If you need the other pages, perform the operations separately, not as part of a MultipleOperation.

Example:

 is = ItemSearch.new( 'Books', { 'Title' => 'Ruby' } )
 il = ItemLookup.new( 'ASIN', { 'ItemId' => 'B0013DZAYO',
                                'MerchantId' => 'Amazon' } )
 mo = MultipleOperation.new( is, il )

In the above example, we compose a multiple operation consisting of an ItemSearch and an ItemLookup.

[Source]

# File lib/amazon/aws.rb, line 682
      def initialize(operation1, operation2)

        # Safeguard against changing original Operation objects in place. This
        # is to protect me, not for user code.
        #
        operation1.freeze
        operation2.freeze

        op_kind = '%s,%s' % [ operation1.kind, operation2.kind ]

        # Duplicate Operation objects and remove their Operation parameter.
        # 
        op1 = operation1.dup
        op1.params = op1.params.dup
        op1.params.delete( 'Operation' )

        op2 = operation2.dup
        op2.params = op2.params.dup
        op2.params.delete( 'Operation' )

        if op1.class == op2.class

          # If both operations are of the same type, we combine the parameters
          # of both.
          #
          b_params = op1.batch_parameters( op1.params, op2.params )
        else

          # We have to convert the parameters to batch format.
          #
          bp1 = op1.batch_parameters( op1.params, {} )
          bp2 = op2.batch_parameters( op2.params, {} )
          b_params = bp1.merge( bp2 )
        end

        params = { 'Operation' => op_kind }.merge( b_params )
        super( params )

      end

[Validate]