familia 0.6.10 → 0.7.0
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/CHANGES.txt +7 -0
- data/VERSION.yml +2 -2
- data/familia.gemspec +3 -4
- data/lib/familia.rb +6 -2
- data/lib/familia/object.rb +6 -6
- data/lib/familia/redisobject.rb +72 -51
- metadata +4 -35
data/CHANGES.txt
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
FAMILIA, CHANGES
|
|
2
2
|
|
|
3
|
+
#### 0.7.0 (2011-03-04) ###############################
|
|
4
|
+
|
|
5
|
+
* CHANGE: Use RedisObject#multi_from_redis when possible (uses mget command)
|
|
6
|
+
* CHANGE: No need to check if a key exists before getting it. It will be nil anyway.
|
|
7
|
+
* ADDED: Set#randomraw
|
|
8
|
+
|
|
9
|
+
|
|
3
10
|
#### 0.6.10 (2011-01-08) ###############################
|
|
4
11
|
|
|
5
12
|
* FIXED: RedisObject#db does not set @db
|
data/VERSION.yml
CHANGED
data/familia.gemspec
CHANGED
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |s|
|
|
7
7
|
s.name = %q{familia}
|
|
8
|
-
s.version = "0.
|
|
8
|
+
s.version = "0.7.0"
|
|
9
9
|
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
11
11
|
s.authors = ["Delano Mandelbaum"]
|
|
12
|
-
s.date = %q{2011-
|
|
12
|
+
s.date = %q{2011-03-04}
|
|
13
13
|
s.description = %q{Organize and store ruby objects in Redis}
|
|
14
14
|
s.email = %q{delano@solutious.com}
|
|
15
15
|
s.extra_rdoc_files = [
|
|
@@ -44,11 +44,10 @@ Gem::Specification.new do |s|
|
|
|
44
44
|
s.rdoc_options = ["--charset=UTF-8"]
|
|
45
45
|
s.require_paths = ["lib"]
|
|
46
46
|
s.rubyforge_project = %q{familia}
|
|
47
|
-
s.rubygems_version = %q{1.
|
|
47
|
+
s.rubygems_version = %q{1.5.2}
|
|
48
48
|
s.summary = %q{Organize and store ruby objects in Redis}
|
|
49
49
|
|
|
50
50
|
if s.respond_to? :specification_version then
|
|
51
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
|
52
51
|
s.specification_version = 3
|
|
53
52
|
|
|
54
53
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
data/lib/familia.rb
CHANGED
|
@@ -47,8 +47,12 @@ module Familia
|
|
|
47
47
|
end
|
|
48
48
|
def trace label, redis_client, ident, context=nil
|
|
49
49
|
return unless Familia.debug?
|
|
50
|
-
info "%s
|
|
51
|
-
|
|
50
|
+
info "[%s] %s/%s" % [label, redis_client.uri, ident]
|
|
51
|
+
if context
|
|
52
|
+
context = [context].flatten
|
|
53
|
+
context.reject! { |line| line =~ /lib\/familia/ }
|
|
54
|
+
info " %s" % context[0..6].join("\n ")
|
|
55
|
+
end
|
|
52
56
|
end
|
|
53
57
|
def uri= v
|
|
54
58
|
v = URI.parse v unless URI === v
|
data/lib/familia/object.rb
CHANGED
|
@@ -249,15 +249,15 @@ module Familia
|
|
|
249
249
|
obj
|
|
250
250
|
end
|
|
251
251
|
def from_key objkey
|
|
252
|
-
raise ArgumentError, "
|
|
253
|
-
Familia.trace :LOAD, redis
|
|
252
|
+
raise ArgumentError, "Empty key" if objkey.to_s.empty?
|
|
253
|
+
Familia.trace :LOAD, Familia.redis(self.uri), objkey, caller if Familia.debug?
|
|
254
254
|
obj = Familia::String.new objkey, :class => self
|
|
255
|
-
obj.
|
|
255
|
+
obj.value
|
|
256
256
|
end
|
|
257
257
|
def from_redis idx, suffix=:object
|
|
258
258
|
return nil if idx.to_s.empty?
|
|
259
259
|
objkey = rediskey idx, suffix
|
|
260
|
-
Familia.trace :FROMREDIS, Familia.redis(self.uri), objkey, caller.first if Familia.debug?
|
|
260
|
+
#Familia.trace :FROMREDIS, Familia.redis(self.uri), objkey, caller.first if Familia.debug?
|
|
261
261
|
me = from_key objkey
|
|
262
262
|
me
|
|
263
263
|
end
|
|
@@ -265,12 +265,12 @@ module Familia
|
|
|
265
265
|
return false if idx.to_s.empty?
|
|
266
266
|
objkey = rediskey idx, suffix
|
|
267
267
|
ret = Familia.redis(self.uri).exists objkey
|
|
268
|
-
Familia.trace :EXISTS, Familia.redis(self.uri), "#{rediskey(idx, suffix)} #{ret}", caller
|
|
268
|
+
Familia.trace :EXISTS, Familia.redis(self.uri), "#{rediskey(idx, suffix)} #{ret}", caller if Familia.debug?
|
|
269
269
|
ret
|
|
270
270
|
end
|
|
271
271
|
def destroy! idx, suffix=:object
|
|
272
272
|
ret = Familia.redis(self.uri).del rediskey(idx, suffix)
|
|
273
|
-
Familia.trace :DELETED, Familia.redis(self.uri), "#{rediskey(idx, suffix)}: #{ret}", caller
|
|
273
|
+
Familia.trace :DELETED, Familia.redis(self.uri), "#{rediskey(idx, suffix)}: #{ret}", caller if Familia.debug?
|
|
274
274
|
ret
|
|
275
275
|
end
|
|
276
276
|
def find suffix='*'
|
data/lib/familia/redisobject.rb
CHANGED
|
@@ -107,7 +107,7 @@ module Familia
|
|
|
107
107
|
end
|
|
108
108
|
|
|
109
109
|
def echo meth, trace
|
|
110
|
-
redis.echo "[#{self.class}\##{meth}] #{trace} (#{@opts[:class]}
|
|
110
|
+
redis.echo "[#{self.class}\##{meth}] #{trace} (#{@opts[:class]}\#)"
|
|
111
111
|
end
|
|
112
112
|
|
|
113
113
|
def redis
|
|
@@ -222,7 +222,7 @@ module Familia
|
|
|
222
222
|
def to_redis v
|
|
223
223
|
return v unless @opts[:class]
|
|
224
224
|
ret = case @opts[:class]
|
|
225
|
-
when ::String, ::Fixnum, ::Float, Gibbler::Digest
|
|
225
|
+
when ::Symbol, ::String, ::Fixnum, ::Float, Gibbler::Digest
|
|
226
226
|
v
|
|
227
227
|
else
|
|
228
228
|
if ::String === v
|
|
@@ -250,37 +250,54 @@ module Familia
|
|
|
250
250
|
ret
|
|
251
251
|
end
|
|
252
252
|
|
|
253
|
-
def
|
|
254
|
-
|
|
255
|
-
return
|
|
253
|
+
def multi_from_redis *values
|
|
254
|
+
Familia.ld "multi_from_redis: (#{@opts}) #{values}"
|
|
255
|
+
return [] if values.empty?
|
|
256
|
+
return values.flatten unless @opts[:class]
|
|
256
257
|
ret = case @opts[:class]
|
|
257
|
-
when String
|
|
258
|
+
when ::String
|
|
258
259
|
v.to_s
|
|
259
|
-
when
|
|
260
|
+
when ::Symbol
|
|
261
|
+
v.to_s.to_sym
|
|
262
|
+
when ::Fixnum, ::Float
|
|
260
263
|
@opts[:class].induced_from v
|
|
261
264
|
else
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
265
|
+
objs = values
|
|
266
|
+
|
|
267
|
+
if @opts[:reference] == true
|
|
268
|
+
objs = @opts[:class].rawmultiget *values
|
|
269
|
+
end
|
|
270
|
+
objs.compact!
|
|
271
|
+
if @opts[:class].respond_to? load_method
|
|
272
|
+
objs.collect! { |obj|
|
|
273
|
+
begin
|
|
274
|
+
v = @opts[:class].send load_method, obj
|
|
275
|
+
if v.nil?
|
|
276
|
+
Familia.ld "[#{self.class}\#multi_from_redis] nil returned for #{@opts[:class]}\##{name}"
|
|
277
|
+
end
|
|
278
|
+
v
|
|
279
|
+
rescue => ex
|
|
280
|
+
Familia.info v
|
|
281
|
+
Familia.info "Parse error for #{rediskey} (#{load_method}): #{ex.message}"
|
|
282
|
+
Familia.info ex.backtrace
|
|
283
|
+
nil
|
|
270
284
|
end
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
Familia
|
|
274
|
-
Familia.info "Parse error for #{rediskey} (#{load_method}): #{ex.message}"
|
|
275
|
-
Familia.info ex.backtrace
|
|
276
|
-
nil
|
|
285
|
+
}
|
|
286
|
+
else
|
|
287
|
+
raise Familia::Problem, "No such method: #{@opts[:class]}##{load_method}"
|
|
277
288
|
end
|
|
278
|
-
|
|
279
|
-
if ret.nil?
|
|
280
|
-
Familia.ld "[#{self.class}\#from_redis] nil returned for #{@opts[:class]}\##{name}"
|
|
289
|
+
objs.compact # don't use compact! b/c the return value appears in ret
|
|
281
290
|
end
|
|
282
291
|
ret
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
def from_redis v
|
|
295
|
+
return @opts[:default] if v.nil?
|
|
296
|
+
return v unless @opts[:class]
|
|
297
|
+
ret = multi_from_redis v
|
|
298
|
+
ret.first unless ret.nil? # return the object or nil
|
|
283
299
|
end
|
|
300
|
+
|
|
284
301
|
end
|
|
285
302
|
|
|
286
303
|
|
|
@@ -347,14 +364,10 @@ module Familia
|
|
|
347
364
|
alias_method :del, :delete
|
|
348
365
|
|
|
349
366
|
def range sidx=0, eidx=-1
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
# redis.lrange(rediskey, sidx, eidx)
|
|
353
|
-
#else
|
|
354
|
-
redis.lrange(rediskey, sidx, eidx).collect { |v| from_redis(v) }.compact
|
|
355
|
-
#end
|
|
367
|
+
el = rangeraw sidx, eidx
|
|
368
|
+
multi_from_redis *el
|
|
356
369
|
end
|
|
357
|
-
|
|
370
|
+
|
|
358
371
|
def rangeraw sidx=0, eidx=-1
|
|
359
372
|
redis.lrange(rediskey, sidx, eidx)
|
|
360
373
|
end
|
|
@@ -468,7 +481,8 @@ module Familia
|
|
|
468
481
|
|
|
469
482
|
def members
|
|
470
483
|
echo :members, caller[0] if Familia.debug
|
|
471
|
-
|
|
484
|
+
el = membersraw
|
|
485
|
+
multi_from_redis *el
|
|
472
486
|
end
|
|
473
487
|
alias_method :all, :members
|
|
474
488
|
alias_method :to_a, :members
|
|
@@ -534,7 +548,11 @@ module Familia
|
|
|
534
548
|
end
|
|
535
549
|
|
|
536
550
|
def random
|
|
537
|
-
from_redis
|
|
551
|
+
from_redis randomraw
|
|
552
|
+
end
|
|
553
|
+
|
|
554
|
+
def randomraw
|
|
555
|
+
redis.srandmember(rediskey)
|
|
538
556
|
end
|
|
539
557
|
|
|
540
558
|
## Make the value stored at KEY identical to the given list
|
|
@@ -610,7 +628,8 @@ module Familia
|
|
|
610
628
|
|
|
611
629
|
def members count=-1, opts={}
|
|
612
630
|
count -= 1 if count > 0
|
|
613
|
-
|
|
631
|
+
el = membersraw count, opts
|
|
632
|
+
multi_from_redis *el
|
|
614
633
|
end
|
|
615
634
|
alias_method :to_a, :members
|
|
616
635
|
alias_method :all, :members
|
|
@@ -622,7 +641,8 @@ module Familia
|
|
|
622
641
|
|
|
623
642
|
def revmembers count=-1, opts={}
|
|
624
643
|
count -= 1 if count > 0
|
|
625
|
-
|
|
644
|
+
el = revmembersraw count, opts
|
|
645
|
+
multi_from_redis *el
|
|
626
646
|
end
|
|
627
647
|
|
|
628
648
|
def revmembersraw count=-1, opts={}
|
|
@@ -664,19 +684,21 @@ module Familia
|
|
|
664
684
|
|
|
665
685
|
def range sidx, eidx, opts={}
|
|
666
686
|
echo :range, caller[0] if Familia.debug
|
|
667
|
-
rangeraw(sidx, eidx, opts)
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
def revrange sidx, eidx, opts={}
|
|
671
|
-
echo :revrange, caller[0] if Familia.debug
|
|
672
|
-
revrangeraw(sidx, eidx, opts).collect { |v| from_redis(v) }.compact
|
|
687
|
+
el = rangeraw(sidx, eidx, opts)
|
|
688
|
+
multi_from_redis *el
|
|
673
689
|
end
|
|
674
|
-
|
|
690
|
+
|
|
675
691
|
def rangeraw sidx, eidx, opts={}
|
|
676
692
|
opts[:with_scores] = true if opts[:withscores]
|
|
677
693
|
redis.zrange(rediskey, sidx, eidx, opts)
|
|
678
694
|
end
|
|
679
|
-
|
|
695
|
+
|
|
696
|
+
def revrange sidx, eidx, opts={}
|
|
697
|
+
echo :revrange, caller[0] if Familia.debug
|
|
698
|
+
el = revrangeraw(sidx, eidx, opts)
|
|
699
|
+
multi_from_redis *el
|
|
700
|
+
end
|
|
701
|
+
|
|
680
702
|
def revrangeraw sidx, eidx, opts={}
|
|
681
703
|
opts[:with_scores] = true if opts[:withscores]
|
|
682
704
|
redis.zrevrange(rediskey, sidx, eidx, opts)
|
|
@@ -685,7 +707,8 @@ module Familia
|
|
|
685
707
|
# e.g. obj.metrics.rangebyscore (now-12.hours), now, :limit => [0, 10]
|
|
686
708
|
def rangebyscore sscore, escore, opts={}
|
|
687
709
|
echo :rangebyscore, caller[0] if Familia.debug
|
|
688
|
-
rangebyscoreraw(sscore, escore, opts)
|
|
710
|
+
el = rangebyscoreraw(sscore, escore, opts)
|
|
711
|
+
multi_from_redis *el
|
|
689
712
|
end
|
|
690
713
|
|
|
691
714
|
def rangebyscoreraw sscore, escore, opts={}
|
|
@@ -777,9 +800,8 @@ module Familia
|
|
|
777
800
|
end
|
|
778
801
|
|
|
779
802
|
def values
|
|
780
|
-
redis.hvals(rediskey)
|
|
781
|
-
|
|
782
|
-
end
|
|
803
|
+
el = redis.hvals(rediskey)
|
|
804
|
+
multi_from_redis *el
|
|
783
805
|
end
|
|
784
806
|
|
|
785
807
|
def all
|
|
@@ -824,9 +846,8 @@ module Familia
|
|
|
824
846
|
alias_method :merge!, :update
|
|
825
847
|
|
|
826
848
|
def values_at *names
|
|
827
|
-
redis.hmget(rediskey, *names.flatten.compact)
|
|
828
|
-
|
|
829
|
-
end
|
|
849
|
+
el = redis.hmget(rediskey, *names.flatten.compact)
|
|
850
|
+
multi_from_redis *el
|
|
830
851
|
end
|
|
831
852
|
|
|
832
853
|
Familia::RedisObject.register self, :hash
|
|
@@ -847,7 +868,7 @@ module Familia
|
|
|
847
868
|
end
|
|
848
869
|
|
|
849
870
|
def value
|
|
850
|
-
echo :value, caller[0] if Familia.debug
|
|
871
|
+
echo :value, caller[0..5] if Familia.debug
|
|
851
872
|
redis.setnx rediskey, @opts[:default] if @opts[:default]
|
|
852
873
|
from_redis redis.get(rediskey)
|
|
853
874
|
end
|
metadata
CHANGED
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: familia
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
segments:
|
|
7
|
-
- 0
|
|
8
|
-
- 6
|
|
9
|
-
- 10
|
|
10
|
-
version: 0.6.10
|
|
4
|
+
prerelease:
|
|
5
|
+
version: 0.7.0
|
|
11
6
|
platform: ruby
|
|
12
7
|
authors:
|
|
13
8
|
- Delano Mandelbaum
|
|
@@ -15,7 +10,7 @@ autorequire:
|
|
|
15
10
|
bindir: bin
|
|
16
11
|
cert_chain: []
|
|
17
12
|
|
|
18
|
-
date: 2011-
|
|
13
|
+
date: 2011-03-04 00:00:00 -05:00
|
|
19
14
|
default_executable:
|
|
20
15
|
dependencies:
|
|
21
16
|
- !ruby/object:Gem::Dependency
|
|
@@ -26,11 +21,6 @@ dependencies:
|
|
|
26
21
|
requirements:
|
|
27
22
|
- - ">="
|
|
28
23
|
- !ruby/object:Gem::Version
|
|
29
|
-
hash: 11
|
|
30
|
-
segments:
|
|
31
|
-
- 2
|
|
32
|
-
- 1
|
|
33
|
-
- 0
|
|
34
24
|
version: 2.1.0
|
|
35
25
|
type: :runtime
|
|
36
26
|
version_requirements: *id001
|
|
@@ -42,11 +32,6 @@ dependencies:
|
|
|
42
32
|
requirements:
|
|
43
33
|
- - ">="
|
|
44
34
|
- !ruby/object:Gem::Version
|
|
45
|
-
hash: 11
|
|
46
|
-
segments:
|
|
47
|
-
- 0
|
|
48
|
-
- 4
|
|
49
|
-
- 2
|
|
50
35
|
version: 0.4.2
|
|
51
36
|
type: :runtime
|
|
52
37
|
version_requirements: *id002
|
|
@@ -58,11 +43,6 @@ dependencies:
|
|
|
58
43
|
requirements:
|
|
59
44
|
- - ">="
|
|
60
45
|
- !ruby/object:Gem::Version
|
|
61
|
-
hash: 51
|
|
62
|
-
segments:
|
|
63
|
-
- 0
|
|
64
|
-
- 8
|
|
65
|
-
- 6
|
|
66
46
|
version: 0.8.6
|
|
67
47
|
type: :runtime
|
|
68
48
|
version_requirements: *id003
|
|
@@ -74,11 +54,6 @@ dependencies:
|
|
|
74
54
|
requirements:
|
|
75
55
|
- - ">="
|
|
76
56
|
- !ruby/object:Gem::Version
|
|
77
|
-
hash: 51
|
|
78
|
-
segments:
|
|
79
|
-
- 0
|
|
80
|
-
- 8
|
|
81
|
-
- 6
|
|
82
57
|
version: 0.8.6
|
|
83
58
|
type: :runtime
|
|
84
59
|
version_requirements: *id004
|
|
@@ -128,23 +103,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
128
103
|
requirements:
|
|
129
104
|
- - ">="
|
|
130
105
|
- !ruby/object:Gem::Version
|
|
131
|
-
hash: 3
|
|
132
|
-
segments:
|
|
133
|
-
- 0
|
|
134
106
|
version: "0"
|
|
135
107
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
136
108
|
none: false
|
|
137
109
|
requirements:
|
|
138
110
|
- - ">="
|
|
139
111
|
- !ruby/object:Gem::Version
|
|
140
|
-
hash: 3
|
|
141
|
-
segments:
|
|
142
|
-
- 0
|
|
143
112
|
version: "0"
|
|
144
113
|
requirements: []
|
|
145
114
|
|
|
146
115
|
rubyforge_project: familia
|
|
147
|
-
rubygems_version: 1.
|
|
116
|
+
rubygems_version: 1.5.2
|
|
148
117
|
signing_key:
|
|
149
118
|
specification_version: 3
|
|
150
119
|
summary: Organize and store ruby objects in Redis
|