lib/io_streams/s3/writer.rb in iostreams-0.17.1 vs lib/io_streams/s3/writer.rb in iostreams-0.17.2
- old
+ new
@@ -1,8 +1,73 @@
module IOStreams
module S3
class Writer
# Write to AWS S3
+ #
+ # Arguments:
+ #
+ # uri: [String]
+ # Prefix must be: `s3://`
+ # followed by bucket name,
+ # followed by path and file_name (key).
+ # Examples:
+ # s3://my-bucket-name/file_name.txt
+ # s3://my-bucket-name/some_path/file_name.csv
+ #
+ # region: [String]
+ # AWS Region.
+ # Default: ENV['AWS_REGION'], or supplied by ruby driver
+ #
+ # thread_count: [Integer]
+ # The number of parallel multipart uploads
+ # Default: 10
+ #
+ # tempfile: [Boolean]
+ # Normally read data is stored in memory when building the parts in order to complete
+ # the underlying multipart upload. By passing `:tempfile => true` data read will be
+ # temporarily stored on disk reducing the memory footprint vastly.
+ # Default: false
+ #
+ # part_size: [Integer]
+ # Define how big each part size but the last should be.
+ # Default: 5 * 1024 * 1024
+ #
+ # Other possible options extracted from AWS source code:
+ # # See: https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Client.html#create_multipart_upload-instance_method
+ #
+ # acl: "private", # accepts private, public-read, public-read-write, authenticated-read, aws-exec-read, bucket-owner-read, bucket-owner-full-control
+ # cache_control: "CacheControl",
+ # content_disposition: "ContentDisposition",
+ # content_encoding: "ContentEncoding",
+ # content_language: "ContentLanguage",
+ # content_type: "ContentType",
+ # expires: Time.now,
+ # grant_full_control: "GrantFullControl",
+ # grant_read: "GrantRead",
+ # grant_read_acp: "GrantReadACP",
+ # grant_write_acp: "GrantWriteACP",
+ # metadata: {
+ # "MetadataKey" => "MetadataValue",
+ # },
+ # server_side_encryption: "AES256", # accepts AES256, aws:kms
+ # storage_class: "STANDARD", # accepts STANDARD, REDUCED_REDUNDANCY, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER, DEEP_ARCHIVE
+ # website_redirect_location: "WebsiteRedirectLocation",
+ # sse_customer_algorithm: "SSECustomerAlgorithm",
+ # sse_customer_key: "SSECustomerKey",
+ # sse_customer_key_md5: "SSECustomerKeyMD5",
+ # ssekms_key_id: "SSEKMSKeyId",
+ # ssekms_encryption_context: "SSEKMSEncryptionContext",
+ # request_payer: "requester", # accepts requester
+ # tagging: "TaggingHeader",
+ # object_lock_mode: "GOVERNANCE", # accepts GOVERNANCE, COMPLIANCE
+ # object_lock_retain_until_date: Time.now,
+ # object_lock_legal_hold_status: "ON", # accepts ON, OFF
+ #
+ # Raises [MultipartUploadError] If an object is being uploaded in
+ # parts, and the upload can not be completed, then the upload is
+ # aborted and this error is raised. The raised error has a `#errors`
+ # method that returns the failures that caused the upload to be
+ # aborted.
def self.open(uri, region: nil, **args, &block)
raise(ArgumentError, 'file_name must be a URI string') unless uri.is_a?(String)
IOStreams::S3.load_dependencies