Index: /lang/perl/Google-Chart-DBIC/trunk/lib/Google/Chart/DBIC.pm
===================================================================
--- /lang/perl/Google-Chart-DBIC/trunk/lib/Google/Chart/DBIC.pm (revision 17483)
+++ /lang/perl/Google-Chart-DBIC/trunk/lib/Google/Chart/DBIC.pm (revision 17500)
@@ -1,3 +1,4 @@
 package Google::Chart::DBIC;
+use Moose;
 use Google::Chart ();
 use Data::Dumper ();
@@ -6,33 +7,69 @@
 our $VERSION = '0.01';
 
-my @color = qw(ff0000 00ff00 0000ff ffff00 ff00ff 00ffff);
+has 'size' => (
+    is => 'rw',
+    required => 1,
+    default => '400x400',
+);
 
-sub new {
-    my ( $class, $args ) = @_;
-    my $self = {};
-    bless $self, $class;
-    my $resultset = $args->{resultset};
+has 'type' => (
+    is => 'rw',
+    required => 1,
+    default => 'line',
+);
+
+has 'color' => (
+    is => 'rw',
+    isa => 'ArrayRef[Str]',
+    required => 1,
+    default => sub {
+        [qw(ff0000 00ff00 0000ff ffff00 ff00ff 00ffff)];
+    },
+);
+
+has 'resultset' => (
+    is => 'rw',
+    isa => 'ArrayRef[Object]',
+    required => 1,
+);
+
+has 'axis_x' => (
+    is => 'rw',
+    isa => 'Str',
+);
+
+has 'max_value' => (
+    is => 'rw',
+    isa => 'Num',
+);
+
+no Moose;
+
+sub as_uri {
+    my $self = shift;
     my $dataset = {};
     my $axis_x = [];
     my $max_value = 0;
-    for my $row (@{$resultset}) {
-        if (!defined $args->{axis_x} && $row->has_column_loaded('axis_x')) {
-            push @$axis_x, $row->get_column('axis_x');
+    for my $row (@{$self->resultset}) {
+        if (!defined $self->axis_x && $row->has_column_loaded('axis_x')) {
+            my $v = $row->get_column('axis_x');
+            push @$axis_x, $v unless grep {$v} @$axis_x;
         }
         for ($row->columns) {
-            if (defined $args->{axis_x} && $_ eq $args->{axis_x}){
-                push @$axis_x, $row->$_;
+            next unless $row->has_column_loaded($_);
+            my $v = $row->$_;
+            if (defined $self->axis_x && $_ eq $self->axis_x){
+                push @$axis_x, $v unless grep {$v} @$axis_x;
                 next;
             }
-            next unless $row->has_column_loaded($_);
-            next unless Scalar::Util::looks_like_number $row->$_;
-            push @{$dataset->{$_}}, Scalar::Util::looks_like_number $row->$_ ? $row->$_ : undef;
-            $max_value = $row->$_ if (defined $row->$_ && $row->$_ >= $max_value);
+            next unless Scalar::Util::looks_like_number $v;
+            push @{$dataset->{$_}}, Scalar::Util::looks_like_number $v ? $v : undef;
+            $max_value = $v if $v >= $max_value;
         }
     }
-    $max_value = $args->{max_value} || $max_value;
-    $self->{chart} = Google::Chart->new(
-        size => $args->{size},
-        type => $args->{type},
+    $max_value = $self->max_value || $max_value;
+    my $chart = Google::Chart->new(
+        size => $self->size,
+        type => $self->type,
         axis => [
             {
@@ -52,13 +89,8 @@
             },
         },
-        color => $args->{color} || [@color[0 .. (scalar values %$dataset) - 1]],
+        color => [@{$self->color}[0 .. (scalar values %$dataset) - 1]],
         legend => [keys %$dataset],
     );
-    return $self;
-}
-
-sub as_uri {
-    my $self = shift;
-    $self->{chart}->as_uri;
+    return $chart->as_uri;
 }
 
