class ErpTechSvcs::FileSupport::S3Manager
Public Class Methods
setup_connection()
click to toggle source
# File lib/erp_tech_svcs/file_support/s3_manager.rb, line 10 def setup_connection @@configuration = YAML::load_file(File.join(Rails.root, 'config', 's3.yml'))[Rails.env] # S3 debug logging AWS.config( :logger => Rails.logger, :log_level => :info ) @@s3_connection = AWS::S3.new( :access_key_id => @@configuration['access_key_id'], :secret_access_key => @@configuration['secret_access_key'] ) @@s3_bucket = @@s3_connection.buckets[@@configuration['bucket'].to_sym] end
Public Instance Methods
bucket()
click to toggle source
# File lib/erp_tech_svcs/file_support/s3_manager.rb, line 37 def bucket @@s3_bucket end
bucket=(name)
click to toggle source
# File lib/erp_tech_svcs/file_support/s3_manager.rb, line 33 def bucket=(name) @@s3_bucket = @@s3_connection.buckets[name.to_sym] end
buckets()
click to toggle source
# File lib/erp_tech_svcs/file_support/s3_manager.rb, line 29 def buckets @@s3_connection.buckets end
build_tree(starting_path, options={})
click to toggle source
# File lib/erp_tech_svcs/file_support/s3_manager.rb, line 171 def build_tree(starting_path, options={}) node_tree = find_node(starting_path, options) node_tree.nil? ? [] : node_tree end
copy_file(origination_file, path, name)
click to toggle source
copy a file
# File lib/erp_tech_svcs/file_support/s3_manager.rb, line 60 def copy_file(origination_file, path, name) contents = get_contents(origination_file) create_file(path, name, contents) end
create_file(path, name, content)
click to toggle source
# File lib/erp_tech_svcs/file_support/s3_manager.rb, line 53 def create_file(path, name, content) path = path.sub(%r{^/}, '') full_filename = (path.blank? ? name : File.join(path, name)) bucket.objects[full_filename].write(content, {:acl => :public_read}) end
create_folder(path, name)
click to toggle source
# File lib/erp_tech_svcs/file_support/s3_manager.rb, line 66 def create_folder(path, name) path = path.sub(%r{^/}, '') full_filename = (path.blank? ? name : File.join(path, name)) folder = full_filename + "/" bucket.objects[folder].write('', {:acl => :public_read}) end
delete_file(path, options={})
click to toggle source
# File lib/erp_tech_svcs/file_support/s3_manager.rb, line 129 def delete_file(path, options={}) is_directory = File.extname(path).blank? path = path.sub(%r{^/}, '') result = false message = nil begin bucket.objects.with_prefix(path).delete_all message = "File was deleted successfully" result = true rescue => ex result = false message = ex end return result, message, is_directory end
exists?(path)
click to toggle source
# File lib/erp_tech_svcs/file_support/s3_manager.rb, line 146 def exists?(path) begin path = path.sub(%r{^/}, '') return bucket.objects[path].exists? rescue AWS::S3::Errors::NoSuchKey return false end end
find_node(path, options={})
click to toggle source
# File lib/erp_tech_svcs/file_support/s3_manager.rb, line 176 def find_node(path, options={}) parent = { :text => path.split('/').pop, :iconCls => "icon-content", :leaf => false, :id => path, :children => [] } #remove proceeding slash for s3 path.sub!(%r{^/}, '') if File.extname(path).blank? tree = bucket.as_tree(:prefix => path) tree.children.each do |node| if node.leaf? #ignore current path that comes as leaf from s3 next if node.key == path + '/' leaf_hash = { :text => node.key.split('/').pop, :downloadPath => "/#{node.key.split('/')[0..-2].join('/')}", :id => "/#{node.key}", :iconCls => 'icon-document', :leaf => true } if options[:file_asset_holder] leaf_hash = apply_file_asset_properties(options[:file_asset_holder], leaf_hash) end parent[:children] << leaf_hash else parent[:children] << { :iconCls => "icon-content", :text => node.prefix.split('/').pop, :id => "/#{node.prefix}".chop, :leaf => false } end end else parent[:iconCls] = 'icon-document' parent[:leaf] = true parent[:downloadPath] = "/#{path.split('/')[0..-2].join('/')}" if options[:file_asset_holder] parent = apply_file_asset_properties(options[:file_asset_holder], parent) end end # add preceding slash back to parent parent[:id] = "/#{parent[:id]}" parent end
get_contents(path)
click to toggle source
# File lib/erp_tech_svcs/file_support/s3_manager.rb, line 155 def get_contents(path) contents = nil message = nil path = path.sub(%r{^/}, '') begin object = bucket.objects[path] contents = object.read rescue AWS::S3::Errors::NoSuchKey => error contents = '' message = FILE_DOES_NOT_EXIST end return contents, message end
rename_file(path, name)
click to toggle source
# File lib/erp_tech_svcs/file_support/s3_manager.rb, line 96 def rename_file(path, name) result = false old_name = File.basename(path) path_pieces = path.split('/') path_pieces.delete(path_pieces.last) path_pieces.push(name) new_path = path_pieces.join('/') begin file = FileAsset.where(:name => ::File.basename(path)).where(:directory => ::File.dirname(path)).first acl = (file.is_secured? ? :private : :public_read) unless file.nil? options = (file.nil? ? {} : {:acl => acl}) path = path.sub(%r{^/}, '') new_path = new_path.sub(%r{^/}, '') old_object = bucket.objects[path] if new_object = old_object.move_to(new_path, options) message = "#{old_name} was renamed to #{name} successfully" result = true else message = "Error renaming #{old_name}" end rescue AWS::S3::Errors::NoSuchKey => ex message = FILE_FOLDER_DOES_NOT_EXIST end return result, message end
root()
click to toggle source
# File lib/erp_tech_svcs/file_support/s3_manager.rb, line 41 def root '' end
save_move(path, new_parent_path)
click to toggle source
# File lib/erp_tech_svcs/file_support/s3_manager.rb, line 73 def save_move(path, new_parent_path) result = false unless self.exists? path message = FILE_DOES_NOT_EXIST else file = FileAsset.where(:name => ::File.basename(path)).where(:directory => ::File.dirname(path)).first acl = (file.is_secured? ? :private : :public_read) unless file.nil? options = (file.nil? ? {} : {:acl => acl}) name = File.basename(path) path = path.sub(%r{^/}, '') new_path = File.join(new_parent_path, name).sub(%r{^/}, '') old_object = bucket.objects[path] if new_object = old_object.move_to(new_path, options) message = "#{name} was moved to #{new_path} successfully" result = true else message = "Error moving file #{path}" end end return result, message end
set_permissions(path, canned_acl=:public_read)
click to toggle source
# File lib/erp_tech_svcs/file_support/s3_manager.rb, line 124 def set_permissions(path, canned_acl=:public_read) path = path.sub(%r{^/}, '') bucket.objects[path].acl = canned_acl end
update_file(path, content)
click to toggle source
# File lib/erp_tech_svcs/file_support/s3_manager.rb, line 45 def update_file(path, content) file = FileAsset.where(:name => ::File.basename(path)).where(:directory => ::File.dirname(path)).first acl = (file.is_secured? ? :private : :public_read) unless file.nil? options = (file.nil? ? {} : {:acl => acl, :content_type => file.content_type}) path = path.sub(%r{^/}, '') bucket.objects[path].write(content, options) end
Private Instance Methods
apply_file_asset_properties(file_asset_holder, hash)
click to toggle source
# File lib/erp_tech_svcs/file_support/s3_manager.rb, line 237 def apply_file_asset_properties(file_asset_holder, hash) files = file_asset_holder.files file = files.find { |file| file.directory == hash[:downloadPath] and file.name == hash[:text] } unless file.nil? hash[:isSecured] = file.is_secured? hash[:roles] = file.roles.collect { |r| r.internal_identifier } hash[:iconCls] = 'icon-document_lock' if hash[:isSecured] hash[:size] = file.data_file_size hash[:width] = file.width hash[:height] = file.height hash[:url] = file.data.url end hash end