def copy_from source, options = {}
copy_opts = { :bucket_name => bucket.name, :key => key }
copy_opts[:copy_source] = case source
when S3Object
"#{source.bucket.name}/#{source.key}"
when ObjectVersion
copy_opts[:version_id] = source.version_id
"#{source.object.bucket.name}/#{source.object.key}"
else
case
when options[:bucket] then "#{options[:bucket].name}/#{source}"
when options[:bucket_name] then "#{options[:bucket_name]}/#{source}"
else "#{self.bucket.name}/#{source}"
end
end
copy_opts[:metadata_directive] = 'COPY'
if options[:metadata]
copy_opts[:metadata] = options[:metadata]
copy_opts[:metadata_directive] = 'REPLACE'
end
if options[:content_type]
copy_opts[:content_type] = options[:content_type]
copy_opts[:metadata_directive] = "REPLACE"
end
copy_opts[:acl] = options[:acl] if options[:acl]
copy_opts[:version_id] = options[:version_id] if options[:version_id]
copy_opts[:server_side_encryption] =
options[:server_side_encryption] if
options.key?(:server_side_encryption)
copy_opts[:cache_control] = options[:cache_control] if
options[:cache_control]
add_configured_write_options(copy_opts)
if options[:reduced_redundancy]
copy_opts[:storage_class] = 'REDUCED_REDUNDANCY'
else
copy_opts[:storage_class] = 'STANDARD'
end
client.copy_object(copy_opts)
nil
end