rbbt-util 5.14.26 → 5.14.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e2e5f1318aa0869985d9387dc3ed40c68ea0f6f6
4
- data.tar.gz: 521b91ab2b83d9665c18e02c79e5685b6e4290ad
3
+ metadata.gz: 46848d2c59e5582f44b698be77f427d886682c4f
4
+ data.tar.gz: c3ae39b55c1f9d44975679aa2916cdcb198cd7e1
5
5
  SHA512:
6
- metadata.gz: 7599d8f628c59747e0aead2b7bd2583d2a3800cf73d27b7b1bea7811726713a4dc77c878280814889ef87ce616f4e1dff4725bd0e0590394483c306d45c1274a
7
- data.tar.gz: 0457ae9ef9d490080271f1749b1e97eb68fc74cb0762a8e4944b01fd5f52725f6b16ef1d1f4c44487720d9491c9ae0cab8382fd6b96f0ba94fac8e296897cd4a
6
+ metadata.gz: 6fe50e3bb01ed9b718f71a19f29b5697af0aacbc9ce602b93f802ba1400074491782f32774cb56d832c50befd99386566732e8a9941ba2500957e2f66ef1d9b5
7
+ data.tar.gz: 600ac43a4bd563779943a3061a151d3dacb5b3d2cfa5ff98d7f90f600bc29578bd34c3161af06d8d97ec7d32f1c9896f21518ff0cd2837f00f569d2348894d6c
@@ -1 +1,3 @@
1
- require 'zen-grids'
1
+ #require 'zen-grids'
2
+ require 'compass'
3
+ require 'compass-susy'
@@ -1,6 +1,10 @@
1
1
  module AnnotatedArray
2
2
  attr_accessor :list_id
3
3
 
4
+ def to_a
5
+ self.collect{|i| i }
6
+ end
7
+
4
8
  def double_array
5
9
  AnnotatedArray === self.send(:[], 0, true)
6
10
  end
@@ -11,17 +11,36 @@ module Association
11
11
  end
12
12
 
13
13
  def self.add_reciprocal(tsv)
14
-
15
- new = tsv.dup
14
+ tsv = tsv.type == :double ? tsv : tsv.to_double
15
+ new = TSV.open(tsv.dumper_stream)
16
16
  tsv.with_unnamed do
17
17
  tsv.through do |source, values|
18
- Misc.zip_fields(values).each do |_target_values|
19
- target, *target_values = _target_values
20
- if new[target].nil?
21
- new[target] = [[source]] + target_values.collect{|v| [v] }
22
- else
23
- new[target].first << source
24
- new[target][1..-1].zip(target_values).each{|list,elem| list << elem }
18
+ next if values.flatten.compact.empty?
19
+ if values.length > 1
20
+ Misc.zip_fields(values).each do |_target_values|
21
+ target, *target_values = _target_values
22
+ if new[target].nil?
23
+ new_values = [[source]] + target_values.collect{|v| [v] }
24
+ new[target] = new_values
25
+ else
26
+ new_values = new[target].collect{|l| l.dup }
27
+ targets = new_values.shift
28
+ targets << source
29
+ rest = new_values.zip(target_values).collect do |o,n|
30
+ o << n
31
+ o
32
+ end
33
+ new_values = [targets] + rest
34
+ new[target] = new_values
35
+ end
36
+ end
37
+ else
38
+ values.first.each do |target|
39
+ if new[target].nil?
40
+ new[target] = [[source]]
41
+ else
42
+ new[target] = [new[target][0] + [source]]
43
+ end
25
44
  end
26
45
  end
27
46
  end
@@ -61,7 +80,7 @@ module Association
61
80
  end
62
81
 
63
82
  #{{{ Open
64
-
83
+
65
84
  def self.open_tsv(file, source, source_header, target, target_header, all_fields, options)
66
85
  fields = Misc.process_options options, :fields
67
86
  fields ||= all_fields.dup
@@ -74,7 +93,6 @@ module Association
74
93
  :persist => false,
75
94
  :key_field => all_fields.index(source),
76
95
  :fields => fields.collect{|f| String === f ? all_fields.index(f): f },
77
- #:type => (options[:type] and options[:type].to_sym == :flat) ? :flat : nil,
78
96
  :unnamed => true,
79
97
  :merge => (options[:merge] or (options[:type] and options[:type].to_sym == :flat) ? false : true)
80
98
  })
@@ -88,7 +106,6 @@ module Association
88
106
  if file.fields == field_headers
89
107
  file
90
108
  else
91
- iii :reorder
92
109
  file.reorder(source, field_headers)
93
110
  end
94
111
  else
@@ -200,7 +217,7 @@ module Association
200
217
  end
201
218
 
202
219
  def self.load_tsv(file, options)
203
- undirected = Misc.process_options options, :undirected
220
+ undirected = options[:undirected]
204
221
 
205
222
  case file
206
223
  when Proc
@@ -261,7 +278,7 @@ module Association
261
278
 
262
279
  def self.index(file, options = {}, persist_options = nil)
263
280
  options = {} if options.nil?
264
- options = Misc.add_defaults options, :persist => true
281
+ options = Misc.add_defaults options, :persist => true, :undirected => false
265
282
  persist_options = Misc.pull_keys options, persist_options if persist_options.nil?
266
283
 
267
284
  Persist.persist_tsv(file, nil, options, {:persist => true, :prefix => "Association Index"}.merge(persist_options).merge(:engine => TokyoCabinet::BDB, :serializer => :clean)) do |assocs|
@@ -270,7 +287,10 @@ module Association
270
287
  tsv = TSV === file ? file : Association.open(file, options, persist_options.merge(:persist => false))
271
288
 
272
289
  fields = tsv.fields
273
- key_field = [tsv.key_field, fields.first.split(":").last, undirected ? "undirected" : nil].compact * "~"
290
+ source_field = tsv.key_field
291
+ target_field = fields.first.split(":").last
292
+
293
+ key_field = [source_field, target_field, undirected ? "undirected" : nil].compact * "~"
274
294
 
275
295
  TSV.setup(assocs, :key_field => key_field, :fields => fields[1..-1], :type => :list, :serializer => :list)
276
296
 
@@ -299,7 +319,7 @@ module Association
299
319
  when :double
300
320
  tsv.through do |source, values|
301
321
  next if values.empty?
302
- next if source.nil?
322
+ next if source.nil? or source.empty?
303
323
  next if values.empty?
304
324
  targets = values.first
305
325
  rest = Misc.zip_fields values[1..-1]
@@ -309,9 +329,15 @@ module Association
309
329
  targets.zip(rest * targets.length)
310
330
 
311
331
  annotations.each do |target, info|
312
- next if target.nil?
332
+ next if target.nil? or target.empty?
313
333
  key = [source, target] * "~"
314
- assocs[key] = info
334
+ if assocs[key].nil? or info.nil?
335
+ assocs[key] = info
336
+ else
337
+ old_info = assocs[key]
338
+ info = old_info.zip(info).collect{|p| p * ";;" }
339
+ assocs[key] = info
340
+ end
315
341
  end
316
342
  end
317
343
  else
@@ -47,6 +47,7 @@ module Association
47
47
  end
48
48
 
49
49
  def match(entity)
50
+ return entity.inject([]){|acc,e| acc.concat match(e); acc } if Array === entity
50
51
  return [] if entity.nil?
51
52
  prefix(entity + "~")
52
53
  end
@@ -7,6 +7,21 @@ module AssociationItem
7
7
  annotation :database
8
8
  annotation :reverse
9
9
 
10
+ property :name => :single do
11
+ [source_entity, target_entity].collect{|e| e.respond_to?(:name)? e.name || e : e } * "~"
12
+ end
13
+
14
+ property :full_name => :single do
15
+ database ? [database, name] * ":" : name
16
+ end
17
+
18
+ property :invert => :single do
19
+ s,_sep,t= self.partition "~"
20
+ inverted = self.annotate([t,s] * _sep)
21
+ inverted.reverse = ! reverse
22
+ inverted
23
+ end
24
+
10
25
  property :namespace => :both do
11
26
  knowledge_base.namespace
12
27
  end
@@ -44,6 +59,10 @@ module AssociationItem
44
59
  knowledge_base.annotate self.target, type, database #if self.target.any?
45
60
  end
46
61
 
62
+ property :undirected => :both do
63
+ knowledge_base.undirected(database)
64
+ end
65
+
47
66
  property :source_entity => :array2single do
48
67
  type = reverse ? knowledge_base.target(database) : knowledge_base.source(database)
49
68
  knowledge_base.annotate self.source, type #if self.source.any?
@@ -84,18 +103,25 @@ module AssociationItem
84
103
  tsv
85
104
  end
86
105
 
87
- def self.incidence(pairs, key_field = nil)
106
+ def self.incidence(pairs, key_field = nil, &block)
88
107
  matrix = {}
89
108
  targets = []
90
109
  sources = []
91
110
  matches = {}
92
111
 
93
- pairs.each do |p|
112
+ pairs.inject([]){|acc,m| acc << m; acc << m.invert if m.respond_to?(:undirected) and m.undirected; acc }.each do |p|
94
113
  s, sep, t = p.partition "~"
114
+
95
115
  sources << s
96
116
  targets << t
97
- matches[s] ||= Hash.new{false}
98
- matches[s][t] = true
117
+ if block_given?
118
+ matches[s] ||= Hash.new{nil}
119
+ value = block.call p
120
+ matches[s][t] = value unless value.nil? or (mv = matches[s][t] and value > mv)
121
+ else
122
+ matches[s] ||= Hash.new{true}
123
+ matches[s][t] ||= true
124
+ end
99
125
  end
100
126
 
101
127
  sources.uniq!
@@ -108,6 +134,18 @@ module AssociationItem
108
134
  defined?(TSV)? TSV.setup(matrix, :key_field => (key_field || "Source") , :fields => targets, :type => :list) : matrix
109
135
  end
110
136
 
137
+ def self.adjacency(pairs, key_field = nil, &block)
138
+ incidence = incidence(pairs, key_field, &block)
139
+
140
+ targets = incidence.fields
141
+ adjacency = TSV.setup({}, :key_field => incidence.key_field, :fields => ["Target"], :type => :double)
142
+ TSV.traverse incidence, :into => adjacency, :unnamed => true do |k,values|
143
+ target_values = targets.zip(values).reject{|t,v| v.nil? }.collect{|t,v| [t,v]}
144
+ next if target_values.empty?
145
+ [k, Misc.zip_fields(target_values)]
146
+ end
147
+ end
148
+
111
149
  def self._select_match(orig, elem)
112
150
  if Array === orig and Array === elem
113
151
  (orig & elem).any?
@@ -260,26 +260,32 @@ class KnowledgeBase
260
260
 
261
261
  #{{{ Identify
262
262
 
263
+
264
+ def database_identify_index(database, target)
265
+ if database.identifier_files.any?
266
+ id_file = database.identifier_files.first
267
+ identifier_fields = TSV.parse_header(id_file).all_fields
268
+ if identifier_fields.include? target
269
+ TSV.index(database.identifiers, :target => target, :persist => true, :order => true)
270
+ else
271
+ {}
272
+ end
273
+ else
274
+ if TSV.parse_header(Organism.identifiers(namespace)).all_fields.include? target
275
+ Organism.identifiers(namespace).index(:target => target, :persist => true, :order => true)
276
+ else
277
+ {}
278
+ end
279
+ end
280
+ end
281
+
263
282
  def identify_source(name, entity)
264
283
  database = get_database(name, :persist => true)
265
284
  return entity if Symbol === entity or (String === entity and database.include? entity)
266
285
  source = source(name)
267
286
  @identifiers[name] ||= {}
268
287
  @identifiers[name]['source'] ||= begin
269
- if database.identifier_files.any?
270
- identifier_fields = TSV.parse_header(database.identifier_files.first).all_fields
271
- if identifier_fields.include? source
272
- TSV.index(database.identifiers, :target => source, :persist => true, :order => true)
273
- else
274
- {}
275
- end
276
- else
277
- if TSV.parse_header(Organism.identifiers(namespace)).all_fields.include? source
278
- Organism.identifiers(namespace).index(:target => source, :persist => true, :order => true)
279
- else
280
- {}
281
- end
282
- end
288
+ database_identify_index(database, source)
283
289
  end
284
290
 
285
291
  if Array === entity
@@ -287,37 +293,25 @@ class KnowledgeBase
287
293
  p.compact.first
288
294
  }
289
295
  else
290
- @identifiers[name]['source'][entity] || entity
296
+ @identifiers[name]['source'][entity]
291
297
  end
292
298
  end
293
299
 
294
300
  def identify_target(name, entity)
295
301
  database = get_database(name, :persist => true)
296
- return entity if Symbol === entity
302
+ return entity if Symbol === entity or (String === entity and database.values.collect{|v| v.first}.compact.flatten.include?(entity))
297
303
  target = target(name)
298
304
 
299
305
  @identifiers[name] ||= {}
300
306
  @identifiers[name]['target'] ||= begin
301
- if database.identifier_files.any?
302
- if TSV.parse_header(database.identifier_files.first).all_fields.include? target
303
- TSV.index(database.identifiers, :target => target, :persist => true)
304
- else
305
- {}
306
- end
307
- else
308
- if TSV.parse_header(Organism.identifiers(namespace)).all_fields.include? target
309
- Organism.identifiers(namespace).index(:target => target, :persist => true)
310
- else
311
- database.index(:target => database.fields.first, :fields => [database.fields.first], :persist => true)
312
- end
313
- end
307
+ database_identify_index(database, target)
314
308
  end
315
309
  if Array === entity
316
310
  @identifiers[name]['target'].chunked_values_at(entity).zip(entity).collect{|p|
317
311
  p.compact.first
318
312
  }
319
313
  else
320
- @identifiers[name]['target'][entity] || entity
314
+ @identifiers[name]['target'][entity]
321
315
  end
322
316
  end
323
317
 
@@ -325,8 +319,22 @@ class KnowledgeBase
325
319
  identify_source(name, entity) || identify_target(name, entity)
326
320
  end
327
321
 
322
+ def normalize(entity)
323
+ source_matches = all_databases.collect{|d|
324
+ identify_source(d, entity)
325
+ }.flatten.compact.uniq
326
+ return entity if source_matches.include? entity
327
+
328
+ target_matches = all_databases.collect{|d|
329
+ identify_target(d, entity)
330
+ }.flatten.compact.uniq
331
+ return entity if target_matches.include? entity
332
+
333
+ (source_matches + target_matches).first
334
+ end
335
+
328
336
  #{{{ Query
329
-
337
+
330
338
  def all(name, options={})
331
339
  repo = get_index name, options
332
340
  setup name, repo.keys
@@ -343,7 +351,7 @@ class KnowledgeBase
343
351
  end
344
352
 
345
353
  def neighbours(name, entity)
346
- if undirected(name)
354
+ if undirected(name) and source(name) == target(name)
347
355
  IndiferentHash.setup({:children => children(name, entity)})
348
356
  else
349
357
  IndiferentHash.setup({:parents => parents(name, entity), :children => children(name, entity)})
@@ -387,4 +395,24 @@ class KnowledgeBase
387
395
  entities
388
396
  end
389
397
  end
398
+
399
+ def pair_matches(source, target, undirected = nil)
400
+ all_databases.inject([]){|acc,database|
401
+ match = [source, target] * "~"
402
+ index = get_index(database)
403
+
404
+ if index.include? match
405
+ acc << setup(database, match)
406
+
407
+ elsif undirected or undirected(database)
408
+ inv = [target, source] * "~"
409
+ if index.include? inv
410
+ setup(database, inv)
411
+ acc << inv
412
+ end
413
+ end
414
+
415
+ acc
416
+ }
417
+ end
390
418
  end
data/lib/rbbt/resource.rb CHANGED
@@ -28,7 +28,7 @@ module Resource
28
28
  base
29
29
  end
30
30
 
31
- attr_accessor :pkgdir, :subdir, :resources, :rake_dirs, :remote_server
31
+ attr_accessor :pkgdir, :subdir, :resources, :rake_dirs, :remote_server, :search_paths
32
32
 
33
33
  def root()
34
34
  Path.setup @subdir || "", @pkgdir, self
@@ -122,11 +122,12 @@ module Resource
122
122
  raise "Resource is missing and does not seem to be claimed: #{ self } -- #{ path } "
123
123
  end
124
124
 
125
- final_path = path.respond_to?(:find) ? (force ? path.find(:user) : path.find) : path
125
+ final_path = path.respond_to?(:find) ? (force ? path.find(:default) : path.find) : path
126
126
  if not File.exists? final_path or force
127
127
  Log.medium "Producing: #{ final_path }"
128
128
  lock_filename = Persist.persistence_path(final_path, {:dir => Resource.lock_dir})
129
129
  Misc.lock lock_filename do
130
+ FileUtils.rm_rf final_path if force and File.exists? final_path
130
131
  if not File.exists? final_path or force
131
132
  (remote_server and get_from_server(path, final_path)) or
132
133
  begin
@@ -142,7 +143,17 @@ module Resource
142
143
  when 1
143
144
  content.call final_path
144
145
  end
145
- Misc.sensiblewrite(final_path, data) unless data.nil?
146
+ case data
147
+ when String, IO
148
+ Misc.sensiblewrite(final_path, data)
149
+ when Array
150
+ Misc.sensiblewrite(final_path, data * "\n")
151
+ when TSV
152
+ Misc.sensiblewrite(final_path, data.dumper_stream)
153
+ when nil
154
+ else
155
+ raise "Unkown object produced: #{Misc.fingerprint data}"
156
+ end
146
157
  when :rake
147
158
  run_rake(path, content, rake_dir)
148
159
  when :install
@@ -91,9 +91,10 @@ module Path
91
91
 
92
92
  def find(where = nil, caller_lib = nil, paths = nil)
93
93
  @path ||= {}
94
- key = Misc.digest([where, caller_lib, paths].inspect)
94
+ rsearch_paths = (resource and resource.respond_to?(:search_paths)) ? resource.search_paths : nil
95
+ key = Misc.digest([where, caller_lib, rsearch_paths, paths].inspect)
95
96
  @path[key] ||= begin
96
- paths = (self.search_paths || SEARCH_PATHS).merge(paths || {})
97
+ paths = [paths, rsearch_paths, self.search_paths, SEARCH_PATHS].reverse.compact.inject({}){|acc,h| acc.merge! h; acc }
97
98
  where = paths[:default] if where == :default
98
99
  return self if located?
99
100
  if self.match(/(.*?)\/(.*)/)
@@ -131,11 +132,14 @@ module Path
131
132
  libdir = "NOLIBDIR"
132
133
  end
133
134
  pwd = FileUtils.pwd
134
- path = paths[where].
135
+ path = paths[where]
136
+ path = File.join(path, "{PATH}") unless path.include? "PATH}" or path.include? "{BASENAME}"
137
+ path = path.
135
138
  sub('{PKGDIR}', pkgdir).
136
139
  sub('{PWD}', pwd).
137
140
  sub('{TOPLEVEL}', toplevel).
138
141
  sub('{SUBPATH}', subpath).
142
+ sub('{BASENAME}', File.basename(self)).
139
143
  sub('{PATH}', self).
140
144
  sub('{LIBDIR}', libdir) #, @pkgdir, @resource, @search_paths
141
145
 
@@ -223,7 +227,7 @@ module Path
223
227
  end
224
228
 
225
229
  def tsv(*args)
226
- TSV.open(self.produce, *args)
230
+ TSV.open(self.produce.find, *args)
227
231
  end
228
232
 
229
233
  def tsv_options(options = {})
data/lib/rbbt/tsv.rb CHANGED
@@ -73,12 +73,13 @@ module TSV
73
73
 
74
74
  open_options = Misc.pull_keys options, :open
75
75
 
76
- stream = get_stream source, open_options
76
+ stream = get_stream source, options.merge(open_options)
77
77
  parse stream, data, options
78
78
 
79
79
  data.filename = filename.to_s unless filename.nil?
80
+
80
81
  if data.identifiers.nil? and Path === filename and filename.identifier_file_path
81
- data.identifiers = filename.identifier_file_path.to_s
82
+ data.identifiers = filename.identifier_file_path.find if filename.identifier_file_path.exists?
82
83
  end
83
84
 
84
85
  data
@@ -493,10 +493,10 @@ module TSV
493
493
  when (TSV === identifiers.first or identifiers.empty?)
494
494
  identifiers
495
495
  else
496
- identifiers.collect{|f| Path === f ? f : Path.setup(f, nil, namespace)}
496
+ identifiers.collect{|f| Path === f ? f : Path.setup(f)}
497
497
  end
498
498
  when identifiers
499
- [ Path === identifiers ? identifiers : Path.setup(identifiers, nil, namespace) ]
499
+ [ Path === identifiers ? identifiers : Path.setup(identifiers) ]
500
500
  when Path === filename
501
501
  filename.identifier_files
502
502
  when filename
@@ -662,7 +662,7 @@ Example:
662
662
  self.through do |key,values|
663
663
  field_values = values.delete_at field_pos
664
664
  next if field_values.nil?
665
- zipped = values.zip_fields
665
+ zipped = Misc.zip_fields(values)
666
666
  field_values.zip(zipped).each do |field_value,rest|
667
667
  k = [key,field_value]*":"
668
668
  if new.include? k
@@ -501,7 +501,7 @@ module TSV
501
501
 
502
502
  # grep
503
503
  if grep
504
- stream.rewind
504
+ stream.rewind if stream.eof?
505
505
  stream = Open.grep(stream, grep, invert_grep)
506
506
  self.first_line = stream.gets
507
507
  end
data/lib/rbbt/util/R.rb CHANGED
@@ -49,6 +49,41 @@ source('#{UTIL}');
49
49
  end
50
50
  end
51
51
 
52
+ def self.console(script, options = {})
53
+ TmpFile.with_file do |init_file|
54
+ Open.write(init_file) do |f|
55
+ f.puts "# Loading basic rbbt environment"
56
+ f.puts "library(utils);\n"
57
+ f.puts "source('#{R::UTIL}');\n"
58
+ f.puts
59
+ f.puts script
60
+ end
61
+
62
+ pid = Process.fork do |ppid|
63
+ ENV["R_PROFILE"] = init_file
64
+ exec("R")
65
+ end
66
+
67
+ begin
68
+ Process.waitpid pid
69
+ rescue Interrupt
70
+ if Misc.pid_exists? pid
71
+ Process.kill "INT", pid
72
+ retry
73
+ else
74
+ raise $!
75
+ end
76
+ rescue Exception
77
+ Process.kill 9, pid if Misc.pid_exists? pid
78
+ raise $!
79
+ ensure
80
+ Process.waitpid pid if Misc.pid_exists? pid
81
+ end
82
+
83
+ end
84
+ end
85
+
86
+
52
87
  def self.ruby2R(object)
53
88
  case object
54
89
  when nil
@@ -114,7 +149,7 @@ if (! is.null(data)){ rbbt.tsv.write('#{f}', data); }
114
149
 
115
150
  def R_interactive(pre_script = nil)
116
151
  TmpFile.with_file do |f|
117
- Log.debug{"R Script:\n" << pre_script }
152
+ Log.debug{"R Interactive:\n" << pre_script } if pre_script
118
153
  TmpFile.with_file(pre_script) do |script_file|
119
154
  Open.write(f, self.to_s)
120
155
  script = "data_file = '#{f}';\n"
@@ -123,4 +158,16 @@ if (! is.null(data)){ rbbt.tsv.write('#{f}', data); }
123
158
  end
124
159
  end
125
160
  end
161
+
162
+ def R_console(pre_script = nil)
163
+ TmpFile.with_file do |f|
164
+ Log.debug{"R Console:\n" << pre_script } if pre_script
165
+ TmpFile.with_file(pre_script) do |script_file|
166
+ Open.write(f, self.to_s)
167
+ script = "data_file = '#{f}';\n"
168
+ script << "\n#\{{{Pre-script:\n\n" << pre_script << "\n#}}}Pre-script\n\n"
169
+ R.console(script)
170
+ end
171
+ end
172
+ end
126
173
  end
data/lib/rbbt/util/log.rb CHANGED
@@ -26,7 +26,8 @@ module Log
26
26
 
27
27
  def self.last_caller(stack)
28
28
  line = nil
29
- while line.nil? or line =~ /util\/log\.rb/ and stack.any?
29
+ pos ||= 0
30
+ while line.nil? or line =~ /util\/log\.rb/ and stack.any?
30
31
  line = stack.shift
31
32
  end
32
33
  line ||= caller.first
@@ -217,6 +218,12 @@ module Log
217
218
  error("BACKTRACE: " << Log.last_caller(caller) << "\n" + color_stack(e.backtrace)*"\n")
218
219
  end
219
220
 
221
+ def self.deprecated(m)
222
+ stack = caller
223
+ warn("DEPRECATED: " << Log.last_caller(caller))
224
+ warn("* " << (m || "").to_s)
225
+ end
226
+
220
227
  def self.color_stack(stack)
221
228
  stack.collect do |line|
222
229
  line = line.sub('`',"'")
@@ -1,6 +1,7 @@
1
1
  module Misc
2
2
 
3
- def self.add_libdir(dir)
3
+ def self.add_libdir(dir=nil)
4
+ dir ||= File.join(Path.caller_lib_dir(caller.first), 'lib')
4
5
  $LOAD_PATH.unshift(dir) unless $LOAD_PATH.include? dir
5
6
  end
6
7
 
data/share/Rlib/util.R CHANGED
@@ -170,8 +170,6 @@ rbbt.png_plot <- function(filename, width, height, p, ...){
170
170
  }
171
171
 
172
172
  rbbt.heatmap <- function(filename, width, height, data, take_log=FALSE, ...){
173
- require(gplots, quietly = TRUE, warn.conflicts = FALSE)
174
- library(pls, quietly = TRUE, warn.conflicts = FALSE)
175
173
  opar = par()
176
174
  png(filename=filename, width=width, height=height);
177
175
 
@@ -65,7 +65,7 @@ class TestKnowledgeBase < Test::Unit::TestCase
65
65
 
66
66
  def test_syndication
67
67
  kb = KnowledgeBase.new Rbbt.tmp.test.kb2, "Hsa/jan2013"
68
- kb.syndicate @kb, :genomics
68
+ kb.syndicate :genomics, @kb
69
69
 
70
70
  gene = "TP53"
71
71
  found = kb.identify "pina@genomics", gene
@@ -24,20 +24,30 @@ end
24
24
 
25
25
  class TestTSV < Test::Unit::TestCase
26
26
 
27
- def test_rake
27
+ def test_tsv
28
+ require 'rbbt/tsv'
29
+ TestResource.claim TestResource.tmp.test.test_tsv, :proc do
30
+ tsv = {"a" => 1, "b" => 2}
31
+ TSV.setup(tsv, :key_field => "Letter", :fields => ["Value"], :type => :single)
32
+ end
33
+ iii TestResource.tmp.test.test_tsv.produce
34
+ Log.tsv TestResource.tmp.test.test_tsv.tsv
35
+ end
36
+
37
+ def _test_rake
28
38
  TestResource.tmp.test.work.footest.foo.read == "TEST"
29
39
  assert TestResource.tmp.test.work.footest.foo.read == "TEST"
30
40
  end
31
41
 
32
- def test_proc
42
+ def _test_proc
33
43
  assert TestResource.tmp.test.proc.read == "PROC TEST"
34
44
  end
35
45
 
36
- def test_string
46
+ def _test_string
37
47
  assert TestResource.tmp.test.string.read == "TEST"
38
48
  end
39
49
 
40
- def test_url
50
+ def _test_url
41
51
  assert TestResource[].tmp.test.google.read =~ /google/
42
52
  end
43
53
 
@@ -59,7 +69,7 @@ class TestTSV < Test::Unit::TestCase
59
69
  assert_equal File.join(ENV['HOME'], '.phgx/etc/foo'), Path.setup('etc/foo', 'phgx').find()
60
70
  end
61
71
 
62
- def test_libdir
72
+ def _test_libdir
63
73
  assert File.exists? TestResource[].share.Rlib["util.R"].find :lib
64
74
  assert File.exists? TestResource[].share.Rlib["util.R"].find
65
75
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbbt-util
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.14.26
4
+ version: 5.14.28
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-09 00:00:00.000000000 Z
11
+ date: 2014-09-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake