# File lib/bio/io/flatfile/index.rb 1247 def primary 1248 unless @primary then 1249 self.primary = @config['primary_namespace'] 1250 end 1251 @primary 1252 end
class Bio::FlatFileIndex::DataBank
databank
Internal use only.
Attributes
always_check[R]
dbname[R]
index_type[R]
Public Class Methods
filename(dbname)
click to toggle source
# File lib/bio/io/flatfile/index.rb 1131 def self.filename(dbname) 1132 File.join(dbname, 'config.dat') 1133 end
new(name, idx_type = nil, hash = {})
click to toggle source
# File lib/bio/io/flatfile/index.rb 1148 def initialize(name, idx_type = nil, hash = {}) 1149 @dbname = name.dup 1150 @dbname.freeze 1151 @bdb = nil 1152 1153 @always_check = true 1154 self.index_type = (hash['index'] or idx_type) 1155 1156 if @bdb then 1157 @config = BDBwrapper.new(@dbname, 'config') 1158 @bdb_fileids = BDBwrapper.new(@dbname, 'fileids') 1159 @nsclass_pri = BDB_1::PrimaryNameSpace 1160 @nsclass_sec = BDB_1::SecondaryNameSpace 1161 else 1162 @config = hash 1163 @nsclass_pri = Flat_1::PrimaryNameSpace 1164 @nsclass_sec = Flat_1::SecondaryNameSpace 1165 end 1166 true 1167 end
open(*arg)
click to toggle source
# File lib/bio/io/flatfile/index.rb 1144 def self.open(*arg) 1145 self.read(*arg) 1146 end
read(name, mode = 'rb', *bdbarg)
click to toggle source
# File lib/bio/io/flatfile/index.rb 1135 def self.read(name, mode = 'rb', *bdbarg) 1136 f = File.open(filename(name), mode) 1137 hash = file2hash(f) 1138 f.close 1139 db = self.new(name, nil, hash) 1140 db.bdb_open(*bdbarg) 1141 db 1142 end
Public Instance Methods
always_check=(bool)
click to toggle source
high level methods
# File lib/bio/io/flatfile/index.rb 1305 def always_check=(bool) 1306 if bool then 1307 @always_check = true 1308 else 1309 @always_check = false 1310 end 1311 end
bdb_open(*bdbarg)
click to toggle source
# File lib/bio/io/flatfile/index.rb 1204 def bdb_open(*bdbarg) 1205 if @bdb then 1206 @config.close 1207 @config.open(*bdbarg) 1208 @bdb_fileids.close 1209 @bdb_fileids.open(*bdbarg) 1210 true 1211 else 1212 nil 1213 end 1214 end
check_consistency()
click to toggle source
# File lib/bio/io/flatfile/index.rb 1374 def check_consistency 1375 fileids.check_all 1376 end
close()
click to toggle source
# File lib/bio/io/flatfile/index.rb 1234 def close 1235 DEBUG.print "DataBank: close #{@dbname}\n" 1236 primary.close 1237 secondary.close 1238 fileids.close 1239 if @bdb then 1240 @config.close 1241 @bdb_fileids.close 1242 end 1243 nil 1244 end
fileids()
click to toggle source
# File lib/bio/io/flatfile/index.rb 1288 def fileids 1289 unless @fileids then 1290 init_fileids 1291 end 1292 @fileids 1293 end
format()
click to toggle source
# File lib/bio/io/flatfile/index.rb 1281 def format 1282 unless @format then 1283 self.format = @config['format'] 1284 end 1285 @format 1286 end
format=(str)
click to toggle source
# File lib/bio/io/flatfile/index.rb 1277 def format=(str) 1278 @format = str.to_s.dup 1279 end
get_flatfile_data(f, pos, length)
click to toggle source
# File lib/bio/io/flatfile/index.rb 1314 def get_flatfile_data(f, pos, length) 1315 fi = fileids[f.to_i] 1316 if @always_check then 1317 raise "flatfile #{fi.filename.inspect} may be modified" unless fi.check 1318 end 1319 fi.get(pos.to_i, length.to_i) 1320 end
index_type=(str)
click to toggle source
# File lib/bio/io/flatfile/index.rb 1171 def index_type=(str) 1172 case str 1173 when MAGIC_BDB 1174 @index_type = MAGIC_BDB 1175 @bdb = true 1176 unless defined?(BDB) 1177 raise RuntimeError, "Berkeley DB support not found" 1178 end 1179 when MAGIC_FLAT, '', nil, false 1180 @index_type = MAGIC_FLAT 1181 @bdb = false 1182 else 1183 raise 'unknown or unsupported index type' 1184 end 1185 end
init_fileids()
click to toggle source
# File lib/bio/io/flatfile/index.rb 1295 def init_fileids 1296 if @bdb then 1297 @fileids = FileIDs.new('', @bdb_fileids) 1298 else 1299 @fileids = FileIDs.new('fileid_', @config) 1300 end 1301 @fileids 1302 end
primary()
click to toggle source
parameters
primary=(pri_name)
click to toggle source
# File lib/bio/io/flatfile/index.rb 1254 def primary=(pri_name) 1255 if !pri_name or pri_name.empty? then 1256 pri_name = 'UNIQUE' 1257 end 1258 @primary = @nsclass_pri.new(@dbname, pri_name) 1259 @primary 1260 end
search_all(key)
click to toggle source
# File lib/bio/io/flatfile/index.rb 1341 def search_all(key) 1342 s = search_all_get_unique_id(key) 1343 search_primary(*s) 1344 end
search_all_get_unique_id(key)
click to toggle source
# File lib/bio/io/flatfile/index.rb 1322 def search_all_get_unique_id(key) 1323 s = secondary.search(key) 1324 p = primary.include?(key) 1325 s.push p if p 1326 s.sort! 1327 s.uniq! 1328 s 1329 end
search_namespaces(key, *names)
click to toggle source
# File lib/bio/io/flatfile/index.rb 1369 def search_namespaces(key, *names) 1370 s = search_namespaces_get_unique_id(key, *names) 1371 search_primary(*s) 1372 end
search_namespaces_get_unique_id(key, *names)
click to toggle source
# File lib/bio/io/flatfile/index.rb 1353 def search_namespaces_get_unique_id(key, *names) 1354 if names.include?(primary.name) then 1355 n2 = names.dup 1356 n2.delete(primary.name) 1357 p = primary.include?(key) 1358 else 1359 n2 = names 1360 p = nil 1361 end 1362 s = secondary.search_names(key, *n2) 1363 s.push p if p 1364 s.sort! 1365 s.uniq! 1366 s 1367 end
search_primary(*arg)
click to toggle source
# File lib/bio/io/flatfile/index.rb 1331 def search_primary(*arg) 1332 r = Results.new 1333 arg.each do |x| 1334 a = primary.search(x) 1335 # a is empty or a.size==1 because primary key must be unique 1336 r.store(x, get_flatfile_data(*a[0])) unless a.empty? 1337 end 1338 r 1339 end
search_primary_get_unique_id(key)
click to toggle source
# File lib/bio/io/flatfile/index.rb 1346 def search_primary_get_unique_id(key) 1347 s = [] 1348 p = primary.include?(key) 1349 s.push p if p 1350 s 1351 end
secondary()
click to toggle source
# File lib/bio/io/flatfile/index.rb 1262 def secondary 1263 unless @secondary then 1264 self.secondary = @config['secondary_namespaces'] 1265 end 1266 @secondary 1267 end
secondary=(sec_names)
click to toggle source
# File lib/bio/io/flatfile/index.rb 1269 def secondary=(sec_names) 1270 if !sec_names then 1271 sec_names = [] 1272 end 1273 @secondary = NameSpaces.new(@dbname, @nsclass_sec, sec_names) 1274 @secondary 1275 end
to_s()
click to toggle source
# File lib/bio/io/flatfile/index.rb 1187 def to_s 1188 a = "" 1189 a << "index\t#{@index_type}\n" 1190 1191 unless @bdb then 1192 a << "format\t#{@format}\n" 1193 @fileids.each_with_index do |x, i| 1194 a << "#{x.to_s(i)}\n" 1195 end 1196 a << "primary_namespace\t#{@primary.name}\n" 1197 a << "secondary_namespaces\t" 1198 a << @secondary.names.join("\t") 1199 a << "\n" 1200 end 1201 a 1202 end
write(mode = 'wb', *bdbarg)
click to toggle source
# File lib/bio/io/flatfile/index.rb 1216 def write(mode = 'wb', *bdbarg) 1217 unless FileTest.directory?(@dbname) then 1218 Dir.mkdir(@dbname) 1219 end 1220 f = File.open(self.class.filename(@dbname), mode) 1221 f.write self.to_s 1222 f.close 1223 1224 if @bdb then 1225 bdb_open(*bdbarg) 1226 @config['format'] = format 1227 @config['primary_namespace'] = @primary.name 1228 @config['secondary_namespaces'] = @secondary.names.join("\t") 1229 @bdb_fileids.writeback_array('', fileids, *bdbarg) 1230 end 1231 true 1232 end