From ed50c2d080eb8a787af98b93b174f6908ef86f39 Mon Sep 17 00:00:00 2001
From: Kieron Taylor <ktaylor@ebi.ac.uk>
Date: Mon, 16 Jan 2012 17:33:04 +0000
Subject: [PATCH] Minor nomenclature tweaks, and better support for Bio::Seq
 objects

---
 .../Bio/EnsEMBL/Utils/IO/FASTASerializer.pm   | 42 ++++++++++---------
 1 file changed, 23 insertions(+), 19 deletions(-)

diff --git a/modules/Bio/EnsEMBL/Utils/IO/FASTASerializer.pm b/modules/Bio/EnsEMBL/Utils/IO/FASTASerializer.pm
index 576858a829..cf38728575 100644
--- a/modules/Bio/EnsEMBL/Utils/IO/FASTASerializer.pm
+++ b/modules/Bio/EnsEMBL/Utils/IO/FASTASerializer.pm
@@ -27,7 +27,7 @@ Bio::EnsEMBL::Utils::IO::FASTASerializer
   my $serializer = Bio::EnsEMBL::Utils::IO::FASTASerializer->new($filehandle);
   $serializer->chunk_factor(1000);
   $serializer->line_width(60);
-  $serializer->print_Slice($slice);
+  $serializer->print_Seq($slice);
   
   $serializer = Bio::EnsEMBL::Utils::IO::FASTASerializer->new($filehandle,
     sub {
@@ -35,8 +35,6 @@ Bio::EnsEMBL::Utils::IO::FASTASerializer
         return ">Custom header";
     }
   );
-  $serializer->print_metadata($slice);
-  $serializer->print_Slice($slice,"no duplicate headers please");
   
 =head1 DESCRIPTION
 
@@ -56,6 +54,7 @@ package Bio::EnsEMBL::Utils::IO::FASTASerializer;
 use strict;
 use warnings;
 use Bio::EnsEMBL::Utils::Exception;
+use Bio::EnsEMBL::Utils::Scalar qw/assert_ref check_ref/;
 
 use base qw(Bio::EnsEMBL::Utils::IO::Serializer);
 
@@ -93,13 +92,21 @@ sub new {
     else {
         $self->{'header_function'} = sub {
             my $slice = shift;
-            my $id       = $slice->seq_region_name;
-            my $seqtype  = 'dna';
-            my $idtype   = $slice->coord_system->name;
-            my $location = $slice->name;
             
-            return ">$id $seqtype:$idtype $location\n";
-        }
+            if(check_ref($slice, 'Bio::EnsEMBL::Slice')) {
+                my $id       = $slice->seq_region_name;
+                my $seqtype  = 'dna';
+                my $idtype   = $slice->coord_system->name;
+                my $location = $slice->name;
+                
+                return ">$id $seqtype:$idtype $location";
+            }
+            else {
+                # must be a Bio::Seq , or we're doomed
+                
+                return ">".$slice->name;
+            }
+        };
         
     }
     
@@ -118,31 +125,28 @@ sub print_metadata {
     my $self = shift;
     my $slice = shift;
     my $fh = $self->{'filehandle'};
-    my $metadata = &{$self->{'header_function'}}($slice); 
-    print $fh $metadata;
+    my $metadata = $self->{'header_function'}->($slice); 
+    print $fh $metadata."\n";
 }
 
-=head2 print_slice
+=head2 print_Seq
 
     Arg [1]    : Bio::EnsEMBL::Slice or other Bio::PrimarySeqI compliant object
-    Arg [2]    : Optional Boolean - override the default serialisation of a header
+    
     Description: Serializes the slice into FASTA format. Buffering is used
                  While other Bioperl PrimarySeqI implementations can be used,
                  a custom header function will be required to accommodate it.
                  
-                 Add an override as second argument if more control is needed
-                 over when and how custom headers are written.
     Returntype : None
     
 =cut
 
-sub print_Slice {
+sub print_Seq {
     my $self = shift;
     my $slice = shift;
-    my $override = shift;
     my $fh = $self->{'filehandle'};
-    # Default print header, override
-    $self->print_metadata($slice) unless $override;
+    
+    $self->print_metadata($slice);
     
     # set buffer size
     my $chunk_size = $self->{'chunk_factor'} * $self->{'line_width'};
-- 
GitLab