From: Dobrica Pavlinusic Date: Sat, 21 Mar 2009 22:20:51 +0000 (+0000) Subject: setnx X-Git-Tag: 0.0801~58 X-Git-Url: http://git.rot13.org/?p=perl-Redis.git;a=commitdiff_plain;h=a57e5b0908eea8c9a2dbd0c0a0a36729afa5fc58;hp=3e0104f8caed52c0991f2662b80aa8c137df77ad setnx git-svn-id: svn+ssh://llin/home/dpavlin/private/svn/Redis@5 447b33ff-793d-4489-8442-9bea7d161be5 --- diff --git a/lib/Redis.pm b/lib/Redis.pm index bc65da9..d03416e 100644 --- a/lib/Redis.pm +++ b/lib/Redis.pm @@ -5,6 +5,7 @@ use strict; use IO::Socket::INET; use Data::Dump qw/dump/; +use Carp qw/confess/; =head1 NAME @@ -80,15 +81,15 @@ sub ping { =head2 set - $r->set( foo => 'bar' ); + $r->set( foo => 'bar', $new ); =cut sub set { - my ( $self, $k, $v ) = @_; - print $sock "SET $k " . length($v) . "\r\n$v\r\n"; + my ( $self, $k, $v, $new ) = @_; + print $sock ( $new ? "SETNX" : "SET" ) . " $k " . length($v) . "\r\n$v\r\n"; my $ok = <$sock>; - die dump($ok) unless $ok eq "+OK\r\n"; + confess dump($ok) unless $ok eq "+OK\r\n"; } =head2 get diff --git a/t/01-Redis.t b/t/01-Redis.t index 0d50d6d..1990e08 100755 --- a/t/01-Redis.t +++ b/t/01-Redis.t @@ -3,7 +3,7 @@ use warnings; use strict; -use Test::More tests => 93; +use Test::More tests => 18; use lib 'lib'; @@ -15,12 +15,20 @@ ok( my $o = Redis->new(), 'new' ); ok( $o->ping, 'ping' ); -ok( $o->set( foo => 'bar' ), 'set foo' ); -cmp_ok( $o->get( 'foo' ), 'eq', 'bar', 'get foo' ); +ok( $o->set( foo => 'bar' ), 'set foo => bar' ); + +eval { $o->set( foo => 'bar', 1 ) }; +ok( $@, 'set foo => bar new again failed' ); + +cmp_ok( $o->get( 'foo' ), 'eq', 'bar', 'get foo = bar' ); + +ok( $o->set( foo => 'baz' ), 'set foo => baz' ); + +cmp_ok( $o->get( 'foo' ), 'eq', 'baz', 'get foo = baz' ); ok( ! $o->get( 'non-existant' ), 'get non-existant' ); -foreach ( 0 .. 42 ) { +foreach ( 0 .. 3 ) { ok( $o->set( "key-$_" => $_ ), "set key-$_" ); cmp_ok( $o->get( "key-$_" ), 'eq', $_, "get key-$_" ); }