Changeset 27248

Show
Ignore:
Timestamp:
12/23/08 02:38:54 (4 years ago)
Author:
lopnor
Message:

cell manipulations

Location:
lang/perl/Net-Google-Spreadsheets/trunk
Files:
3 added
4 modified
1 moved

Legend:

Unmodified
Added
Removed
  • lang/perl/Net-Google-Spreadsheets/trunk/MANIFEST

    r27202 r27248  
    1919lib/Net/Google/Spreadsheets.pm 
    2020lib/Net/Google/Spreadsheets/Base.pm 
     21lib/Net/Google/Spreadsheets/Cell.pm 
     22lib/Net/Google/Spreadsheets/Row.pm 
    2123lib/Net/Google/Spreadsheets/Spreadsheet.pm 
    2224lib/Net/Google/Spreadsheets/Worksheet.pm 
  • lang/perl/Net-Google-Spreadsheets/trunk/lib/Net/Google/Spreadsheets.pm

    r27168 r27248  
    160160 
    161161sub post { 
    162     my ($self, $url, $entry, $query) = @_; 
     162    my ($self, $url, $entry, $header) = @_; 
    163163    my $res = $self->request( 
    164164        { 
    165165            uri => $url, 
    166             query => $query || undef, 
    167166            content => $entry->as_xml, 
     167            header => $header || undef, 
    168168            content_type => 'application/atom+xml', 
    169169        } 
    170170    ); 
    171     return XML::Atom::Entry->new(\($res->content)); 
     171    return (ref $entry)->new(\($res->content)); 
     172#    return XML::Atom::Entry->new(\($res->content)); 
    172173} 
    173174 
     
    179180            uri => $args->{self}->editurl, 
    180181            content => $args->{entry}->as_xml, 
    181             header => {'If-Match' => $args->{self}->etag}, 
     182            header => {'If-Match' => $args->{self}->etag }, 
    182183            content_type => 'application/atom+xml', 
    183184        } 
     
    197198  use Net::Google::Spreadsheets; 
    198199 
    199   my $api = Net::Google::Spreadsheets->new; 
    200   my $res = $api->login( 
    201     { 
    202         username => 'myname@gmail.com',  
    203         password => 'mypassword' 
    204     } 
     200  my $service = Net::Google::Spreadsheets->new( 
     201    username => 'myname@gmail.com',  
     202    password => 'mypassword' 
    205203  ); 
    206204   
    207   my @spreadsheets = $api->list(); 
    208  
    209   my $spreadsheet = $api->spreadsheet('pZV-pns_sm9PtH2WowhU2Ew'); 
     205  my @spreadsheets = $service->spreadsheets(); 
     206 
     207  my $spreadsheet = $api->spreadsheet({key => 'pZV-pns_sm9PtH2WowhU2Ew'}); 
    210208  my $worksheet = $spreadsheet->worksheet(1); 
    211209 
  • lang/perl/Net-Google-Spreadsheets/trunk/lib/Net/Google/Spreadsheets/Base.pm

    r27203 r27248  
    1717    gs => 'http://schemas.google.com/spreadsheets/2006', 
    1818    gsx => 'http://schemas.google.com/spreadsheets/2006/extended', 
     19    batch => 'http://schemas.google.com/gdata/batch', 
    1920); 
    2021 
     
    5556has content => ( 
    5657    isa => 'Str', 
    57     is => 'rw', 
     58    is => 'ro', 
    5859); 
    5960 
     
    9293} 
    9394 
     95sub list_contents { 
     96    my ($self, $class, $cond) = @_; 
     97    $self->content or return; 
     98    my $feed = $self->service->feed($self->content, $cond); 
     99    return map {$class->new(container => $self, atom => $_)} $feed->entries; 
     100} 
     101 
    94102sub entry { 
    95103    my ($self) = @_; 
     
    107115sub update { 
    108116    my ($self) = @_; 
     117    $self->etag or return; 
    109118    my $atom = $self->service->put( 
    110119        { 
  • lang/perl/Net-Google-Spreadsheets/trunk/lib/Net/Google/Spreadsheets/Worksheet.pm

    r27168 r27248  
    11package Net::Google::Spreadsheets::Worksheet; 
    22use Moose; 
     3use Net::Google::Spreadsheets::Row; 
     4use Net::Google::Spreadsheets::Cell; 
    35 
    46extends 'Net::Google::Spreadsheets::Base'; 
     
    1820); 
    1921 
     22has cellsfeed => ( 
     23    isa => 'Str', 
     24    is => 'ro', 
     25); 
     26 
    2027around entry => sub { 
    2128    my ($next, $self) = @_; 
     
    2835after _update_atom => sub { 
    2936    my ($self) = @_; 
     37    $self->{content} = $self->atom->content->elem->getAttribute('src'); 
     38    ($self->{cellsfeed}) = map {$_->href} grep { 
     39        $_->rel eq 'http://schemas.google.com/spreadsheets/2006#cellsfeed' 
     40    } $self->atom->link; 
    3041    $self->{row_count} = $self->atom->get($self->gs, 'rowCount'); 
    3142    $self->{col_count} = $self->atom->get($self->gs, 'colCount'); 
    3243}; 
     44 
     45 
     46sub rows { 
     47    my ($self, $cond) = @_; 
     48    return $self->list_contents('Net::Google::Spreadsheets::Row', $cond); 
     49} 
     50 
     51sub cell { 
     52    my ($self, $row, $col) = @_; 
     53    $self->cellsfeed or return; 
     54    my $url = sprintf "%s/R%sC%s", $self->cellsfeed, $row, $col; 
     55    return Net::Google::Spreadsheets::Cell->new( 
     56        container => $self, 
     57        atom => $self->service->entry($url), 
     58    ); 
     59} 
     60 
     61sub batchupdate_cell { 
     62    my ($self, @args) = @_; 
     63    my $feed = XML::Atom::Feed->new; 
     64    for ( @args ) { 
     65        my $id = sprintf("%s/R%sC%s",$self->cellsfeed, $_->{row}, $_->{col}); 
     66        my $entry = Net::Google::Spreadsheets::Cell->new( 
     67            id => $id, 
     68            editurl => $id, 
     69            row => $_->{row}, 
     70            col => $_->{col}, 
     71            input_value => $_->{input_value}, 
     72        )->entry; 
     73        $entry->set($self->batch, operation => '', {type => 'update'}); 
     74        $entry->set($self->batch, id => $id); 
     75        $feed->add_entry($entry); 
     76    } 
     77    my $res_feed = $self->service->post($self->cellsfeed."/batch", $feed, {'If-Match' => '*'}); 
     78    $self->sync; 
     79    return map {  
     80        Net::Google::Spreadsheets::Cell->new( 
     81            atom => $_, 
     82            container => $self, 
     83        ) 
     84    } grep { 
     85        my ($node) = $_->elem->getChildrenByTagNameNS($self->batch->{uri}, 'status'); 
     86        $node->getAttribute('code') == 200; 
     87    } $res_feed->entries; 
     88} 
     89 
     90sub insert_row { 
     91    my ($self, $args) = @_; 
     92    my $entry = XML::Atom::Entry->new; 
     93    while (my ($key, $value) = each %{$args}) { 
     94        $entry->set($self->gsx, $key, $value); 
     95    } 
     96    my $atom = $self->service->post($self->content, $entry); 
     97    $self->sync; 
     98    return Net::Google::Spreadsheets::Row->new( 
     99        container => $self, 
     100        atom => $atom, 
     101    ); 
     102} 
    33103 
    341041;