class FilesystemInterface::FilesMgr
Attributes
attachment_location[RW]
attachment_packages[RW]
Public Class Methods
get_att_doc(node)
click to toggle source
# File lib/glue_envs/filesystem/filesystem_files_mgr.rb, line 41 def self.get_att_doc(node) root_path = node.my_GlueEnv.user_datastore_location #my_cat dependency node_loc = node._user_data[node.my_GlueEnv.node_key] node_path = File.join(root_path, node_loc) model_basenames = Dir.working_entries(node_path) filenames = model_basenames.map{|b| File.join(node_path, TkEscape.escape(b))} end
new(node_env, node_key)
click to toggle source
# File lib/glue_envs/filesystem/filesystem_files_mgr.rb, line 50 def initialize(node_env, node_key) #for bufs node_key is the value of :my_category @node_key = node_key @attachment_location = File.join(node_env.user_datastore_location, node_key.to_s) end
Public Instance Methods
add(node, file_datas)
click to toggle source
TODO: Is passing node in methods duplicative now that the moab FileMgr is bound to an env at initialization?
# File lib/glue_envs/filesystem/filesystem_files_mgr.rb, line 58 def add(node, file_datas) filenames = [] file_datas.each do |file_data| #TODO Validate file data before saving filenames << file_data[:src_filename] end filenames.each do |filename| my_dest_basename = TkEscape.escape(File.basename(filename)) node_dir = @attachment_location #File.join(node.my_GlueEnv.user_datastore_selector, node.my_category) #TODO: this should be node id, not my cat my_dest = File.join(node_dir, my_dest_basename) #FIXME: obj.attached_files is broken, list_attached_files should work #@attached_files << my_dest same_file = filename if filename == my_dest @@log.debug {"File model attachments:"} if @@log.debug? @@log.debug { "Copy #{filename} to #{my_dest} if #{same_file.nil?}"} if @@log.debug? #was breaking if the dest path didn't exist FileUtils.mkdir_p(File.dirname(my_dest)) unless File.exist?(File.dirname(my_dest)) FileUtils.cp(filename, my_dest, :preserve => true, :verbose => false ) unless same_file #self.file_metadata = {filename => {'file_modified' => File.mtime(filename).to_s}} end filenames.map {|f| TkEscape.escape(File.basename(f))} #return basenames end
add_raw_data(node, attach_name, content_type, raw_data, file_modified_at = nil)
click to toggle source
# File lib/glue_envs/filesystem/filesystem_files_mgr.rb, line 82 def add_raw_data(node, attach_name, content_type, raw_data, file_modified_at = nil) raise "No Data provided for file" unless raw_data #bia_class = @model_actor[:attachment_actor_class] file_metadata = {} if file_modified_at file_metadata['file_modified'] = file_modified_at else file_metadata['file_modified'] = Time.now.to_s end file_metadata['content_type'] = content_type #TODO: is unknown content handled gracefully? attachment_package = {} esc_attach_name = TkEscape.escape(attach_name) node_path = @attachment_location FileUtils.mkdir_p(node_path) unless File.exist?(node_path) raw_data_filename = File.join(node_path, esc_attach_name) File.open(raw_data_filename, 'wb'){|f| f.write(raw_data)} if file_modified_at File.utime(Time.parse(file_modified_at), Time.parse(file_modified_at), raw_data_filename) else file_modified_at = File.mtime(raw_data_filename).to_s end [esc_attach_name] end
get_attachments_metadata(node)
click to toggle source
# File lib/glue_envs/filesystem/filesystem_files_mgr.rb, line 139 def get_attachments_metadata(node) att_md = {} node_dir = @attachment_location att_basenames = Dir.working_entries(node_dir) att_basenames.each do |att| file_md = {} filename = File.join(node_dir, att) file_md[:file_modified] = File.mtime(filename).to_s file_md[:content_type] = MimeNew.for_ofc_x(filename) att_md[att.to_sym] = file_md end att_md end
get_raw_data(node, model_basename)
click to toggle source
# File lib/glue_envs/filesystem/filesystem_files_mgr.rb, line 132 def get_raw_data(node, model_basename) node_dir = @attachment_location filename = File.join(node_dir, model_basename) return nil unless File.exist?(filename) File.open(filename, "r"){|f| f.read} end
list(node)
click to toggle source
Not used and I don't think it will work anyway
# File lib/glue_envs/filesystem/filesystem_files_mgr.rb, line 155 def list(node) Dir.working_entries(@attachment_location) end
subtract(node, model_basenames)
click to toggle source
TODO Document the :all shortcut somewhere
# File lib/glue_envs/filesystem/filesystem_files_mgr.rb, line 107 def subtract(node, model_basenames) if model_basenames == :all subtract_all(node) else subtract_some(node, model_basenames) end end
subtract_all(node)
click to toggle source
TODO: make private
# File lib/glue_envs/filesystem/filesystem_files_mgr.rb, line 125 def subtract_all(node) node_path = @attachment_location attached_entries = Dir.working_entries(node_path) attached_filenames = attached_entries.map{|e| File.join(node_path, e)} FileUtils.rm(attached_filenames) end
subtract_some(node, file_basenames)
click to toggle source
TODO: make private
# File lib/glue_envs/filesystem/filesystem_files_mgr.rb, line 116 def subtract_some(node, file_basenames) file_basenames = [file_basenames].flatten model_key = node.my_GlueEnv.model_key node_path = @attachment_location filenames = file_basenames.map{|b| File.join(node_path, TkEscape.escape(b))} FileUtils.rm_f(filenames) end