1package Net::Google::Calendar::Person; 2 3use strict; 4use XML::Atom::Person; 5use base qw(XML::Atom::Person Net::Google::Calendar::Base); 6 7my %allowed = ( 8 attendeeStatus => [qw(accepted declined invited tentative)], 9 attendeeType => [qw(optional required)], 10 rel => [qw(attendee organizer performer speaker)], 11 12); 13 14=head1 NAME 15 16Net::Google::Calendar::Person - a thin wrapper round XML::Atom::Person 17 18=head1 METHODS 19 20=head2 new 21 22=cut 23 24sub new { 25 my $class = shift; 26 my %opts = @_; 27 $opts{Version} = '1.0' unless exists $opts{Version}; 28 my $self = $class->SUPER::new(%opts); 29 $self->_initialize(); 30 return $self; 31} 32 33 34=head2 name [name] 35 36A simple string value that can be used as a representation of this person. 37 38=cut 39 40sub name { 41 my $self = shift; 42 return $self->_do('@valueString', @_); 43} 44 45=head2 email [email] 46 47Get or set the email of the person 48 49=cut 50 51sub email { 52 my $self = shift; 53 $self->_do('@email', @_); 54} 55 56=head2 attendee_status [status] 57 58Get or set the status of event attendee. 59 60See: 61 62 http://code.google.com/apis/gdata/elements.html#gdAttendeeStatus 63 64Takes or returns any of the values C<accepted>, C<declined>, C<invited>, C<tentative>. 65 66=cut 67 68sub attendee_status { 69 my $self = shift; 70 $self->_do('attendeeStatus', @_); 71} 72 73=head2 attendee_type [type] 74 75Get or set the type of event attendee. 76 77See: 78 79 http://code.google.com/apis/gdata/elements.html#gdAttendeeType 80 81Takes or returns any of the values C<optional>, C<required>. 82 83=cut 84 85sub attendee_type { 86 my $self = shift; 87 $self->_do('attendeeType', @_); 88} 89 90 91=head2 rel [relationship] 92 93=cut 94 95sub rel { 96 my $self = shift; 97 $self->_do('@rel', @_); 98} 99 100 101sub _do { 102 my $self = shift; 103 my $name = shift; 104 my $attr = ($name =~ s!^@!!); 105 $name =~ s!^gd:!!; 106 my $vals = $allowed{$name}; 107 my $gd_ns = ''; # $self->{_gd_ns}; 108 109 my $ns = (defined $vals)? "http://schemas.google.com/g/2005#event." : ""; 110 if (@_) { 111 my $new = shift; 112 $new =~ s!^$ns!!; 113 die "$new is not one of the allowed values for $name (".join(",", @$vals).")" 114 unless !defined $vals || grep { $new eq $_ } @$vals; 115 if ($attr) { 116 #print "Setting attr $name to ${ns}${new}\n"; 117 $self->set_attr($name, "${ns}${new}"); 118 } else { 119 #print "Setting child gd:$name to ${ns}${new}\n"; 120 $self->set($gd_ns, "gd:${name}", '', { value => "${ns}${new}" }); 121 } 122 } 123 my $val; 124 if ($attr) { 125 $val = $self->get_attr($name); 126 } else { 127 my $tmp = $self->_my_get($gd_ns, "gd:${name}"); 128 if (defined $tmp) { 129 $val = $tmp->getAttribute('value'); 130 } 131 # else { print "Failed to get gd:${name}\n"; } 132 } 133 $val =~ s!^$ns!! if defined $val; 134 return $val; 135} 1361; 137