class Sqlar::Sqlar
Attributes
files[RW]
Public Class Methods
new(db_name)
click to toggle source
# File lib/sqlar.rb, line 11 def initialize(db_name) @db_name = db_name begin SQLite3::Database.open(@db_name) do |db| db.results_as_hash = true rows = db.execute("SELECT * FROM sqlar") if rows.nil? create_sqlar() else @files = rows end end rescue SQLite3::Database.new(@db_name) create_sqlar() end end
Public Instance Methods
create_sqlar()
click to toggle source
# File lib/sqlar.rb, line 30 def create_sqlar() SQLite3::Database.open(@db_name) do |db| db.execute("CREATE TABLE sqlar( name TEXT PRIMARY KEY, mode INT, mtime INT, sz INT, data BLOB )" ) end end
extract(name)
click to toggle source
# File lib/sqlar.rb, line 49 def extract(name) SQLite3::Database.open(@db_name) do |db| blob = db.get_first_value("SELECT data FROM sqlar WHERE name = ?",name) path = name.gsub(File.basename(name), '') FileUtils.makedirs(path) f = File.new(path+File.basename(name), "wb") f.write(blob) end end
extract_all()
click to toggle source
# File lib/sqlar.rb, line 59 def extract_all() SQLite3::Database.open(@db_name) do |db| db.results_as_hash = true db.execute("SELECT * FROM sqlar") do |rows| blob = rows['data'] path = rows['name'].gsub(File.basename(rows['name']), '') begin FileUtils.makedirs(path) f = File.new(path+File.basename(rows['name']), "wb") f.chmod(rows['mode']) f.write(blob) File.utime(rows['mtime'], rows['mtime'],File.absolute_path(f.path)) rescue SystemCallError => e puts e ensure f.close if f end end end end
get_blob(file)
click to toggle source
# File lib/sqlar.rb, line 80 def get_blob(file) begin file = File.open file, "rb" stat = file.lstat blob = file.read sqlar_blob = SqlarBlob.new sqlar_blob.name = File.absolute_path(file.path) sqlar_blob.mode = stat.mode sqlar_blob.mtime = stat.mtime.to_i sqlar_blob.sz = file.size sqlar_blob.data = SQLite3::Blob.new blob rescue SystemCallError => e puts e ensure file.close if file end return sqlar_blob end
insert(blob)
click to toggle source
# File lib/sqlar.rb, line 42 def insert(blob) SQLite3::Database.open(@db_name) do |db| blob.name[0] = '' db.execute("INSERT INTO sqlar (name, mode, mtime, sz,data) VALUES (?,?,?,?,?)",blob.name,blob.mode,blob.mtime,blob.sz,blob.data) end end