Changeset 17500

Show
Ignore:
Timestamp:
08/12/08 13:57:14 (5 years ago)
Author:
lopnor
Message:

lang/perl/Google-Chart-DBIC: moosify

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/Google-Chart-DBIC/trunk/lib/Google/Chart/DBIC.pm

    r17483 r17500  
    11package Google::Chart::DBIC; 
     2use Moose; 
    23use Google::Chart (); 
    34use Data::Dumper (); 
     
    67our $VERSION = '0.01'; 
    78 
    8 my @color = qw(ff0000 00ff00 0000ff ffff00 ff00ff 00ffff); 
     9has 'size' => ( 
     10    is => 'rw', 
     11    required => 1, 
     12    default => '400x400', 
     13); 
    914 
    10 sub new { 
    11     my ( $class, $args ) = @_; 
    12     my $self = {}; 
    13     bless $self, $class; 
    14     my $resultset = $args->{resultset}; 
     15has 'type' => ( 
     16    is => 'rw', 
     17    required => 1, 
     18    default => 'line', 
     19); 
     20 
     21has 'color' => ( 
     22    is => 'rw', 
     23    isa => 'ArrayRef[Str]', 
     24    required => 1, 
     25    default => sub { 
     26        [qw(ff0000 00ff00 0000ff ffff00 ff00ff 00ffff)]; 
     27    }, 
     28); 
     29 
     30has 'resultset' => ( 
     31    is => 'rw', 
     32    isa => 'ArrayRef[Object]', 
     33    required => 1, 
     34); 
     35 
     36has 'axis_x' => ( 
     37    is => 'rw', 
     38    isa => 'Str', 
     39); 
     40 
     41has 'max_value' => ( 
     42    is => 'rw', 
     43    isa => 'Num', 
     44); 
     45 
     46no Moose; 
     47 
     48sub as_uri { 
     49    my $self = shift; 
    1550    my $dataset = {}; 
    1651    my $axis_x = []; 
    1752    my $max_value = 0; 
    18     for my $row (@{$resultset}) { 
    19         if (!defined $args->{axis_x} && $row->has_column_loaded('axis_x')) { 
    20             push @$axis_x, $row->get_column('axis_x'); 
     53    for my $row (@{$self->resultset}) { 
     54        if (!defined $self->axis_x && $row->has_column_loaded('axis_x')) { 
     55            my $v = $row->get_column('axis_x'); 
     56            push @$axis_x, $v unless grep {$v} @$axis_x; 
    2157        } 
    2258        for ($row->columns) { 
    23             if (defined $args->{axis_x} && $_ eq $args->{axis_x}){ 
    24                 push @$axis_x, $row->$_; 
     59            next unless $row->has_column_loaded($_); 
     60            my $v = $row->$_; 
     61            if (defined $self->axis_x && $_ eq $self->axis_x){ 
     62                push @$axis_x, $v unless grep {$v} @$axis_x; 
    2563                next; 
    2664            } 
    27             next unless $row->has_column_loaded($_); 
    28             next unless Scalar::Util::looks_like_number $row->$_; 
    29             push @{$dataset->{$_}}, Scalar::Util::looks_like_number $row->$_ ? $row->$_ : undef; 
    30             $max_value = $row->$_ if (defined $row->$_ && $row->$_ >= $max_value); 
     65            next unless Scalar::Util::looks_like_number $v; 
     66            push @{$dataset->{$_}}, Scalar::Util::looks_like_number $v ? $v : undef; 
     67            $max_value = $v if $v >= $max_value; 
    3168        } 
    3269    } 
    33     $max_value = $args->{max_value} || $max_value; 
    34     $self->{chart} = Google::Chart->new( 
    35         size => $args->{size}, 
    36         type => $args->{type}, 
     70    $max_value = $self->max_value || $max_value; 
     71    my $chart = Google::Chart->new( 
     72        size => $self->size, 
     73        type => $self->type, 
    3774        axis => [ 
    3875            { 
     
    5289            }, 
    5390        }, 
    54         color => $args->{color} || [@color[0 .. (scalar values %$dataset) - 1]], 
     91        color => [@{$self->color}[0 .. (scalar values %$dataset) - 1]], 
    5592        legend => [keys %$dataset], 
    5693    ); 
    57     return $self; 
    58 } 
    59  
    60 sub as_uri { 
    61     my $self = shift; 
    62     $self->{chart}->as_uri; 
     94    return $chart->as_uri; 
    6395} 
    6496