package Redis::Client::Role::Tied;
{
  $Redis::Client::Role::Tied::VERSION = '0.009';
}

# ABSTRACT: Role for tied things that talk to Redis

use Moose::Role;
use Carp 'croak';
use Scalar::Util 'blessed';

has key     => ( is => 'ro', isa => 'Str', required => 1 );
has client  => ( is => 'ro', isa => 'Redis::Client', required => 1 );

sub BUILD { 
    my ( $self ) = @_;
    my $class = blessed $self;

    my ( $c_type ) = ( $class =~ m{::(\w+)$} );
    my $type = $self->client->type( $self->key );

    unless ( $type eq lc $c_type ) { 
        die sprintf "Redis key %s is a %s. Try using Redis::Client::%s instead", $self->key, $type, ucfirst $type;
    }
}

sub _cmd { 
    my ( $self, $cmd, @args ) = @_;

    $self->client->$cmd( $self->{key}, @args );
}

1;




=pod

=head1 NAME

Redis::Client::Role::Tied - Role for tied things that talk to Redis

=head1 VERSION

version 0.009

=head1 DESCRIPTION

This role contains common functionality used by the Redis::Client C<tie> classes.

=encoding utf8

=head1 SEE ALSO

=over

=item L<Redis::Client>

=item L<Redis::Client::String>

=item L<Redis::Client::List>

=item L<Redis::Client::Hash>

=item L<Redis::Client::Set>

=item L<Redis::Client::Zset>

=back

=head1 CONSUMES

=over 4

=item * L<Redis::Client::Role::Tied>

=back

=head1 AUTHOR

Mike Friedman <friedo@friedo.com>

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2011 by Mike Friedman.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.

=cut


__END__




