Class: Heliodor::DB
- Inherits:
-
Object
- Object
- Heliodor::DB
- Defined in:
- lib/heliodor/db.rb
Overview
Base class for accessing DBs and building queries
Instance Attribute Summary collapse
-
#file ⇒ String
The current value of file.
-
#tsafe ⇒ Bool
When true, uses mutexes for building queries.
Instance Method Summary collapse
-
#delete(table) ⇒ self
Deletes given table.
-
#initialize(file, tsafe = false) ⇒ DB
constructor
A new instance of DB.
- #inspect ⇒ Object
-
#query(table) ⇒ Heliodor::Query
Entry point for building queries.
-
#tables ⇒ Array<String>
Returns array of table names.
-
#write(dat) ⇒ self
Writes database to file.
Constructor Details
#initialize(file, tsafe = false) ⇒ DB
Returns a new instance of DB.
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/heliodor/db.rb', line 7 def initialize(file, tsafe = false) @tsafe = tsafe @mutex = Mutex.new @dtable = { 'heliodor_data' => { 'name' => 'Heliodor', 'version' => Heliodor::VERSION, 'bson_version' => Gem.loaded_specs['bson'].version.version, 'last_write' => DateTime.now.strftime, 'ruby_version' => RUBY_VERSION, 'ruby_patchlevel' => RUBY_PATCHLEVEL.to_s, 'ruby_platform' => RUBY_PLATFORM } } @file = File.(file.to_s) if File.exist?(@file) f = Zlib::GzipReader.open(File.(@file)) bb = BSON::ByteBuffer.new(f.read) @dat = Hash.from_bson(bb) f.close else f = Zlib::GzipWriter.open(File.(@file)) f.write(@dtable.to_bson.to_s) @dat = @dtable.clone f.close end end |
Instance Attribute Details
#file ⇒ String
Returns the current value of file.
4 5 6 |
# File 'lib/heliodor/db.rb', line 4 def file @file end |
#tsafe ⇒ Bool
When true, uses mutexes for building queries
4 5 6 |
# File 'lib/heliodor/db.rb', line 4 def tsafe @tsafe end |
Instance Method Details
#delete(table) ⇒ self
Deletes given table
50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/heliodor/db.rb', line 50 def delete(table) if @tsafe @mutex.synchronize do @dat.delete(table) write(@dat) end else write(@dat) @dat.delete(table) end end |
#inspect ⇒ Object
80 81 82 |
# File 'lib/heliodor/db.rb', line 80 def inspect %(#<Heliodor::DB:#{object_id.to_s(16)} @file='#{@file}'>) end |
#query(table) ⇒ Heliodor::Query
Entry point for building queries
37 38 39 40 41 42 43 44 45 |
# File 'lib/heliodor/db.rb', line 37 def query(table) if @tsafe @mutex.synchronize do Heliodor::Query.new(self, table, @dat) end else Heliodor::Query.new(self, table, @dat) end end |
#tables ⇒ Array<String>
Returns array of table names
64 65 66 |
# File 'lib/heliodor/db.rb', line 64 def tables @dat.keys end |
#write(dat) ⇒ self
Writes database to file
70 71 72 73 74 75 76 77 78 |
# File 'lib/heliodor/db.rb', line 70 def write(dat) @dat = dat File.truncate(@file, 0) if File.exist?(@file) Zlib::GzipWriter.open(File.(@file)) do |f| f.write(dat.merge(@dtable).to_bson.to_s) f.close end self end |