module Deb::S3::Utils

Public Instance Methods

access_policy() click to toggle source
# File lib/deb/s3/utils.rb, line 12
def access_policy; @access_policy end
access_policy=(v;) click to toggle source
# File lib/deb/s3/utils.rb, line 13
def access_policy= v; @access_policy = v end
bucket() click to toggle source
# File lib/deb/s3/utils.rb, line 10
def bucket; @bucket end
bucket=(v;) click to toggle source
# File lib/deb/s3/utils.rb, line 11
def bucket= v; @bucket = v end
debianize_op(op) click to toggle source
# File lib/deb/s3/utils.rb, line 34
def debianize_op(op)
  # Operators in debian packaging are <<, <=, =, >= and >>
  # So any operator like < or > must be replaced
  {:< => "<<", :> => ">>"}[op.to_sym] or op
end
encryption() click to toggle source
# File lib/deb/s3/utils.rb, line 20
def encryption; @encryption end
encryption=(v;) click to toggle source
# File lib/deb/s3/utils.rb, line 21
def encryption= v; @encryption = v end
gpg_options() click to toggle source
# File lib/deb/s3/utils.rb, line 16
def gpg_options; @gpg_options end
gpg_options=(v;) click to toggle source
# File lib/deb/s3/utils.rb, line 17
def gpg_options= v; @gpg_options = v end
prefix() click to toggle source
# File lib/deb/s3/utils.rb, line 18
def prefix; @prefix end
prefix=(v;) click to toggle source
# File lib/deb/s3/utils.rb, line 19
def prefix= v; @prefix = v end
s3() click to toggle source
# File lib/deb/s3/utils.rb, line 8
def s3; @s3 end
s3=(v;) click to toggle source
# File lib/deb/s3/utils.rb, line 9
def s3= v; @s3 = v end
s3_escape(string) click to toggle source

from fog, Fog::AWS.escape

# File lib/deb/s3/utils.rb, line 51
def s3_escape(string)
  string.gsub(/([^a-zA-Z0-9_.\-~+]+)/) {
    "%" + $1.unpack("H2" * $1.bytesize).join("%").upcase
  }
end
s3_exists?(path) click to toggle source
# File lib/deb/s3/utils.rb, line 57
def s3_exists?(path)
  Deb::S3::Utils.s3.head_object(
    :bucket => Deb::S3::Utils.bucket,
    :key => s3_path(path),
  )
rescue Aws::S3::Errors::NotFound
  false
end
s3_path(path) click to toggle source
# File lib/deb/s3/utils.rb, line 46
def s3_path(path)
  File.join(*[Deb::S3::Utils.prefix, path].compact)
end
s3_read(path) click to toggle source
# File lib/deb/s3/utils.rb, line 66
def s3_read(path)
  Deb::S3::Utils.s3.get_object(
    :bucket => Deb::S3::Utils.bucket,
    :key => s3_path(path),
  )[:body].read
rescue Aws::S3::Errors::NoSuchKey
  false
end
s3_remove(path) click to toggle source
# File lib/deb/s3/utils.rb, line 108
def s3_remove(path)
  if s3_exists?(path)
    Deb::S3::Utils.s3.delete_object(
      :bucket =>Deb::S3::Utils.bucket,
      :key => s3_path(path),
    )
  end
end
s3_store(path, filename=nil, content_type='application/octet-stream; charset=binary', cache_control=nil, fail_if_exists=false) click to toggle source
# File lib/deb/s3/utils.rb, line 75
def s3_store(path, filename=nil, content_type='application/octet-stream; charset=binary', cache_control=nil, fail_if_exists=false)
  filename = File.basename(path) unless filename
  obj = s3_exists?(filename)

  file_md5 = Digest::MD5.file(path)

  # check if the object already exists
  if obj != false
    return if (file_md5.to_s == obj[:etag].gsub('"', '') or file_md5.to_s == obj[:metadata]['md5'])
    raise AlreadyExistsError, "file #{filename} already exists with different contents" if fail_if_exists
  end

  options = {
    :bucket => Deb::S3::Utils.bucket,
    :key => s3_path(filename),
    :acl => Deb::S3::Utils.access_policy,
    :content_type => content_type,
    :metadata => { "md5" => file_md5.to_s },
  }
  if !cache_control.nil?
    options[:cache_control] = cache_control
  end

  # specify if encryption is required
  options[:server_side_encryption] = "AES256" if Deb::S3::Utils.encryption

  # upload the file
  File.open(path) do |f|
    options[:body] = f
    Deb::S3::Utils.s3.put_object(options)
  end
end
safesystem(*args) click to toggle source
# File lib/deb/s3/utils.rb, line 26
def safesystem(*args)
  success = system(*args)
  if !success
    raise SafeSystemError, "'system(#{args.inspect})' failed with error code: #{$?.exitstatus}"
  end
  return success
end
signing_key() click to toggle source
# File lib/deb/s3/utils.rb, line 14
def signing_key; @signing_key end
signing_key=(v;) click to toggle source
# File lib/deb/s3/utils.rb, line 15
def signing_key= v; @signing_key = v end
template(path) click to toggle source
# File lib/deb/s3/utils.rb, line 40
def template(path)
  template_file = File.join(File.dirname(__FILE__), "templates", path)
  template_code = File.read(template_file)
  ERB.new(template_code, nil, "-")
end