Changeset 27248
- Timestamp:
- 12/23/08 02:38:54 (4 years ago)
- Location:
- lang/perl/Net-Google-Spreadsheets/trunk
- Files:
-
- 3 added
- 4 modified
- 1 moved
-
MANIFEST (modified) (1 diff)
-
lib/Net/Google/Spreadsheets.pm (modified) (3 diffs)
-
lib/Net/Google/Spreadsheets/Base.pm (modified) (4 diffs)
-
lib/Net/Google/Spreadsheets/Cell.pm (added)
-
lib/Net/Google/Spreadsheets/Row.pm (added)
-
lib/Net/Google/Spreadsheets/Worksheet.pm (modified) (3 diffs)
-
t/05_cell.t (added)
-
t/06_rows.t (moved) (moved from lang/perl/Net-Google-Spreadsheets/trunk/t/05_rows.t)
Legend:
- Unmodified
- Added
- Removed
-
lang/perl/Net-Google-Spreadsheets/trunk/MANIFEST
r27202 r27248 19 19 lib/Net/Google/Spreadsheets.pm 20 20 lib/Net/Google/Spreadsheets/Base.pm 21 lib/Net/Google/Spreadsheets/Cell.pm 22 lib/Net/Google/Spreadsheets/Row.pm 21 23 lib/Net/Google/Spreadsheets/Spreadsheet.pm 22 24 lib/Net/Google/Spreadsheets/Worksheet.pm -
lang/perl/Net-Google-Spreadsheets/trunk/lib/Net/Google/Spreadsheets.pm
r27168 r27248 160 160 161 161 sub post { 162 my ($self, $url, $entry, $ query) = @_;162 my ($self, $url, $entry, $header) = @_; 163 163 my $res = $self->request( 164 164 { 165 165 uri => $url, 166 query => $query || undef,167 166 content => $entry->as_xml, 167 header => $header || undef, 168 168 content_type => 'application/atom+xml', 169 169 } 170 170 ); 171 return XML::Atom::Entry->new(\($res->content)); 171 return (ref $entry)->new(\($res->content)); 172 # return XML::Atom::Entry->new(\($res->content)); 172 173 } 173 174 … … 179 180 uri => $args->{self}->editurl, 180 181 content => $args->{entry}->as_xml, 181 header => {'If-Match' => $args->{self}->etag },182 header => {'If-Match' => $args->{self}->etag }, 182 183 content_type => 'application/atom+xml', 183 184 } … … 197 198 use Net::Google::Spreadsheets; 198 199 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' 205 203 ); 206 204 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'}); 210 208 my $worksheet = $spreadsheet->worksheet(1); 211 209 -
lang/perl/Net-Google-Spreadsheets/trunk/lib/Net/Google/Spreadsheets/Base.pm
r27203 r27248 17 17 gs => 'http://schemas.google.com/spreadsheets/2006', 18 18 gsx => 'http://schemas.google.com/spreadsheets/2006/extended', 19 batch => 'http://schemas.google.com/gdata/batch', 19 20 ); 20 21 … … 55 56 has content => ( 56 57 isa => 'Str', 57 is => 'r w',58 is => 'ro', 58 59 ); 59 60 … … 92 93 } 93 94 95 sub 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 94 102 sub entry { 95 103 my ($self) = @_; … … 107 115 sub update { 108 116 my ($self) = @_; 117 $self->etag or return; 109 118 my $atom = $self->service->put( 110 119 { -
lang/perl/Net-Google-Spreadsheets/trunk/lib/Net/Google/Spreadsheets/Worksheet.pm
r27168 r27248 1 1 package Net::Google::Spreadsheets::Worksheet; 2 2 use Moose; 3 use Net::Google::Spreadsheets::Row; 4 use Net::Google::Spreadsheets::Cell; 3 5 4 6 extends 'Net::Google::Spreadsheets::Base'; … … 18 20 ); 19 21 22 has cellsfeed => ( 23 isa => 'Str', 24 is => 'ro', 25 ); 26 20 27 around entry => sub { 21 28 my ($next, $self) = @_; … … 28 35 after _update_atom => sub { 29 36 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; 30 41 $self->{row_count} = $self->atom->get($self->gs, 'rowCount'); 31 42 $self->{col_count} = $self->atom->get($self->gs, 'colCount'); 32 43 }; 44 45 46 sub rows { 47 my ($self, $cond) = @_; 48 return $self->list_contents('Net::Google::Spreadsheets::Row', $cond); 49 } 50 51 sub 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 61 sub 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 90 sub 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 } 33 103 34 104 1;
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)