Module: Gluttonberg::Library::Storage::S3::ClassMethods

Defined in:
lib/gluttonberg/library/storage/s3.rb

Constant Summary collapse

TEMP_ASSET_DIRECTORY =

It run when the engine is loaded. It makes sure that all the required directories for storing assets are in the public dir, creating them if they are missing. It also stores the various paths so they can be retreived using the assets_dir method.

"tmp/user_assets"

Instance Method Summary collapse

Instance Method Details

#bucket_handleObject



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/gluttonberg/library/storage/s3.rb', line 35

def bucket_handle
  key_id = self.s3_server_key_id
  key_val = self.s3_server_access_key
  s3_server_url = self.s3_server_url
  s3_bucket = self.s3_bucket_name
  if !key_id.blank? && !key_val.blank? && !s3_server_url.blank? && !s3_bucket.blank?
    s3 = AWS::S3.new({
      :access_key_id => key_id,
      :secret_access_key => key_val,
      :server => s3_server_url
    })
    bucket = s3.buckets[s3_bucket]
  else
    nil
  end
end

#migrate_file_to_s3(asset_hash, file_name, mime_type = '') ⇒ Object

takes file from public/assets folder and upload to s3 if s3 info is given in CMS settings



53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/gluttonberg/library/storage/s3.rb', line 53

def migrate_file_to_s3(asset_hash , file_name, mime_type='')
  bucket = bucket_handle
  if bucket != nil
    key_for_s3 = "user_assets/" + asset_hash + "/" + file_name
    asset = Gluttonberg::Asset.where(:asset_hash => asset_hash).first
    unless asset.blank?
      local_file = asset.tmp_directory + "/" + file_name
      local_file = "public/user_assets/" + asset_hash + "/" + file_name unless File.exist?(local_file)
      puts " Copying #{local_file} to #{self.s3_bucket_name}"
      self.upload_file_to(asset, bucket.objects[key_for_s3], mime_type, local_file)
      asset.update_attributes(:copied_to_s3 => true)
    end
  end
end

#s3_bucket_nameObject



23
24
25
# File 'lib/gluttonberg/library/storage/s3.rb', line 23

def s3_bucket_name
  Gluttonberg::Setting.get_setting("s3_bucket")
end

#s3_server_access_keyObject



31
32
33
# File 'lib/gluttonberg/library/storage/s3.rb', line 31

def s3_server_access_key
  Gluttonberg::Setting.get_setting("s3_access_key")
end

#s3_server_key_idObject



27
28
29
# File 'lib/gluttonberg/library/storage/s3.rb', line 27

def s3_server_key_id
  Gluttonberg::Setting.get_setting("s3_key_id")
end

#s3_server_urlObject



19
20
21
# File 'lib/gluttonberg/library/storage/s3.rb', line 19

def s3_server_url
  Gluttonberg::Setting.get_setting("s3_server_url")
end

#storage_setupObject



13
14
15
16
17
# File 'lib/gluttonberg/library/storage/s3.rb', line 13

def storage_setup
  Library.set_asset_root("user_assets", TEMP_ASSET_DIRECTORY, "public/test_assets")
  FileUtils.mkdir(Library.root) unless File.exists?(Library.root) || File.symlink?(Library.root)
  FileUtils.mkdir(Library.tmp_root) unless File.exists?(Library.tmp_root) || File.symlink?(Library.tmp_root)
end

#upload_file_to(asset, bucket_key, mime_type, local_file) ⇒ Object



68
69
70
71
72
73
74
75
76
77
# File 'lib/gluttonberg/library/storage/s3.rb', line 68

def upload_file_to(asset, bucket_key, mime_type, local_file)
  options = {
    :expires => (Time.now+1.years).rfc2822,
    :acl => :public_read
  }
  mime_type = asset.mime_type if mime_type.blank?
  options[:content_type] = mime_type unless mime_type.blank?
  response = bucket_key.write(File.open(File.join((Rails.env == 'test' ? Engine.root : Rails.root),local_file)), options)
  puts "Copied"
end