class Aws::Plugins::RequestCompression::CompressionHandler
@api private
Public Instance Methods
call(context)
click to toggle source
# File lib/aws-sdk-core/plugins/request_compression.rb, line 83 def call(context) if should_compress?(context) selected_encoding = request_encoding_selection(context) if selected_encoding if streaming?(context.operation.input) process_streaming_compression(selected_encoding, context) elsif context.http_request.body.size >= context.config.request_min_compression_size_bytes process_compression(selected_encoding, context) end end end with_metric(selected_encoding) { @handler.call(context) } end
Private Instance Methods
gzip_compress(context)
click to toggle source
# File lib/aws-sdk-core/plugins/request_compression.rb, line 145 def gzip_compress(context) compressed = StringIO.new compressed.binmode gzip_writer = Zlib::GzipWriter.new(compressed) if context.http_request.body.respond_to?(:read) update_in_chunks(gzip_writer, context.http_request.body) else gzip_writer.write(context.http_request.body) end gzip_writer.close new_body = StringIO.new(compressed.string) context.http_request.body = new_body end
process_compression(encoding, context)
click to toggle source
# File lib/aws-sdk-core/plugins/request_compression.rb, line 135 def process_compression(encoding, context) case encoding when 'gzip' gzip_compress(context) else raise StandardError, "We currently do not support #{encoding} encoding" end update_content_encoding(encoding, context) end
process_streaming_compression(encoding, context)
click to toggle source
# File lib/aws-sdk-core/plugins/request_compression.rb, line 168 def process_streaming_compression(encoding, context) case encoding when 'gzip' context.http_request.body = GzipIO.new(context.http_request.body) else raise StandardError, "We currently do not support #{encoding} encoding" end update_content_encoding(encoding, context) end
request_encoding_selection(context)
click to toggle source
# File lib/aws-sdk-core/plugins/request_compression.rb, line 108 def request_encoding_selection(context) encoding_list = context.operation.request_compression['encodings'] encoding_list.find { |encoding| RequestCompression::SUPPORTED_ENCODINGS.include?(encoding) } end
should_compress?(context)
click to toggle source
# File lib/aws-sdk-core/plugins/request_compression.rb, line 122 def should_compress?(context) context.operation.request_compression && !context.config.disable_request_compression end
streaming?(input)
click to toggle source
# File lib/aws-sdk-core/plugins/request_compression.rb, line 127 def streaming?(input) if payload = input[:payload_member] # checking ref and shape payload['streaming'] || payload.shape['streaming'] else false end end
update_content_encoding(encoding, context)
click to toggle source
# File lib/aws-sdk-core/plugins/request_compression.rb, line 113 def update_content_encoding(encoding, context) headers = context.http_request.headers if headers['Content-Encoding'] headers['Content-Encoding'] += ", #{encoding}" else headers['Content-Encoding'] = encoding end end
update_in_chunks(compressor, io)
click to toggle source
# File lib/aws-sdk-core/plugins/request_compression.rb, line 159 def update_in_chunks(compressor, io) loop do chunk = io.read(CHUNK_SIZE) break unless chunk compressor.write(chunk) end end
with_metric(encoding, &block)
click to toggle source
# File lib/aws-sdk-core/plugins/request_compression.rb, line 99 def with_metric(encoding, &block) case encoding when 'gzip' Aws::Plugins::UserAgent.metric('GZIP_REQUEST_COMPRESSION', &block) else block.call end end