Class: Sqlar::Sqlar

Inherits:
Object
  • Object
show all
Defined in:
lib/sqlar.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(db_name) ⇒ Sqlar

Returns a new instance of Sqlar.



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 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

Instance Attribute Details

#filesObject

Returns the value of attribute files.



9
10
11
# File 'lib/sqlar.rb', line 9

def files
  @files
end

Instance Method Details

#create_sqlarObject



30
31
32
33
34
35
36
37
38
39
40
# 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) ⇒ Object



49
50
51
52
53
54
55
56
57
# 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_allObject



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# 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) ⇒ Object



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# 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) ⇒ Object



42
43
44
45
46
47
# 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