class MysqlInterface::FilesMgr
Constants
- Basename
- ContentType
- FileTableKeys
- ModifiedAt
- MySqlPrimaryKey
Table Structure
- NodeName
- RawContent
- TablePostFix
Attributes
dbh[RW]
file_table_name[RW]
underlying glue env (probably this)
Public Class Methods
new(glue_env, node_key_value)
click to toggle source
# File lib/glue_envs/mysql/mysql_files_mgr.rb, line 31 def initialize(glue_env, node_key_value) @dbh = self.class.dbh @file_table_name = glue_env.file_mgr_table end
Public Instance Methods
add(node, file_datas)
click to toggle source
# File lib/glue_envs/mysql/mysql_files_mgr.rb, line 36 def add(node, file_datas) filenames = [] file_datas.each do |file_data| filenames << file_data[:src_filename] end filenames.each do |filename| #p File.open(filename, 'rb'){|f| f.read} basename = File.basename(filename) #derive content_type content_type = MimeNew.for_ofc_x(basename) #derive modified time from file modified_at = File.mtime(filename).to_s rb = 'rb' #lazily avoiding escape issues node_name = node.__send__(node.my_GlueEnv.model_key.to_sym) fields_str = "`#{NodeName}`, `#{Basename}`, `#{ContentType}`, `#{ModifiedAt}`, `#{RawContent}`" prep_sql = "REPLACE INTO `#{@file_table_name}` (#{fields_str}) VALUES ( ?, ?, ?, ?, ?)" sth = @dbh.prepare(prep_sql) values_input = [node_name, basename, content_type, modified_at, File.open(filename, rb){|f| f.read}] sth.execute(*values_input) 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/mysql/mysql_files_mgr.rb, line 61 def add_raw_data(node, attach_name, content_type, raw_data, file_modified_at = nil) raise "No Data provided for file" unless raw_data if file_modified_at modified_at = file_modified_at else modified_at = Time.now.to_s end attachment_package = {} node_name = node.__send__(node.my_GlueEnv.model_key.to_sym) fields_str = "`#{NodeName}`, `#{Basename}`, `#{ContentType}`, `#{ModifiedAt}`, `#{RawContent}`" prep_sql = "REPLACE INTO `#{@file_table_name}` (#{fields_str}) VALUES ( ?, ?, ?, ?, ?)" sth = @dbh.prepare(prep_sql) values_input = [node_name, attach_name, content_type, modified_at, raw_data] sth.execute(*values_input) return [attach_name] end
get_attachments_metadata(node)
click to toggle source
todo change name to get_files_metadata
# File lib/glue_envs/mysql/mysql_files_mgr.rb, line 115 def get_attachments_metadata(node) files_md = {} md_list = FileTableKeys md_list.delete(RawContent) md_fields = md_list.join("`, `") model_key = node.my_GlueEnv.model_key sql = "SELECT `#{md_fields}` FROM `#{@file_table_name}` WHERE `#{NodeName}` = '#{node.__send__(model_key.to_sym)}'" sth = @dbh.prepare(sql) rtn = [] sth.execute while row=sth.fetch do rtn << row.to_h end #rtn sth.finish objects = rtn objects.each do |object| obj_md = object #speputs "Obj It: #{obj_md.inspect}" obj_md_file_modified = obj_md["modified_at"] obj_md_content_type = obj_md["content_type"] new_md = {:content_type => obj_md_content_type, :file_modified => obj_md_file_modified} new_md.merge(obj_md) #where does the original metadata go? #p new_md.keys files_md[obj_md["basename"]] = new_md #puts "Obj METADATA: #{new_md.inspect}" end files_md end
get_raw_data(node, file_basename)
click to toggle source
# File lib/glue_envs/mysql/mysql_files_mgr.rb, line 96 def get_raw_data(node, file_basename) model_key = node.my_GlueEnv.model_key sql = "SELECT `#{RawContent}` FROM `#{@file_table_name}` WHERE `#{NodeName}` = '#{node.__send__(model_key.to_sym)}' AND `#{Basename}` = '#{file_basename}'" #puts "Raw Data SQL: #{sql}" sth = @dbh.prepare(sql) rtn = [] sth.execute while row=sth.fetch do rtn << row.to_h end #rtn sth.finish rtn_val = rtn.first || {} #remember in production to sort on internal primary id (once delete revisions works) rtn_val['raw_content'] end
list(node)
click to toggle source
# File lib/glue_envs/mysql/mysql_files_mgr.rb, line 80 def list(node) model_key = node.my_GlueEnv.model_key sql = "SELECT `#{Basename}` FROM `#{@file_table_name}` WHERE `#{NodeName}` = '#{node.__send__(model_key.to_sym)}'" sth = @dbh.prepare(sql) rtn = [] sth.execute while row=sth.fetch do rtn << row.to_h end #rtn sth.finish basenames = rtn.map{|basename_hash| basename_hash.values}.flatten end
subtract(node, file_basenames)
click to toggle source
# File lib/glue_envs/mysql/mysql_files_mgr.rb, line 147 def subtract(node, file_basenames) if file_basenames == :all subtract_all(node) else subtract_some(node, file_basenames) end end
subtract_all(node)
click to toggle source
# File lib/glue_envs/mysql/mysql_files_mgr.rb, line 155 def subtract_all(node) model_key = node.my_GlueEnv.model_key sql = "DELETE FROM `#{@file_table_name}` WHERE `#{NodeName}` = '#{node.__send__(model_key.to_sym)}'" @dbh.do(sql) end
subtract_some(node, file_basenames)
click to toggle source
# File lib/glue_envs/mysql/mysql_files_mgr.rb, line 162 def subtract_some(node, file_basenames) file_basenames = [file_basenames].flatten model_key = node.my_GlueEnv.model_key #probalby get better performance by changing the sql match query #rather than iterating file_basenames.each do |file_basename| sql = "DELETE FROM `#{@file_table_name}` WHERE `#{NodeName}` = '#{node.__send__(model_key.to_sym)}' AND `#{Basename}` = '#{file_basename}'" @dbh.do(sql) end end