Module: Deb::S3::Utils

Included in:
Manifest, Package, Package, Release
Defined in:
lib/deb/s3/utils.rb

Defined Under Namespace

Classes: SafeSystemError

Class Method Summary collapse

Class Method Details

.access_policyObject



13
# File 'lib/deb/s3/utils.rb', line 13

def access_policy; @access_policy end

.access_policy=(v) ⇒ Object



14
# File 'lib/deb/s3/utils.rb', line 14

def access_policy= v; @access_policy = v end

.bucketObject



11
# File 'lib/deb/s3/utils.rb', line 11

def bucket; @bucket end

.bucket=(v) ⇒ Object



12
# File 'lib/deb/s3/utils.rb', line 12

def bucket= v; @bucket = v end

.debianize_op(op) ⇒ Object



34
35
36
37
38
# 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

.encryptionObject



21
# File 'lib/deb/s3/utils.rb', line 21

def encryption; @encryption end

.encryption=(v) ⇒ Object



22
# File 'lib/deb/s3/utils.rb', line 22

def encryption= v; @encryption = v end

.gpg_optionsObject



17
# File 'lib/deb/s3/utils.rb', line 17

def gpg_options; @gpg_options end

.gpg_options=(v) ⇒ Object



18
# File 'lib/deb/s3/utils.rb', line 18

def gpg_options= v; @gpg_options = v end

.prefixObject



19
# File 'lib/deb/s3/utils.rb', line 19

def prefix; @prefix end

.prefix=(v) ⇒ Object



20
# File 'lib/deb/s3/utils.rb', line 20

def prefix= v; @prefix = v end

.s3Object



9
# File 'lib/deb/s3/utils.rb', line 9

def s3; @s3 end

.s3=(v) ⇒ Object



10
# File 'lib/deb/s3/utils.rb', line 10

def s3= v; @s3 = v end

.s3_escape(string) ⇒ Object

from fog, Fog::AWS.escape



51
52
53
54
55
# 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) ⇒ Boolean

Returns:

  • (Boolean)


57
58
59
# File 'lib/deb/s3/utils.rb', line 57

def s3_exists?(path)
  Deb::S3::Utils.s3.buckets[Deb::S3::Utils.bucket].objects[s3_path(path)].exists?
end

.s3_path(path) ⇒ Object



46
47
48
# File 'lib/deb/s3/utils.rb', line 46

def s3_path(path)
  File.join(*[Deb::S3::Utils.prefix, path].compact)
end

.s3_read(path) ⇒ Object



61
62
63
64
# File 'lib/deb/s3/utils.rb', line 61

def s3_read(path)
  return nil unless s3_exists?(path)
  Deb::S3::Utils.s3.buckets[Deb::S3::Utils.bucket].objects[s3_path(path)].read
end

.s3_remove(path) ⇒ Object



89
90
91
# File 'lib/deb/s3/utils.rb', line 89

def s3_remove(path)
  Deb::S3::Utils.s3.buckets[Deb::S3::Utils.bucket].objects[s3_path(path)].delete if s3_exists?(path)
end

.s3_store(path, filename = nil, content_type = 'application/octet-stream; charset=binary', cache_control = nil) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/deb/s3/utils.rb', line 66

def s3_store(path, filename=nil, content_type='application/octet-stream; charset=binary', cache_control=nil)
  filename = File.basename(path) unless filename
  obj = Deb::S3::Utils.s3.buckets[Deb::S3::Utils.bucket].objects[s3_path(filename)]

  file_md5 = Digest::MD5.file(path)

  # check if the object already exists
  if obj.exists?
    return if (file_md5.to_s == obj.etag.gsub('"', '') or file_md5.to_s == obj.['md5'])
  end

  options = {:acl => Deb::S3::Utils.access_policy, :content_type => content_type, :metadata => {'md5' => file_md5}}
  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
  obj.write(Pathname.new(path), options)
end

.safesystem(*args) ⇒ Object



26
27
28
29
30
31
32
# 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_keyObject



15
# File 'lib/deb/s3/utils.rb', line 15

def signing_key; @signing_key end

.signing_key=(v) ⇒ Object



16
# File 'lib/deb/s3/utils.rb', line 16

def signing_key= v; @signing_key = v end

.template(path) ⇒ Object



40
41
42
43
44
# 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