redis-objects 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.rdoc CHANGED
@@ -1,4 +1,4 @@
1
- = Redis::Objects - Lightweight, atomic object layer around redis-rb
1
+ = Redis::Objects - Map Redis types directly to Ruby objects
2
2
 
3
3
  This is *not* an ORM. People that are wrapping ORM's around Redis are missing
4
4
  the point.
@@ -53,22 +53,21 @@ Familiar Ruby array operations Just Work (TM):
53
53
  @team.on_base << 'player1'
54
54
  @team.on_base << 'player2'
55
55
  @team.on_base << 'player3'
56
- puts @team.on_base # ['player1', 'player2']
56
+ @team.on_base # ['player1', 'player2']
57
57
  @team.on_base.pop
58
58
  @team.on_base.shift
59
59
  @team.on_base.length # 1
60
60
  @team.on_base.delete('player3')
61
-
61
+
62
62
  Sets work like the Ruby {Set}[http://ruby-doc.org/core/classes/Set.html] class:
63
63
 
64
- @team.outfielders['1b'] = 'outfielder1'
65
- @team.outfielders['lf'] = 'outfielder3'
66
- @team.outfielders['lf'] = 'outfielder2'
67
- @team.outfielders.keys
68
- @team.outfielders.each do |position,player|
69
- puts "#{player} is playing #{position}"
64
+ @team.outfielders << 'outfielder1' << 'outfielder1'
65
+ @team.outfielders << 'outfielder2'
66
+ @team.outfielders # ['outfielder1', 'outfielder2']
67
+ @team.outfielders.each do |player|
68
+ puts player
70
69
  end
71
- position = @team.outfielders.detect{|pos,of| of == 'outfielder3'}
70
+ player = @team.outfielders.detect{|of| of == 'outfielder2'}
72
71
 
73
72
  Note counters cannot be assigned to, only incremented/decremented:
74
73
 
@@ -101,15 +100,48 @@ Or can pass the handle into the new method:
101
100
  @counter = Redis::Counter.new('counter_name')
102
101
  @counter.increment
103
102
  @counter.decrement
104
- puts @counter
105
- puts @counter.get # force re-fetch
103
+ puts @counter.value
104
+ @counter.increment do |val|
105
+ raise "Full" if val > MAX_VAL # rewind counter
106
+ end
107
+
108
+ See the section on "Atomicity" for cool uses of atomic counter blocks.
106
109
 
107
110
  === Lists
108
111
 
112
+ These work just like Ruby arrays:
113
+
109
114
  @list = Redis::List.new('list_name')
110
115
  @list << 'a'
111
116
  @list << 'b'
112
- puts @list
117
+ @list.include? 'c' # false
118
+ @list.values # ['a','b']
119
+ @list.shift
120
+ @list.pop
121
+ @list.clear
122
+ # etc
123
+
124
+ === Sets
125
+
126
+ Sets work like the Ruby {Set}[http://ruby-doc.org/core/classes/Set.html] class:
127
+
128
+ @set = Redis::Set.new('set_name')
129
+ @set << 'a'
130
+ @set << 'b'
131
+ @set << 'a'
132
+ @set.member? 'c' # false
133
+ @set.members # ['a','b']
134
+ @set.each do |member|
135
+ puts member
136
+ end
137
+ @set.clear
138
+ # etc
139
+
140
+ === Values
141
+
142
+ @value = Redis::Value.new('value_name')
143
+ @value.value = 'a'
144
+ @value.delete
113
145
 
114
146
  == Atomicity
115
147
 
data/lib/redis/list.rb CHANGED
@@ -59,37 +59,54 @@ class Redis
59
59
  end
60
60
  end
61
61
 
62
+ # Delete the element(s) from the list that match name. If count is specified,
63
+ # only the first-N (if positive) or last-N (if negative) will be removed.
64
+ # Redis: LREM
62
65
  def delete(name, count=0)
63
66
  redis.lrem(key, count, name) # weird api
64
67
  get
65
68
  end
66
69
 
70
+ # Iterate through each member of the set. Redis::Objects mixes in Enumerable,
71
+ # so you can also use familiar methods like +collect+, +detect+, and so forth.
67
72
  def each(&block)
68
73
  values.each(&block)
69
74
  end
70
75
 
76
+ # Return a range of values from +start_index+ to +end_index+. Can also use
77
+ # the familiar list[start,end] Ruby syntax. Redis: LRANGE
71
78
  def range(start_index, end_index)
72
79
  redis.lrange(key, start_index, end_index)
73
80
  end
74
81
 
75
- # Return the value at the given index.
82
+ # Return the value at the given index. Can also use familiar list[index] syntax.
83
+ # Redis: LINDEX
76
84
  def at(index)
77
85
  redis.lindex(key, index)
78
86
  end
79
87
 
88
+ # Return the first element in the list. Redis: LINDEX(0)
89
+ def first
90
+ at(0)
91
+ end
92
+
93
+ # Return the last element in the list. Redis: LINDEX(-1)
80
94
  def last
81
- redis.lrange(key, -1, -1)
95
+ at(-1)
82
96
  end
83
97
 
98
+ # Clear the list entirely. Redis: DEL
84
99
  def clear
85
100
  redis.del(key)
86
101
  end
87
102
 
103
+ # Return the length of the list. Aliased as size. Redis: LLEN
88
104
  def length
89
105
  redis.llen(key)
90
106
  end
91
107
  alias_method :size, :length
92
-
108
+
109
+ # Returns true if there are no elements in the list. Redis: LLEN == 0
93
110
  def empty?
94
111
  length == 0
95
112
  end
data/lib/redis/set.rb CHANGED
@@ -35,6 +35,7 @@ class Redis
35
35
  def member?(value)
36
36
  redis.sismember(key, value)
37
37
  end
38
+ alias_method :include?, :member?
38
39
 
39
40
  # Delete the value from the set. Redis: SREM
40
41
  def delete(name)
@@ -264,12 +264,16 @@ describe Redis::Objects do
264
264
  @roster.player_stats.push 'c'
265
265
  @roster.player_stats.should == ['b','a','c']
266
266
  @roster.player_stats.get.should == ['b','a','c']
267
+ @roster.player_stats.first.should == 'b'
268
+ @roster.player_stats.last.should == 'c'
267
269
  @roster.player_stats << 'd'
268
270
  @roster.player_stats.should == ['b','a','c','d']
269
271
  @roster.player_stats[1].should == 'a'
270
272
  @roster.player_stats[0].should == 'b'
271
273
  @roster.player_stats[2].should == 'c'
272
274
  @roster.player_stats[3].should == 'd'
275
+ @roster.player_stats.include?('c').should be_true
276
+ @roster.player_stats.include?('no').should be_false
273
277
  @roster.player_stats.pop
274
278
  @roster.player_stats[0].should == @roster.player_stats.at(0)
275
279
  @roster.player_stats[1].should == @roster.player_stats.at(1)
@@ -350,7 +354,9 @@ describe Redis::Objects do
350
354
  @roster.outfielders.get.should == ['a','b']
351
355
 
352
356
  @roster.outfielders << 'c'
353
- @roster.outfielders.member? 'c'
357
+ @roster.outfielders.member?('c').should be_true
358
+ @roster.outfielders.include?('c').should be_true
359
+ @roster.outfielders.member?('no').should be_false
354
360
  coll = @roster.outfielders.select{|st| st == 'c'}
355
361
  coll.should == ['c']
356
362
  @roster.outfielders.sort.should == ['a','b','c']
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redis-objects
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nate Wiger