File Coverage

Bio/Search/Hit/HitFactory.pm
Criterion Covered Total %
statement 28 30 93.3
branch 5 8 62.5
condition 1 3 33.3
subroutine 7 7 100.0
pod 3 3 100.0
total 44 51 86.2


line stmt bran cond sub pod time code
1             #
2             # BioPerl module for Bio::Search::Hit::HitFactory
3             #
4             # Please direct questions and support issues to
5             #
6             # Cared for by Jason Stajich
7             #
8             # Copyright Jason Stajich
9             #
10             # You may distribute this module under the same terms as perl itself
11              
12             # POD documentation - main docs before the code
13              
14             =head1 NAME
15              
16             Bio::Search::Hit::HitFactory - A factory to create Bio::Search::Hit::HitI objects
17              
18             =head1 SYNOPSIS
19              
20             use Bio::Search::Hit::HitFactory;
21             my $factory = Bio::Search::Hit::HitFactory->new();
22             my $resultobj = $factory->create(@args);
23              
24             =head1 DESCRIPTION
25              
26             This is a general way of hiding the object creation process so that we
27             can dynamically change the objects that are created by the SearchIO
28             parser depending on what format report we are parsing.
29              
30             This object is for creating new Hits.
31              
32             =head1 FEEDBACK
33              
34             =head2 Mailing Lists
35              
36             User feedback is an integral part of the evolution of this and other
37             Bioperl modules. Send your comments and suggestions preferably to
38             the Bioperl mailing list. Your participation is much appreciated.
39              
40             bioperl-l@bioperl.org - General discussion
41             http://bioperl.org/wiki/Mailing_lists - About the mailing lists
42              
43             =head2 Support
44              
45             Please direct usage questions or support issues to the mailing list:
46              
47             I
48              
49             rather than to the module maintainer directly. Many experienced and
50             reponsive experts will be able look at the problem and quickly
51             address it. Please include a thorough description of the problem
52             with code and data examples if at all possible.
53              
54             =head2 Reporting Bugs
55              
56             Report bugs to the Bioperl bug tracking system to help us keep track
57             of the bugs and their resolution. Bug reports can be submitted via the
58             web:
59              
60             https://github.com/bioperl/bioperl-live/issues
61              
62             =head1 AUTHOR - Jason Stajich
63              
64             Email jason@bioperl.org
65              
66             =head1 APPENDIX
67              
68             The rest of the documentation details each of the object methods.
69             Internal methods are usually preceded with a _
70              
71             =cut
72              
73              
74             # Let the code begin...
75              
76              
77             package Bio::Search::Hit::HitFactory;
78 3     3   17 use vars qw($DEFAULT_TYPE);
  3         5  
  3         105  
79 3     3   12 use strict;
  3         5  
  3         58  
80              
81              
82 3     3   11 use base qw(Bio::Root::Root Bio::Factory::ObjectFactoryI);
  3         3  
  3         229  
83              
84             BEGIN {
85 3     3   577 $DEFAULT_TYPE = 'Bio::Search::Hit::GenericHit';
86             }
87              
88             =head2 new
89              
90             Title : new
91             Usage : my $obj = Bio::Search::Hit::HitFactory->new();
92             Function: Builds a new Bio::Search::Hit::HitFactory object
93             Returns : Bio::Search::Hit::HitFactory
94             Args :
95              
96              
97             =cut
98              
99             sub new {
100 14     14 1 40 my($class,@args) = @_;
101              
102 14         49 my $self = $class->SUPER::new(@args);
103 14         57 my ($type) = $self->_rearrange([qw(TYPE)],@args);
104 14 50       74 $self->type($type) if defined $type;
105 14         52 return $self;
106             }
107              
108             =head2 create
109              
110             Title : create
111             Usage : $factory->create(%args)
112             Function: Create a new L object
113             Returns : L
114             Args : hash of initialization parameters
115              
116              
117             =cut
118              
119             sub create{
120 12     12 1 45 my ($self,@args) = @_;
121 12         37 my $type = $self->type;
122 12         27 eval { $self->_load_module($type) };
  12         36  
123 12 50       35 if( $@ ) { $self->throw("Unable to load module $type"); }
  0         0  
124 12         77 return $type->new(@args);
125             }
126              
127              
128             =head2 type
129              
130             Title : type
131             Usage : $factory->type('Bio::Search::Hit::GenericHit');
132             Function: Get/Set the Hit creation type
133             Returns : string
134             Args : [optional] string to set
135              
136              
137             =cut
138              
139             sub type{
140 26     26 1 58 my ($self,$type) = @_;
141 26 100       61 if( defined $type ) {
142             # redundancy with the create method which also calls _load_module
143             # I know - but this is not a highly called object so I am going
144             # to leave it in
145 14         26 eval {$self->_load_module($type) };
  14         48  
146 14 50       41 if( $@ ){ $self->warn("Cannot find module $type, unable to set type"); }
  0         0  
147 14         28 else { $self->{'_type'} = $type; }
148             }
149 26   33     89 return $self->{'_type'} || $DEFAULT_TYPE;
150             }
151              
152             1;