module BubbleWrap::KVO
Constants
- DEFAULT_OPTIONS
- IMMIDEATE_OPTIONS
Public Instance Methods
observe(target = self, key_paths, &block)
click to toggle source
# File motion/core/kvo.rb, line 103 def observe(target = self, key_paths, &block) key_paths = [key_paths].flatten key_paths.each do |key_path| if not observers_registry.registered?(target, key_path) target.addObserver(observers_registry, forKeyPath:key_path, options:DEFAULT_OPTIONS, context:nil) end # Add block even if observer is registed, so multiplie blocks can be invoked. observers_registry.add(target, key_path, &block) end end
observe!(target = self, key_paths, &block)
click to toggle source
# File motion/core/kvo.rb, line 116 def observe!(target = self, key_paths, &block) key_paths = [key_paths].flatten key_paths.each do |key_path| registered = immediate_observers_registry.registered?(target, key_path) immediate_observers_registry.add(target, key_path, &block) # We need to first register the block, and then call addObserver, because # observeValueForKeyPath will fire immedeately. if not registered target.addObserver(immediate_observers_registry, forKeyPath:key_path, options: IMMIDEATE_OPTIONS, context:nil) end end end
unobserve(target = self, key_paths)
click to toggle source
# File motion/core/kvo.rb, line 132 def unobserve(target = self, key_paths) remove_from_registry_if_exists(target, key_paths, observers_registry) end
unobserve!(target = self, key_paths)
click to toggle source
# File motion/core/kvo.rb, line 136 def unobserve!(target = self, key_paths) remove_from_registry_if_exists(target, key_paths, immediate_observers_registry) end
unobserve_all()
click to toggle source
# File motion/core/kvo.rb, line 140 def unobserve_all observers_registry.each_key_path do |target, key_path| target.removeObserver(observers_registry, forKeyPath:key_path) end immediate_observers_registry.each_key_path do |target, key_path| target.removeObserver(immediate_observers_registry, forKeyPath:key_path) end observers_registry.remove_all immediate_observers_registry.remove_all end
Private Instance Methods
immediate_observers_registry()
click to toggle source
# File motion/core/kvo.rb, line 158 def immediate_observers_registry @immediate_observers_registry ||= Registry.new([:new]) end
observers_registry()
click to toggle source
# File motion/core/kvo.rb, line 154 def observers_registry @observers_registry ||= Registry.new end
remove_from_registry_if_exists(target, key_paths, registry)
click to toggle source
# File motion/core/kvo.rb, line 162 def remove_from_registry_if_exists(target, key_paths, registry) key_paths = [key_paths].flatten key_paths.each do |key_path| if registry.registered?(target, key_path) target.removeObserver(registry, forKeyPath:key_path) registry.remove(target, key_path) end end end