motion/core/kvo.rb in bubble-wrap-1.4.0 vs motion/core/kvo.rb in bubble-wrap-1.5.0.rc1
- old
+ new
@@ -19,16 +19,30 @@
module BubbleWrap
module KVO
COLLECTION_OPERATIONS = [ NSKeyValueChangeInsertion, NSKeyValueChangeRemoval, NSKeyValueChangeReplacement ]
DEFAULT_OPTIONS = NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld
- def observe(target, key_path, &block)
+ def observe(*arguments, &block)
+ unless [1,2].include?(arguments.length)
+ raise ArgumentError, "wrong number of arguments (#{arguments.length} for 1 or 2)"
+ end
+
+ key_path = arguments.pop
+ target = arguments.pop || self
+
target.addObserver(self, forKeyPath:key_path, options:DEFAULT_OPTIONS, context:nil) unless registered?(target, key_path)
add_observer_block(target, key_path, &block)
end
- def unobserve(target, key_path)
+ def unobserve(*arguments)
+ unless [1,2].include?(arguments.length)
+ raise ArgumentError, "wrong number of arguments (#{arguments.length} for 1 or 2)"
+ end
+
+ key_path = arguments.pop
+ target = arguments.pop || self
+
return unless registered?(target, key_path)
target.removeObserver(self, forKeyPath:key_path)
remove_observer_block(target, key_path)
end
@@ -51,9 +65,11 @@
!@targets.nil? && !@targets[target].nil? && @targets[target].has_key?(key_path.to_s)
end
def add_observer_block(target, key_path, &block)
return if target.nil? || key_path.nil? || block.nil?
+
+ block.weak! if BubbleWrap.use_weak_callbacks?
@targets ||= {}
@targets[target] ||= {}
@targets[target][key_path.to_s] ||= []
@targets[target][key_path.to_s] << block