package Catalyst::Authentication::Store::Tangram::User;
use strict;
use warnings;
use base qw/Catalyst::Authentication::User/;
use Carp qw/confess/;
use Scalar::Util qw/blessed/;
use overload '""' => sub { shift->id }, fallback => 1;
BEGIN {
__PACKAGE__->mk_accessors(qw/_tangram _storage _store _roles/);
}
sub new {
my ($class, $storage, $tangram_ob, $store) = @_;
bless { _storage => $storage, _tangram => $tangram_ob, _store => $store }, $class;
}
*get_object = \&_tangram;
sub id {
my ($self) = @_;
return $self->_storage->id($self->_tangram);
}
sub roles {
my ($self) = @_;
$self->_roles([$self->_store->lookup_roles($self)])
unless $self->_roles;
return @{ $self->_roles };
}
sub supported_features {
return {
password => { self_check => 0, },
session => 1,
roles => { self_check => 0, },
};
}
sub AUTOLOAD {
my $self = shift;
( my $method ) = ( our $AUTOLOAD =~ /([^:]+)$/ );
return if $method eq "DESTROY";
confess("Could not call method $method on tangram class " .
blessed($self->_tangram)) unless $self->_tangram->can($method);
$self->_tangram->$method;
}
1;
=head1 NAME
Catalyst::Authentication::Store::Tangram::User - A thin adaptor
to adapt any Tangram class to behave as needed by
L<Catalyst::Authentication::User>
=head1 SYNOPSIS
$c->user->id; # Returns unique user ID
$c->user->get('email_address'); # Retrieve value from the underlying Tangram object.
$c->user->get_object; # Get the underlying Tangram object yourself.
=head1 DESCRIPTION
The Catalyst::Authentication::Store::Tangram::User class encapsulates any
Tangram class in the L<Catalyst::Authentication::User> interface. An instance
of it will be returned by C<< $c->user >> when using
L<Catalyst::Authentication::Store::Tangram>. Methods not defined in this module
are passed through to the Tangram object. The object stringifies to the
Tangram ID.
=head1 METHODS
=head2 new ($class, $storage, $tangram_object)
Simple constructor
=head2 id
Unique Tangram ID for this object
=head2 get_object
Returns the underlying Tangram user object.
=head2 roles
Returns the list of roles which this user is authorised to do.
=head2 supported_features
Returns hashref of features that this Authentication::User subclass supports.
=head1 AUTHOR
Tomas Doran, <bobtfish at bobtfish dot net>
With thanks to state51, my employer, for giving me the time to work on this.
=head1 BUGS
All complex software has bugs, and I'm sure that this module is no exception.
Please report bugs through the rt.cpan.org bug tracker.
=head1 COPYRIGHT
Copyright (c) 2008, state51. Some rights reserved.
This module is free software; you can use, redistribute, and modify it under
the same terms as Perl 5.8.x.
=cut