Class: Amazon::AWS::MultipleOperation
- Defined in:
- lib/amazon/aws.rb
Overview
This class can be used to merge operations into a single operation. AWS currently supports combining two operations,
Constant Summary
Constants inherited from Operation
Operation::ALL_PARAMETERS, Operation::OPERATIONS, Operation::OPT_PARAMETERS, Operation::PARAMETERS
Instance Attribute Summary
Attributes inherited from Operation
Instance Method Summary collapse
-
#initialize(operation1, operation2) ⇒ MultipleOperation
constructor
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.
Methods inherited from Operation
Constructor Details
#initialize(operation1, operation2) ⇒ MultipleOperation
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.
682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 |
# 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 |