bio-lazyblastxml 0.2.0 → 0.3.0

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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.3.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{bio-lazyblastxml}
8
- s.version = "0.2.0"
8
+ s.version = "0.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["robsyme"]
12
- s.date = %q{2011-05-30}
12
+ s.date = %q{2011-05-31}
13
13
  s.description = %q{This is very scrappy at the moment, and will need to be seriously cleaned up. It does what I need it to do for now. I'll fix it up in the coming weeks. Promise :)}
14
14
  s.email = %q{rob.syme@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -1,184 +1,176 @@
1
1
  require "libxml"
2
2
 
3
- class Enumerator
4
- def lazy_select(&block)
5
- Enumerator.new do |yielder|
6
- self.each do |val|
7
- yielder.yield(val) if block.call(val)
8
- end
9
- end
10
- end
11
-
12
- def lazy_reject(&block)
13
- Enumerator.new do |yielder|
14
- self.each do |val|
15
- yielder.yield(val) unless block.call(val)
16
- end
17
- end
18
- end
19
-
20
- def lazy_map(&block)
21
- Enumerator.new do |yielder|
22
- self.each do |value|
23
- yielder.yield(block.call(value))
24
- end
25
- end
26
- end
27
- end
28
-
29
3
  module Bio
30
4
  class LazyBlast
31
- module LazyNodeSelector
32
- def find_nodes_named(*names)
33
- @nodes.lazy_select{|reader| names.include?(reader.name)}
34
- end
5
+ class Report
6
+ include Enumerable
7
+ attr_reader :reader, :program, :version, :db, :query_id, :query_def, :query_len, :parameters
35
8
 
36
- def next_node_named(*names)
37
- find_nodes_named(*names).next
9
+ def initialize(filename)
10
+ @reader = LibXML::XML::Reader.file(filename)
11
+ @nodes = Enumerator.new do |yielder|
12
+ while @reader.read
13
+ yielder << @reader if @reader.node_type == LibXML::XML::Reader::TYPE_ELEMENT
14
+ end
15
+ end
16
+ setup_report_values
38
17
  end
39
18
 
40
- def next_value_named(*names)
41
- next_node_named(*names).read_inner_xml
19
+ def setup_report_values
20
+ @parameters = Hash.new
21
+ @nodes.each do |node|
22
+ return node if node.name == "BlastOutput_iterations"
23
+ case node.name
24
+ when 'BlastOutput_program'
25
+ @program = node.read_inner_xml
26
+ when 'BlastOutput_version'
27
+ @version = node.read_inner_xml
28
+ when 'BlastOutput_db'
29
+ @db = node.read_inner_xml
30
+ when 'BlastOutput_query-ID'
31
+ @query_id = node.read_inner_xml
32
+ when 'BlastOutput_query-def'
33
+ @query_def = node.read_inner_xml
34
+ when 'BlastOutput_query-len'
35
+ @query_len = node.read_inner_xml.to_i
36
+ when 'Parameters_matrix'
37
+ @parameters['matrix'] = node.read_inner_xml
38
+ when 'Parameters_expect'
39
+ @parameters['expect'] = node.read_inner_xml.to_i
40
+ when 'Parameters_gap-open'
41
+ @parameters['gap-open'] = node.read_inner_xml.to_i
42
+ when 'Parameters_gap-extend'
43
+ @parameters['gap-extend'] = node.read_inner_xml.to_i
44
+ when 'Parameters_filter'
45
+ @parameters['filter'] = node.read_inner_xml
46
+ end
47
+ end
42
48
  end
43
- end
44
- end
45
- end
46
-
47
- module Bio
48
- class LazyBlast
49
- class Report
50
- include Enumerable
51
- include Bio::LazyBlast::LazyNodeSelector
49
+
50
+ def each
51
+ @nodes.each{|node| yield Iteration.new(node) if node.name == "Iteration"}
52
+ end
53
+ alias :each_iteration :each
52
54
 
53
55
  class Iteration
54
56
  include Enumerable
55
- include Bio::LazyBlast::LazyNodeSelector
56
- attr_reader :statistics
57
- attr_accessor :num
58
- attr_accessor :message
59
- attr_accessor :query_id
60
- attr_accessor :query_def
61
- attr_accessor :query_len
57
+ attr_reader :num, :query_id, :query_def, :query_len, :message, :parameters
62
58
 
63
- def setup_hits(xml_reader)
64
- @reader = xml_reader
65
- hits_finished = false
59
+ def initialize(reader)
66
60
  @nodes = Enumerator.new do |yielder|
67
- while @reader.read and !(@reader.name == "Iteration_hits" and @reader.node_type == LibXML::XML::Reader::TYPE_END_ELEMENT) and !(@reader.value == "No hits found")
68
- yielder << @reader if @reader.node_type == LibXML::XML::Reader::TYPE_ELEMENT
61
+ until (reader.name == "Iteration" and reader.node_type == LibXML::XML::Reader::TYPE_END_ELEMENT) or !reader.read
62
+ yielder << reader if reader.node_type == LibXML::XML::Reader::TYPE_ELEMENT
69
63
  end
70
64
  end
65
+ setup_iteration_values
71
66
  end
72
67
 
73
- def each
74
- find_nodes_named("Hit").each do |reader|
75
- hit = Hit.new
76
- hit.num = next_value_named("Hit_num").to_i
77
- hit.hit_id = next_value_named("Hit_id")
78
- hit.definition = next_value_named("Hit_def")
79
- hit.accession = next_value_named("Hit_accession")
80
- hit.len = next_value_named("Hit_len")
81
- hit.setup_hsps(@reader)
82
-
83
- yield hit
68
+ def setup_iteration_values
69
+ @nodes.each do |node|
70
+ return node if node.name == 'Iteration_hits'
71
+ case node.name
72
+ when 'Iteration_iter-num'
73
+ @num = node.read_inner_xml.to_i
74
+ when 'Iteration_query-ID'
75
+ @query_id = node.read_inner_xml
76
+ when 'Iteration_query-def'
77
+ @query_def = node.read_inner_xml
78
+ when 'Iteration_query-len'
79
+ @query_len = node.read_inner_xml.to_i
80
+ when 'Iteration_message'
81
+ @message = node.read_inner_xml
82
+ end
84
83
  end
85
84
  end
86
85
 
86
+ def each
87
+ @nodes.each{|node| yield Hit.new(node) if node.name == "Hit"}
88
+ end
87
89
  alias :each_hit :each
88
90
 
89
91
  class Hit
90
92
  include Enumerable
91
- include Bio::LazyBlast::LazyNodeSelector
92
- attr_accessor :num
93
- attr_accessor :hit_id
94
- attr_accessor :len
95
- attr_accessor :definition
96
- attr_accessor :accession
93
+ attr_reader :num, :hit_id, :len, :definition, :accession
97
94
 
98
- def setup_hsps(xml_reader)
99
- @reader = xml_reader
95
+ def initialize(reader)
100
96
  @nodes = Enumerator.new do |yielder|
101
- while @reader.read and !(@reader.name == "Hit_hsps" and @reader.node_type == LibXML::XML::Reader::TYPE_END_ELEMENT)
102
- yielder << @reader if @reader.node_type == LibXML::XML::Reader::TYPE_ELEMENT
97
+ until (reader.name == "Hit" and reader.node_type == LibXML::XML::Reader::TYPE_END_ELEMENT) or !reader.read
98
+ yielder << reader if reader.node_type == LibXML::XML::Reader::TYPE_ELEMENT
103
99
  end
104
100
  end
101
+ setup_hit_values
105
102
  end
106
103
 
107
- def each
108
- find_nodes_named("Hsp").each do |reader|
109
- hsp = Hsp.new
110
- hsp.num = next_value_named("Hsp_num").to_i
111
- hsp.bit_score = next_value_named("Hsp_bit-score").to_f
112
- hsp.evalue = next_value_named("Hsp_evalue").to_f
113
- hsp.query_from = next_value_named("Hsp_query-from").to_i
114
- hsp.query_to = next_value_named("Hsp_query-to").to_i
115
- hsp.hit_from = next_value_named("Hsp_hit-from").to_i
116
- hsp.hit_to = next_value_named("Hsp_hit-to").to_i
117
- hsp.query_frame = next_value_named("Hsp_query-frame").to_i
118
- hsp.hit_frame = next_value_named("Hsp_hit-frame").to_i
119
- hsp.identity = next_value_named("Hsp_positive").to_i
120
- hsp.align_len = next_value_named("Hsp_align-len").to_i
121
- hsp.qseq = next_value_named("Hsp_qseq").to_i
122
- hsp.hseq = next_value_named("Hsp_hseq").to_i
123
- hsp.midline = next_value_named("Hsp_midline").to_i
124
- yield hsp
104
+ def setup_hit_values
105
+ @nodes.each do |node|
106
+ return node if node.name == 'Hit_hsps'
107
+ case node.name
108
+ when 'Hit_num'
109
+ @num = node.read_inner_xml.to_i
110
+ when 'Hit_id'
111
+ @hit_id = node.read_inner_xml.to_i
112
+ when 'Hit_def'
113
+ @definition = node.read_inner_xml
114
+ when 'Hit_accession'
115
+ @accession = node.read_inner_xml
116
+ when 'Hit_len'
117
+ @len = node.read_inner_xml
118
+ end
125
119
  end
126
120
  end
127
-
121
+
122
+ def each
123
+ @nodes.each{|node| yield Hsp.new(node) if node.name == "Hsp"}
124
+ end
128
125
  alias :each_hsp :each
129
126
 
130
127
  class Hsp
131
- attr_accessor :num
132
- attr_accessor :bit_score
133
- attr_accessor :evalue
134
- attr_accessor :query_from
135
- attr_accessor :query_to
136
- attr_accessor :hit_from
137
- attr_accessor :hit_to
138
- attr_accessor :query_frame
139
- attr_accessor :hit_frame
140
- attr_accessor :identity
141
- attr_accessor :positive
142
- attr_accessor :gaps
143
- attr_accessor :align_len
144
- attr_accessor :density
145
- attr_accessor :qseq
146
- attr_accessor :hseq
147
- attr_accessor :midline
148
- attr_accessor :percent_identity
149
- attr_accessor :mismatch_count
150
- end
128
+ attr_reader :num, :bit_score, :evalue, :query_from, :query_to, :hit_from, :hit_to, :query_frame, :hit_frame, :identity, :positive, :gaps, :align_len, :density, :qseq, :hseq, :midline, :percent_identity, :mismatch_count
151
129
 
152
- end
153
-
154
- end
155
-
156
- attr_reader :reader
130
+ def initialize(reader)
131
+ @nodes = Enumerator.new do |yielder|
132
+ until (reader.name == "Hsp" and reader.node_type == LibXML::XML::Reader::TYPE_END_ELEMENT) or !reader.read
133
+ yielder << reader if reader.node_type == LibXML::XML::Reader::TYPE_ELEMENT
134
+ end
135
+ end
136
+ setup_hsp_values
137
+ end
157
138
 
158
- def initialize(filename)
159
- @reader = LibXML::XML::Reader.file(filename)
160
- @nodes = Enumerator.new do |yielder|
161
- while @reader.read
162
- yielder << @reader if @reader.node_type == LibXML::XML::Reader::TYPE_ELEMENT
139
+ def setup_hsp_values
140
+ @nodes.each do |node|
141
+ case node.name
142
+ when 'Hsp_num'
143
+ @num = node.read_inner_xml.to_i
144
+ when 'Hsp_bit-score'
145
+ @bit_score = node.read_inner_xml.to_f
146
+ when 'Hsp_evalue'
147
+ @evalue = node.read_inner_xml.to_f
148
+ when 'Hsp_query-from'
149
+ @query_from = node.read_inner_xml.to_i
150
+ when 'Hsp_query-to'
151
+ @query_to = node.read_inner_xml.to_i
152
+ when 'Hsp_query-frame'
153
+ @query_frame = node.read_inner_xml.to_i
154
+ when 'Hsp_hit-frame'
155
+ @hit_frame = node.read_inner_xml.to_i
156
+ when 'Hsp_identity'
157
+ @identity = node.read_inner_xml.to_i
158
+ when 'Hsp_positive'
159
+ @positive = node.read_inner_xml.to_i
160
+ when 'Hsp_align-len'
161
+ @align_len = node.read_inner_xml.to_i
162
+ when 'Hsp_qseq'
163
+ @qseq = node.read_inner_xml
164
+ when 'Hsp_hseq'
165
+ @hseq = node.read_inner_xml
166
+ when 'Hsp_midline'
167
+ @midline = node.read_inner_xml
168
+ end
169
+ end
170
+ end
163
171
  end
164
172
  end
165
173
  end
166
-
167
- def each
168
- find_nodes_named("Iteration").each do |reader|
169
- iteration = Iteration.new
170
- iteration.num = next_value_named("Iteration_iter-num").to_i
171
- iteration.query_id = next_value_named("Iteration_query-ID")
172
- iteration.query_def = next_value_named("Iteration_query-def")
173
- iteration.query_len = next_value_named("Iteration_query-len").to_i
174
- iteration.setup_hits(@reader)
175
-
176
- yield iteration
177
- end
178
- end
179
-
180
- alias :each_iteration :each
181
-
182
174
  end
183
175
  end
184
176
  end
@@ -36,7 +36,16 @@ class TestIteration < MiniTest::Unit::TestCase
36
36
  end
37
37
 
38
38
  def test_iteration_creation
39
- assert_kind_of Bio::LazyBlast::Report::Iteration, @iter_1
39
+ @iteration = @report.first
40
+ assert_kind_of Bio::LazyBlast::Report::Iteration, @iteration
41
+ assert_equal 'blastp', @report.program
42
+ assert_equal 'blastp 2.2.21 [Jun-14-2009]', @report.version
43
+ assert_equal 'db.fasta', @report.db
44
+ assert_equal 'BLOSUM62', @report.parameters['matrix']
45
+ assert_equal 10, @report.parameters['expect']
46
+ assert_equal 11, @report.parameters['gap-open']
47
+ assert_equal 1, @report.parameters['gap-extend']
48
+ assert_equal 'F', @report.parameters['filter']
40
49
  end
41
50
 
42
51
  def test_example_usage
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: bio-lazyblastxml
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.2.0
5
+ version: 0.3.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - robsyme
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-05-30 00:00:00 +08:00
13
+ date: 2011-05-31 00:00:00 +08:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -116,7 +116,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
116
116
  requirements:
117
117
  - - ">="
118
118
  - !ruby/object:Gem::Version
119
- hash: 3109622305771744063
119
+ hash: -3799468829096378627
120
120
  segments:
121
121
  - 0
122
122
  version: "0"