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