[BioRuby] Indexing fasta file with Ruby 1.9.1
MISHIMA, Hiroyuki
missy at be.to
Thu Aug 5 22:53:15 EDT 2010
Hi Raoul and all,
Raoul Bonnal wrote (2010/07/30 20:28):
> Caught error: #<NoMethodError: undefined method `each' for
> "bta-miR-3596":String> in "mature.fa" position 1178667
The following patch seems to work...
--- ./indexer-orig.rb 2010-08-06 11:40:52.000000000 +0900
+++
/usr/local/lib/ruby/gems/1.9.1/gems/bio-1.4.0/lib/bio/io/flatfile/indexer.rb
2010-08-06 11:38:53.000000000 +0900
@@ -155,8 +155,15 @@
def parse_secondary
self.secondary.each do |x|
p = x.proc.call(@entry)
- p.each do |y|
- yield x.name, y if y.length > 0
+
+ if p.respond_to? :each
+ p.each do |y|
+ yield x.name, y if y.length > 0
+ end
+ else
+ p.each_line do |y|
+ yield x.name, y if y.length > 0
+ end
end
end
end
This is typical incompatibility between Ruby-1.8 and -1.9. In Ruby-1.9,
String#each should be replaced by String#each_line.
irb-1.8> "abc\ndef".each {|l| p l}
"abc\n"
"def"
=> "abc\ndef"
irb-1.9> "abc\ndef".each {|l| p l}
NoMethodError: undefined method `each' for "abc\ndef":String
from (irb):1
from /usr/local/bin/irb-1.9:12:in `<main>'
irb-1.9> "abc\ndef".each_line {|l| p l}
"abc\n"
"def"
=> "abc\ndef"
Because the "p" variable can be String or Array in the "parse_secondary"
method, I used "respond_to?". I do not know this instant patch is right
way or no.
Sincerely yours,
Hiro
--
MISHIMA, Hiroyuki, DDS, Ph.D.
COE Research Fellow
Department of Human Genetics
Nagasaki University Graduate School of Biomedical Sciences
More information about the BioRuby
mailing list