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.
723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 |
# File 'lib/amazon/aws.rb', line 723 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 |