package Net::Google::Spreadsheets::Row;
use Any::Moose;
use Net::Google::DataAPI;
use XML::Atom::Util qw(nodelist);
with
'Net::Google::DataAPI::Role::Entry',
'Net::Google::DataAPI::Role::HasContent';
after from_atom => sub {
my ($self) = @_;
for my $node (nodelist($self->elem, $self->ns('gsx')->{uri}, '*')) {
$self->content->{$node->localname} = $node->textContent;
}
};
around to_atom => sub {
my ($next, $self) = @_;
my $entry = $next->($self);
while (my ($key, $value) = each %{$self->content}) {
$entry->set($self->ns('gsx'), $key, $value);
}
return $entry;
};
__PACKAGE__->meta->make_immutable;
no Any::Moose;
no Net::Google::DataAPI;
1;
__END__
=head1 NAME
Net::Google::Spreadsheets::Row - A representation class for Google Spreadsheet row.
=head1 SYNOPSIS
use Net::Google::Spreadsheets;
my $service = Net::Google::Spreadsheets->new(
username => 'mygoogleaccount@example.com',
password => 'mypassword',
);
# get a row
my $row = $service->spreadsheet(
{
title => 'list for new year cards',
}
)->worksheet(
{
title => 'Sheet1',
}
)->row(
{
sq => 'id = 1000'
}
);
# get the content of a row
my $hashref = $row->content;
my $id = $hashref->{id};
my $address = $hashref->{address};
# update a row
$row->content(
{
id => 1000,
address => 'somewhere',
zip => '100-0001',
name => 'Nobuo Danjou',
}
);
# get and set values partially
my $value = $row->param('name');
# returns 'Nobuo Danjou'
# it's same by getting via param method without args, or content method:
my $value_by_param = $row->param->{name};
my $value_by_content = $row->content->{name};
my $newval = $row->param({address => 'elsewhere'});
# updates address (and keeps other fields) and returns new row value (with all fields)
my $hashref2 = $row->param;
# same as $row->content;
# delete the row
$row->delete;
=head1 METHODS
=head2 param
sets and gets content value.
=head2 delete
deletes the row.
=head1 CAVEATS
Space characters in hash key of rows will be removed when you access rows. See below.
my $ws = Net::Google::Spreadsheets->new(
username => 'me@gmail.com',
password => 'foobar'
)->spreadsheet({titile => 'sample'})->worksheet(1);
$ws->batchupdate_cell(
{col => 1,row => 1, input_value => 'name'},
{col => 2,row => 1, input_value => 'mail address'},
);
$ws->add_row(
{
name => 'my name',
mailaddress => 'me@gmail.com',
# above passes, below fails.
# 'mail address' => 'me@gmail.com',
}
);
Instead, Net::Google::Spreadsheets::Table and Net::Google::Spreadsheets::Record allows
space characters in column name.
my $s = Net::Google::Spreadsheets->new(
username => 'me@gmail.com',
password => 'foobar'
)->spreadsheet({titile => 'sample'});
my $t = $s->add_table(
{
worksheet => $s->worksheet(1),
columns => ['name', 'mail address'],
}
);
$t->add_record(
{
name => 'my name',
'mail address' => 'me@gmail.com',
}
);
=head1 ATTRIBUTES
=head2 content
Rewritable attribute. You can get and set the value.
So it's the same thing to get the value with param method or content attribute.
my $value = $row->param('foo');
# it's same
my $value2 = $row->content->{'foo'};
=head1 SEE ALSO
L
L
L
=head1 AUTHOR
Nobuo Danjou Edanjou@soffritto.orgE
=cut