def multi_from_redis *values
Familia.ld "multi_from_redis: (#{@opts}) #{values}"
return [] if values.empty?
return values.flatten unless @opts[:class]
ret = case @opts[:class]
when ::String
v.to_s
when ::Symbol
v.to_s.to_sym
when ::Fixnum, ::Float
@opts[:class].induced_from v
else
objs = values
if @opts[:reference] == true
objs = @opts[:class].rawmultiget *values
end
objs.compact!
if @opts[:class].respond_to? load_method
objs.collect! { |obj|
begin
v = @opts[:class].send load_method, obj
if v.nil?
Familia.ld "[#{self.class}\#multi_from_redis] nil returned for #{@opts[:class]}\##{name}"
end
v
rescue => ex
Familia.info v
Familia.info "Parse error for #{rediskey} (#{load_method}): #{ex.message}"
Familia.info ex.backtrace
nil
end
}
else
raise Familia::Problem, "No such method: #{@opts[:class]}##{load_method}"
end
objs.compact
end
ret
end