17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
# File 'lib/redis_object/ext/views.rb', line 17
def view_as_hash(name)
out = {}
if requested_set = self.class.named_views[name]
if requested_set.is_a?(Symbol) and self.respond_to?(requested_set)
out = send(requested_set)
else
methods = requested_set[:fields].select {|f| self.respond_to?(f.to_sym) }
if methods.count > 0
methods.each do |m|
out[m.to_s] = send(m.to_sym)
end
end
if requested_set[:fields] && (flds = requested_set[:fields].select {|f| !out.keys.include?(f.to_s) }.map {|f| f.to_s }) && flds.count > 0
res = Hash[*store.eval(ViewFieldGetter, [hkey], flds)]
out.merge!(res)
end
if requested_set[:procs]
requested_set[:procs].each do |k,proc|
out[k.to_s] = proc.call(self)
end
end
if requested_set[:hashes]
requested_set[:hashes].each do |k,v|
case v
when String, Symbol
out[k.to_s] = get(v)
end
end
end
end
end
out
end
|