lib/blendris/reference_set.rb in blendris-0.5 vs lib/blendris/reference_set.rb in blendris-0.6
- old
+ new
@@ -3,19 +3,31 @@
# RedisReferenceSet is a wrapper to a Redis set value and serves
# as a pointer to multiple other blendris objects.
class RedisReferenceSet < RedisReferenceBase
- include RedisNode
include Enumerable
def refs
@refs ||= RedisSet.new(@key)
end
def set(*objs)
- refkeys = objs.flatten.compact.map {|o| o.key}
- self.refs.set refkeys
+ objs.flatten!
+ objs.compact!
+
+ # Delete reference keys that were removed.
+ self.each do |obj|
+ unless objs.include? obj
+ apply_reverse_delete obj
+ end
+ end
+
+ # Clear the current set.
+ self.refs.clear
+
+ # Add the new objects to the set.
+ self << objs
self
ensure
notify_changed
end