package Reddit::Client::VotableThing;
use strict;
use warnings;
use Carp;
require Reddit::Client::Thing;
use base qw/Reddit::Client::Thing/;
use fields qw/ups downs likes score edited/;
# likes may be true, false, or null, based on user vote
sub set_likes {
my ($self, $value) = @_;
$self->set_bool('likes', $value) if defined $value;
}
sub vote {
my ($self, $direction) = @_;
$self->{session}->vote($self->{name}, $direction);
}
sub comment {
my ($self, $comment) = @_;
$self->{session}->submit_comment(parent_id => $self->{name}, text => $comment);
}
sub save {
my $self = shift;
$self->{session}->save($self->{name});
}
sub unsave {
my $self = shift;
$self->{session}->unsave($self->{name});
}
sub hide {
my $self = shift;
$self->{session}->hide($self->{name});
}
sub unhide {
my $self = shift;
$self->{session}->unhide($self->{name});
}
1;
__END__
=pod
=head1 NAME
Reddit::Client::VotableThing
=head1 DESCRIPTION
A Thing object, such as a Comment or Link, that may be voted on,
commented against, hidden, or saved.
=head1 SUBROUTINES/METHODS
=over
=item vote($direction)
=item comment($text)
=item save()
=item unsave()
=item hide()
=item unhide()
=back
=head1 INTERNAL ROUTINES
=over
=item set_likes
Conditionally sets the value of "likes" since it may validly be true, false, or
neither, in the case of no vote being cast.
=back
=head1 AUTHOR
Jeff Ober L<mailto:jeffober@gmail.com>
=head1 LICENSE
BSD license
=cut