easyredis 0.0.5 → 0.0.6

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/Manifest CHANGED
@@ -5,4 +5,4 @@ Rakefile
5
5
  easyredis.gemspec
6
6
  lib/easyredis.rb
7
7
  tests/benchmark.rb
8
- tests/test.rb
8
+ tests/man.rb
data/README.md CHANGED
@@ -14,9 +14,7 @@ Or, you can get the source with git:
14
14
 
15
15
  $ git clone git://github.com/alecbenzer/easyredis.git
16
16
 
17
- or just download and extract a tar archive with the Downloads button.
18
-
19
- Once you have the source, you can run:
17
+ and run:
20
18
 
21
19
  $ rake manifest
22
20
  $ rake build_gemspec
@@ -53,17 +51,16 @@ Or, we can choose our own ids:
53
51
 
54
52
  p = Post.new("coolpost")
55
53
  p.title = "A Cool Post"
56
- p.body = "This post has a high level of coolnes."
54
+ p.body = "This post has a high level of coolness."
57
55
 
58
56
  p2 = Post.find("coolpost") # this is a very fast lookup
59
57
  p2.title # => "A Cool Post"
60
58
 
61
59
  We also get a created_at field for free that we can sort by.
62
60
 
63
- p.created_at # a ruby Time object
64
- Post.all # get all posts, ordered by creation time
65
- Post.all :order => :desc # specifying an order option
66
- Post[41] # the 42nd (0-based indexing) post that was created
61
+ p.created_at # a ruby Time object
62
+ Post.all :order => :desc # all posts ordered by descending time
63
+ Post[n] # the nth (0-based indexing) post that was created
67
64
 
68
65
  ## Searching and Sorting
69
66
 
@@ -85,18 +82,18 @@ And also search:
85
82
  Post.search_by :title, "A common title" # all posts with this title
86
83
  Post.find_by :title, "My First Post" # just one post
87
84
 
88
- ## Text Search and Completions
85
+ ## Implicit References
89
86
 
90
- We could have defined Post like this:
87
+ You may have noticed fields have not been given any types. EasyRedis automatically tracks the type of a field based on the type of data you assign it.
91
88
 
92
- class Post < EasyRedis::Model
93
- field :title
94
- field :body
89
+ This works for references, too:
95
90
 
96
- text_search :title
91
+ class Comment < EasyRedis::Model
92
+ field :text
93
+ field :post
97
94
  end
98
-
99
- Now we can perform text searches and completions against our title field:
100
-
101
- Post.matches(:title,"Fir") # titles that begin with "Fir"
102
- Post.match(:title,"First") # posts whose titles contain "First"
95
+
96
+ c = Comment.new
97
+ c.text = "A comment!"
98
+
99
+ c.post = Post[0]
data/Rakefile CHANGED
@@ -2,9 +2,9 @@ require 'rubygems'
2
2
  require 'rake'
3
3
  require 'echoe'
4
4
 
5
- Echoe.new('easyredis','0.0.5') do |p|
5
+ Echoe.new('easyredis','0.0.6') do |p|
6
6
  p.description = "framework designed to make using redis as a database simpler"
7
- p.url = "https://github.com/alecbenzer/easyredis"
7
+ p.url = "http://alecbenzer.github.com/easyredis/"
8
8
  p.author = "Alec Benzer"
9
9
  p.email = "alecbezer @nospam@ gmail.com"
10
10
  p.ignore_pattern = ["*.rdb"]
@@ -13,7 +13,7 @@ end
13
13
 
14
14
 
15
15
  require 'benchmark'
16
- require './tests/test'
16
+ require './tests/man'
17
17
 
18
18
  def rand_name(length=2)
19
19
  chars = []
@@ -24,14 +24,14 @@ end
24
24
 
25
25
  namespace :bm do
26
26
  task :clear do
27
- puts "destroying #{Man.count} previous entries"
27
+ puts "destroying #{Man.count} previous entries (sec)"
28
28
  time = Benchmark.measure { Man.destroy_all }
29
29
  puts time.format
30
30
  end
31
31
 
32
32
  task :add do
33
33
  count = ENV["count"] ? ENV["count"].to_i : 25000
34
- puts "adding #{count} new entries"
34
+ puts "adding #{count} new entries (sec)"
35
35
  time = Benchmark::Tms.new
36
36
  length = Math.log(3*count,26).round
37
37
  count.times do
@@ -49,7 +49,7 @@ namespace :bm do
49
49
  name = Man.rand.name
50
50
  count = -1
51
51
  time = Benchmark.measure { count = Man.search_by(:name,name).count }
52
- puts "retrived #{count} records in:"
52
+ puts "retrived #{count} records in (ms):"
53
53
  puts (time*1000).format
54
54
  end
55
55
 
@@ -59,9 +59,9 @@ namespace :bm do
59
59
  age = rand(100)
60
60
  t1 = Benchmark.measure { Man.search(:age => age) }
61
61
  t2 = Benchmark.measure { Man.search_by(:age,age) }
62
- puts "Model#search:"
62
+ puts "Model#search (ms):"
63
63
  puts (t1*1000).format
64
- puts "Model#search_by:"
64
+ puts "Model#search_by (ms):"
65
65
  puts (t2*1000).format
66
66
  puts "search is #{((t1.real/t2.real) - 1)*100}% slower"
67
67
  end
@@ -72,15 +72,17 @@ namespace :bm do
72
72
  age = man.age
73
73
  count = 0
74
74
  time = Benchmark.measure { count = Man.search(:name => name, :age => age).size }
75
- puts "retrived #{count} out of #{Man.count} entries in:"
75
+ puts "retrived #{count} out of #{Man.count} entries in (ms):"
76
76
  puts (time*1000).format
77
77
  end
78
78
 
79
79
  task :find do
80
- puts "finding one of #{Man.count} entries by name"
80
+ puts "finding one of #{Man.count} entries by name (ms)"
81
81
  name = Man.rand.name
82
82
  time = Benchmark.measure { Man.find_by(:name,name) }
83
83
  puts (time*1000).format
84
84
  end
85
85
 
86
+ task :all => [:populate, :search, :multisearch, :find]
87
+
86
88
  end
@@ -2,20 +2,20 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{easyredis}
5
- s.version = "0.0.5"
5
+ s.version = "0.0.6"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Alec Benzer"]
9
- s.date = %q{2011-02-09}
9
+ s.date = %q{2011-05-16}
10
10
  s.description = %q{framework designed to make using redis as a database simpler}
11
11
  s.email = %q{alecbezer @nospam@ gmail.com}
12
12
  s.extra_rdoc_files = ["LICENSE", "README.md", "lib/easyredis.rb"]
13
- s.files = ["LICENSE", "Manifest", "README.md", "Rakefile", "easyredis.gemspec", "lib/easyredis.rb", "tests/benchmark.rb", "tests/test.rb"]
14
- s.homepage = %q{https://github.com/alecbenzer/easyredis}
13
+ s.files = ["LICENSE", "Manifest", "README.md", "Rakefile", "easyredis.gemspec", "lib/easyredis.rb", "tests/benchmark.rb", "tests/man.rb"]
14
+ s.homepage = %q{http://alecbenzer.github.com/easyredis/}
15
15
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Easyredis", "--main", "README.md"]
16
16
  s.require_paths = ["lib"]
17
17
  s.rubyforge_project = %q{easyredis}
18
- s.rubygems_version = %q{1.5.0}
18
+ s.rubygems_version = %q{1.6.2}
19
19
  s.summary = %q{framework designed to make using redis as a database simpler}
20
20
 
21
21
  if s.respond_to? :specification_version then
@@ -12,7 +12,7 @@ require 'set'
12
12
  # main EasyRedis module which
13
13
  # holds all classes and helper methods
14
14
  module EasyRedis
15
-
15
+
16
16
  # generate a 'score' for a string
17
17
  # used for storing it in a sorted set
18
18
  #
@@ -81,10 +81,10 @@ module EasyRedis
81
81
  end
82
82
  end
83
83
 
84
- # exception that indicates that the given field has not been indexed for text-searching
85
- class FieldNotTextSearchable < RuntimeError
84
+ # exception that indicates that the given field has not been indexed for sorting/searching
85
+ class FieldNotSearchable < RuntimeError
86
86
  def initialize(field)
87
- @message = "field '#{field.to_s}' not text-searchable"
87
+ @message = "field '#{field.to_s}' not searchable"
88
88
  end
89
89
 
90
90
  def to_s
@@ -92,6 +92,17 @@ module EasyRedis
92
92
  end
93
93
  end
94
94
 
95
+ # exception that indicates that the given field has not been indexed for text-searching
96
+ # class FieldNotTextSearchable < RuntimeError
97
+ # def initialize(field)
98
+ # @message = "field '#{field.to_s}' not text-searchable"
99
+ # end
100
+ #
101
+ # def to_s
102
+ # @message
103
+ # end
104
+ # end
105
+
95
106
  # exception that indicated an unknown ordering option was encountered
96
107
  class UnknownOrderOption < RuntimeError
97
108
  def initialize(opt)
@@ -107,6 +118,10 @@ module EasyRedis
107
118
  class Collection
108
119
  include Enumerable
109
120
 
121
+ def initialize(&p)
122
+ @access = p
123
+ end
124
+
110
125
  # access elements in this sort
111
126
  #
112
127
  # Work's like an Array's [] method. It can take a specific index, a range, or an offset and an amount/limit.
@@ -151,71 +166,33 @@ module EasyRedis
151
166
  end
152
167
  end
153
168
 
154
- private
155
-
156
- # access the elements corresponding to the given range
157
- #
158
- # meant to be overridden in child classes
159
- def access(range)
160
- []
161
- end
162
-
163
- end
164
-
165
- # class representing a sort
166
- class Sort < Collection
167
-
168
- # initialize the sort with a specific field, ordering option, and model
169
- #
170
- # @param [Symbol] field a symbol corresponding to a field of klass
171
- # @param [:asc, :desc] order a symbol specifying to sort in either ascending or descending order
172
- # @param [Class] klass the klass whose entries we are accessing
173
- def initialize(field,order,klass)
174
- raise EasyRedis::FieldNotSortable, field unless klass.sortable?(field)
175
- raise EasyRedis::UnknownOrderOption, order unless [:asc,:desc].member? order
176
- @field = field
177
- @order = order
178
- @klass = klass
179
- end
180
-
181
- # return the number of elements in this sort
182
- #
183
- # As of now, idential to the Model's count method.
184
- # This method is explicility defined here to overwrite the default one in Enumerable, which iterates through all the entries to count them, which is much slower than a ZCARD command
185
- def count
186
- @count ||= EasyRedis.redis.zcard(@klass.sort_key(@field))
187
- @count
188
- end
189
-
190
169
  def inspect
191
- "#<EasyRedis::Sort model=#{@klass.name}, field=#{@field.to_s}, order=#{@order.to_s}>"
170
+ "#<EasyRedis::Collection>"
192
171
  end
193
172
 
194
173
  private
195
174
 
196
- # takes a range and returns corresponding elements
175
+ # access the elements corresponding to the given range
176
+ #
177
+ # meant to be overridden in child classes
197
178
  def access(range)
198
- a = range.begin
199
- b = range.end
200
- b -= 1 if range.exclude_end?
201
- ids = []
202
- if @order == :asc
203
- ids = EasyRedis.redis.zrange(@klass.sort_key(@field),a,b)
204
- elsif @order == :desc
205
- ids = EasyRedis.redis.zrevrange(@klass.sort_key(@field),a,b)
179
+ if @access
180
+ @access[range]
181
+ else
182
+ []
206
183
  end
207
- ids.map{|i|@klass.build(i)}
208
184
  end
209
185
 
210
186
  end
211
187
 
212
-
213
188
  # class representing a data model
214
189
  # you want to store in redis
215
190
  class Model
216
191
 
217
192
  @@sorts = []
218
- @@text_searches = []
193
+ @@searches = []
194
+ @@types = {}
195
+ # @@text_searches = []
219
196
 
220
197
  # add a field to the model
221
198
  #
@@ -233,42 +210,77 @@ module EasyRedis
233
210
  if prev
234
211
  prev
235
212
  else
236
- instance_variable_set(instance_var,Marshal.load(EasyRedis.redis.hget(key_name,name)))
213
+ data = EasyRedis.redis.hget(key_name,name)
214
+ type = get_type(name)
215
+ if type == 'int'
216
+ data = data.to_i
217
+ elsif type == 'flt'
218
+ data = data.to_f
219
+ elsif type == 'str'
220
+ data = data.to_s
221
+ elsif type.match /^model:/
222
+ klass = eval(type[6..-1])
223
+ data = klass.find(data)
224
+ end
225
+ instance_variable_set(instance_var,data)
237
226
  end
238
227
  end
239
228
 
240
229
  define_method setter.to_sym do |val|
241
- EasyRedis.redis.hset(key_name,name,Marshal.dump(val))
242
230
  instance_variable_set(instance_var,val)
231
+ if val.is_a? Fixnum
232
+ set_type(name,'int')
233
+ elsif val.is_a? Float
234
+ set_type(name,'flt')
235
+ elsif val.is_a? String
236
+ set_type(name,'str')
237
+ elsif val.is_a? EasyRedis::Model
238
+ set_type(name,"model:#{val.class.name}")
239
+ val = val.id
240
+ end # TODO: else.... marshall it
241
+ EasyRedis.redis.hset(key_name,name,val)
243
242
 
244
243
  if self.class.sortable? name.to_sym
245
244
  EasyRedis.redis.zadd(sort_key(name),EasyRedis.score(val),@id)
246
245
  end
247
246
 
248
- if self.class.text_search? name.to_sym
249
- val.split.each do |term|
250
- EasyRedis.redis.zadd term_key(name,term), created_at.to_i, id
251
- EasyRedis.redis.zadd terms_key(name), EasyRedis.score(term), term
252
- end
247
+ if self.class.searchable? name
248
+ EasyRedis.redis.sadd(search_key(name,val),@id)
253
249
  end
250
+
251
+ #if self.class.text_search? name.to_sym
252
+ # val.split.each do |term|
253
+ # EasyRedis.redis.zadd term_key(name,term), created_at.to_i, id
254
+ # EasyRedis.redis.zadd terms_key(name), EasyRedis.score(term), term
255
+ # end
256
+ #end
254
257
  end
255
258
  end
256
259
 
257
- # index a field to be sorted/searched
260
+ # index a field to be sorted
258
261
  #
259
262
  # @param (see #field)
260
263
  def self.sort_on(field)
261
264
  @@sorts << field.to_sym
265
+ nil
262
266
  end
263
267
 
264
- # index a field for text searching
268
+ # index a field to be searched (with exact matches)
265
269
  #
266
270
  # @param (see #field)
267
- def self.text_search(field)
268
- @@text_searches << field.to_sym
269
- sort_on(field) unless sortable? field
271
+ def self.search_on(field)
272
+ @@searches << field.to_sym
273
+ nil
270
274
  end
271
275
 
276
+ # index a field for text searching
277
+ #
278
+ # @param (see #field)
279
+ # def self.text_search(field)
280
+ # @@text_searches << field.to_sym
281
+ # sort_on(field) unless sortable? field
282
+ # end
283
+
272
284
  # returns number of instances of this model
273
285
  def self.count
274
286
  EasyRedis.redis.zcard(prefix)
@@ -296,10 +308,15 @@ module EasyRedis
296
308
  end
297
309
 
298
310
  # find an entry of this model based on its id
311
+ # OR, find an entry based on field/value pairs in a hash
312
+ # (current only works with one pair)
299
313
  #
300
- # @param [Integer] id the id of the entry to retrive
314
+ # @param [Integer,Hash] id the id of the entry to retrive, or a hash of field/value pairs
301
315
  def self.find(id)
302
- if EasyRedis.redis.zscore(prefix,id)
316
+ if id.is_a? Hash
317
+ pair = id.to_a.first
318
+ self.find_by(pair[0],pair[1]) # TODO: add support for multiple field/value pairs
319
+ elsif EasyRedis.redis.zscore(prefix,id)
303
320
  build(id)
304
321
  else
305
322
  nil
@@ -318,10 +335,10 @@ module EasyRedis
318
335
  # @param [Symbol] field a symbol representing the field to search on
319
336
  # @param val the value of field to search for
320
337
  def self.search_by(field, val, options = {})
321
- raise EasyRedis::FieldNotSortable, field unless @@sorts.member? field.to_sym
322
- scr = EasyRedis.score(val)
338
+ # scr = EasyRedis.score(val)
323
339
  # options[:limit] = [0,options[:limit]] if options[:limit]
324
- ids = EasyRedis.redis.zrangebyscore(sort_key(field),scr,scr,proc_options(options))
340
+ # ids = EasyRedis.redis.zrangebyscore(sort_key(field),scr,scr,proc_options(options))
341
+ ids = EasyRedis.redis.smembers(search_key(field,val))
325
342
  ids.map{|i| build(i) }
326
343
  end
327
344
 
@@ -329,67 +346,92 @@ module EasyRedis
329
346
  #
330
347
  # @param (see #search_by)
331
348
  def self.find_by(field,val)
332
- search_by(field,val,:limit => 1).first
349
+ i = EasyRedis.redis.srandmember(search_key(field,val))
350
+ build(i) if i
333
351
  end
334
352
 
335
353
  # search the model based on multiple parameters
336
354
  #
337
355
  # @param [Hash] params a hash of field => value pairs
338
356
  def self.search(params)
339
- return search_by(*params.first) if params.size == 1 # comment out for benchmarking purposes
340
- result_set = nil
341
- params.each do |field,value|
342
- scr = EasyRedis.score(value)
343
- ids = EasyRedis.redis.zrangebyscore(sort_key(field),scr,scr)
344
- result_set = result_set ? (result_set & Set.new(ids)) : Set.new(ids)
357
+ return search_by(*params.first) if params.size == 1
358
+ if params.all? {|f,v| searchable? f }
359
+ ids = EasyRedis.redis.sinter(*params.map{|k,v|search_key(k,v)})
360
+ ids.map{|i|build(i)}
361
+ elsif params.all? {|f,v| sortable? f}
362
+ result_set = nil
363
+ params.each do |field,value|
364
+ scr = EasyRedis.score(value)
365
+ ids = EasyRedis.redis.zrangebyscore(sort_key(field),scr,scr)
366
+ result_set = result_set ? (result_set & Set.new(ids)) : Set.new(ids)
367
+ end
368
+ result_set.map{|i|build(i)}
369
+ else
370
+ raise "fields must all be searchable or all be sortable"
345
371
  end
346
- result_set.map{|i|build(i)}
347
372
  end
348
373
 
349
374
  # get all entries, sorted by the given field
350
375
  def self.sort_by(field,options = {:order => :asc})
351
- EasyRedis::Sort.new(field,options[:order],self)
376
+ raise EasyRedis::FieldNotSortable unless self.sortable? field
377
+ EasyRedis::Collection.new do |range|
378
+ a = range.begin
379
+ b = range.end
380
+ b -= 1 if range.exclude_end?
381
+ ids = []
382
+ if options[:order] == :asc
383
+ ids = EasyRedis.redis.zrange(sort_key(field),a,b)
384
+ elsif options[:order] == :desc
385
+ ids = EasyRedis.redis.zrevrange(sort_key(field),a,b)
386
+ end
387
+ ids.map{|i| build(i)}
388
+ end
352
389
  end
353
390
 
354
391
  # gives all values for the given field that begin with str
355
392
  #
356
393
  # @param [Symbol] field a symbol representing a field indexed with text_search.
357
- def self.matches(field,str)
358
- raise FieldNotTextSearchable, field unless self.text_search? field
359
- scr = EasyRedis.score(str)
360
- a,b = scr, scr+1/(27.0**str.size)
361
- EasyRedis.redis.zrangebyscore(terms_key(field), "#{a}", "(#{b}")
362
- end
394
+ # def self.matches(field,str)
395
+ # raise EasyRedis::FieldNotTextSearchable, field unless self.text_search? field
396
+ # scr = EasyRedis.score(str)
397
+ # a,b = scr, scr+1/(27.0**str.size)
398
+ # EasyRedis.redis.zrangebyscore(terms_key(field), "#{a}", "(#{b}")
399
+ # end
363
400
 
364
401
  # searches for all entries where field contains the string str
365
402
  #
366
403
  # The string must appear exactly as a term in field's value. To search based on the beginning of a term, you can combine this method with matches.
367
404
  # The field must have been indexed with text_search.
368
- def self.match(field,str, options = {})
369
- raise EasyRedis::FieldNotTextSearchable, filename unless text_search? field
370
- ids = EasyRedis.redis.zrange(term_key(field,str), 0, -1, proc_options(options))
371
- ids.map{|i| build(i)}
372
- end
405
+ # def self.match(field,str, options = {})
406
+ # raise EasyRedis::FieldNotTextSearchable, filename unless text_search? field
407
+ # ids = EasyRedis.redis.zrange(term_key(field,str), 0, -1, proc_options(options))
408
+ # ids.map{|i| build(i)}
409
+ # end
373
410
 
374
411
  # indicates whether field has been indexed with sort_on
375
412
  def self.sortable?(field)
376
413
  @@sorts and (@@sorts.member? field or field.to_sym == :created_at)
377
414
  end
378
415
 
379
- # indicates whether field has been indexed with text_search
380
- def self.text_search?(field)
381
- @@text_searches and @@text_searches.member?(field)
416
+ # indicates whether field has been indexed with sort_on
417
+ def self.searchable?(field)
418
+ @@searches and @@searches.member? field.to_sym
382
419
  end
383
420
 
421
+ # indicates whether field has been indexed with text_search
422
+ # def self.text_search?(field)
423
+ # @@text_searches and @@text_searches.member?(field)
424
+ # end
425
+
384
426
  # destroy all instances of this model
385
427
  def self.destroy_all
386
428
  all.each {|x| x.destroy}
387
429
  @@sorts.each {|field| EasyRedis.redis.del(sort_key(field)) }
388
- @@text_searches.each {|field| EasyRedis.redis.del(terms_key(field)) }
430
+ # @@text_searches.each {|field| EasyRedis.redis.del(terms_key(field)) }
389
431
  EasyRedis.redis.del(prefix)
390
432
  EasyRedis.redis.del(prefix + ":next_id")
391
433
  end
392
-
434
+
393
435
 
394
436
  # the id of this entry
395
437
  attr_reader :id
@@ -489,6 +531,10 @@ module EasyRedis
489
531
  end
490
532
  end
491
533
 
534
+ def self.search_key(field,value)
535
+ "#{prefix}:search_#{field}:#{value}"
536
+ end
537
+
492
538
  def self.terms_key(field)
493
539
  "#{prefix}:terms_#{field.to_s}"
494
540
  end
@@ -497,6 +543,23 @@ module EasyRedis
497
543
  "#{prefix}:term_#{field}:#{term}"
498
544
  end
499
545
 
546
+ def self.type_key(field)
547
+ "#{prefix}:type_#{field}"
548
+ end
549
+
550
+ def self.get_type(field)
551
+ if @@types[field]
552
+ @@types[field]
553
+ else
554
+ @@types[field] = EasyRedis.redis.get(type_key(field))
555
+ end
556
+ end
557
+
558
+ def self.set_type(field,type)
559
+ EasyRedis.redis.set(type_key(field),type)
560
+ @@types[field] = type
561
+ end
562
+
500
563
  def prefix
501
564
  self.class.prefix
502
565
  end
@@ -505,6 +568,10 @@ module EasyRedis
505
568
  self.class.sort_key(field)
506
569
  end
507
570
 
571
+ def search_key(field,val)
572
+ self.class.search_key(field,val)
573
+ end
574
+
508
575
  def terms_key(field)
509
576
  self.class.terms_key(field)
510
577
  end
@@ -512,5 +579,18 @@ module EasyRedis
512
579
  def term_key(field,term)
513
580
  self.class.term_key(field,term)
514
581
  end
582
+
583
+ def type_key(field)
584
+ self.class.type_key(field)
585
+ end
586
+
587
+ def get_type(field)
588
+ self.class.get_type(field)
589
+ end
590
+
591
+ def set_type(field,type)
592
+ self.class.set_type(field,type)
593
+ end
594
+
515
595
  end
516
596
  end
@@ -4,8 +4,8 @@ class Man < EasyRedis::Model
4
4
  field :name
5
5
  field :age
6
6
 
7
- text_search :name
8
- sort_on :age
7
+ search_on :name
8
+ search_on :age
9
9
  end
10
10
 
11
11
  EasyRedis.connect
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: easyredis
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.5
5
+ version: 0.0.6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Alec Benzer
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-02-09 00:00:00 -05:00
13
+ date: 2011-05-16 00:00:00 -04:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -42,9 +42,9 @@ files:
42
42
  - easyredis.gemspec
43
43
  - lib/easyredis.rb
44
44
  - tests/benchmark.rb
45
- - tests/test.rb
45
+ - tests/man.rb
46
46
  has_rdoc: true
47
- homepage: https://github.com/alecbenzer/easyredis
47
+ homepage: http://alecbenzer.github.com/easyredis/
48
48
  licenses: []
49
49
 
50
50
  post_install_message:
@@ -72,7 +72,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
72
72
  requirements: []
73
73
 
74
74
  rubyforge_project: easyredis
75
- rubygems_version: 1.5.0
75
+ rubygems_version: 1.6.2
76
76
  signing_key:
77
77
  specification_version: 3
78
78
  summary: framework designed to make using redis as a database simpler