add copyright statement and GPL2+ license statement
[migration-tools.git] / Equinox-Migration / lib / Equinox / Migration / SimpleTagList.pm
index 6a27328..1b455d1 100644 (file)
@@ -1,5 +1,21 @@
 package Equinox::Migration::SimpleTagList;
 
+# Copyright 2009-2012, Equinox Software, Inc.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
 use warnings;
 use strict;
 
@@ -9,11 +25,11 @@ Equinox::Migration::SimpleTagList - Generate taglist from file
 
 =head1 VERSION
 
-Version 1.000
+Version 1.001
 
 =cut
 
-our $VERSION = '1.000';
+our $VERSION = '1.001';
 
 
 =head1 SYNOPSIS
@@ -58,11 +74,12 @@ sub new {
 
     if ($args{file}) {
         if (-r $args{file}) {
-            $self->{conf}{file} = $args{file};
-            $self->generate;
+            $self->generate($args{file});
         } else {
-            die "Can't open tags file: $!\n";
+            die "Can't open tags file '", $args{file}, "': $!\n";
         }
+    }elsif ($args{str}) {
+        $self->generate($args{str},'scalar');
     }
 
     return $self;
@@ -85,7 +102,7 @@ or Perl will think you're passing a (possibly malformed) octal value.
 
 =cut
 
-sub has { my ($self, $t) = @_; $t =~ s/^0+//; return (defined $self->{tags}{$t}) ? 1 : 0 }
+sub has { my ($self, $t) = @_; return 0 unless $t; $t =~ s/^0+//; return (defined $self->{tags}{$t}) ? 1 : 0 }
 
 =head2 as_hashref
 
@@ -105,16 +122,24 @@ numerically by tag).
 sub as_listref { my ($self) = @_; return [ sort {$a <=> $b} keys %{$self->{tags}} ] }
 
 sub generate {
-    my ($self) = @_;
+    my ($self, $file, $scalar) = @_;
 
-    open TAGFILE, '<', $self->{conf}{file};
+    if ($scalar) {
+        open TAGFILE, '<', \$file;
+    } else {
+        open TAGFILE, '<', $file;
+    }
     while (<TAGFILE>) {
+        next if m/^#/;
+        next if m/^\s*\n$/;
+
         $self->{conf}{lastwasrange} = 0;
         $self->{conf}{range}{high}  = 0;
         $self->{conf}{range}{low}   = 0;
 
         my @chunks = split /\s+/;
         while (my $chunk = shift @chunks) {
+            last if ($chunk =~ /^#/);
 
             # single values
             if ($chunk =~ /^\d{1,3}$/) {
@@ -178,6 +203,8 @@ sub add_tag {
     my ($self, $tag) = @_;
     $tag =~ s/^0+//;
 
+    die "Values must be numeric\n" if ($tag =~ /[^\d\-]/);
+
     die "Values must be valid tags (0-999)\n"
       unless ($tag >= 0 and $tag <= 999);