Module: Loco::Observable
- Included in:
- Button, Controller, DatePicker, ImageView, Label, Model, PickerView, ProgressView, RecordArray, ScrollView, Slider, TableView, TableViewCell, TextView, Toolbar, View, ViewController, WebView
- Defined in:
- lib/motion-loco/observable.rb
Defined Under Namespace
Modules: ClassMethods
Class Method Summary collapse
Instance Method Summary collapse
-
#init ⇒ Object
Used to create observable view controllers.
-
#initialize(properties = {}) ⇒ Object
Create new instance from a hash of properties with values.
-
#initWithFrame(frame) ⇒ Object
Used to create observable views.
-
#initWithStyle(style, reuseIdentifier: reuseIdentifier) ⇒ Object
Used to create observable table view cells.
- #method_missing(method, *args, &block) ⇒ Object
- #register_observer(target, key_path, &block) ⇒ Object
- #remove_all_observers ⇒ Object
- #remove_observer(target, key_path) ⇒ Object
-
#set_properties(hash) ⇒ Object
Change one or many properties from a hash of properties with values.
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, &block) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/motion-loco/observable.rb', line 48 def method_missing(method, *args, &block) if method.end_with?('_binding=') || method.end_with?('Binding=') method = method.gsub('_binding=', '').gsub('Binding=', '') if args.first.is_a?(String) if args.first =~ /^[A-Z]/ split_args = args.first.split('.') target = Kernel.const_get(split_args.slice!(0)).instance key_path = split_args.join('.') else target = self key_path = args.first end else target = args.first.first key_path = args.first.last end self.send("#{method}=", target.valueForKeyPath(key_path)) register_observer(target, key_path) do self.send("#{method}=", target.valueForKeyPath(key_path)) end else super end end |
Class Method Details
.included(base) ⇒ Object
167 168 169 |
# File 'lib/motion-loco/observable.rb', line 167 def self.included(base) base.extend(ClassMethods) end |
Instance Method Details
#init ⇒ Object
Used to create observable view controllers.
7 8 9 10 11 12 |
# File 'lib/motion-loco/observable.rb', line 7 def init super initialize_bindings set_properties({}) self end |
#initialize(properties = {}) ⇒ Object
Create new instance from a hash of properties with values.
16 17 18 19 20 21 |
# File 'lib/motion-loco/observable.rb', line 16 def initialize(properties={}) super initialize_bindings set_properties(properties) self end |
#initWithFrame(frame) ⇒ Object
Used to create observable views.
24 25 26 27 28 29 |
# File 'lib/motion-loco/observable.rb', line 24 def initWithFrame(frame) super initialize_bindings set_properties({}) self end |
#initWithStyle(style, reuseIdentifier: reuseIdentifier) ⇒ Object
Used to create observable table view cells
32 33 34 35 36 37 |
# File 'lib/motion-loco/observable.rb', line 32 def initWithStyle(style, reuseIdentifier:reuseIdentifier) super initialize_bindings set_properties({}) self end |
#register_observer(target, key_path, &block) ⇒ Object
73 74 75 76 77 78 |
# File 'lib/motion-loco/observable.rb', line 73 def register_observer(target, key_path, &block) unless observer_is_registered?(target, key_path) target.addObserver(self, forKeyPath:key_path.to_s, options:0, context:nil) end observers_for(target, key_path) << block end |
#remove_all_observers ⇒ Object
86 87 88 89 90 91 92 93 94 |
# File 'lib/motion-loco/observable.rb', line 86 def remove_all_observers return if @observers.nil? @observers.each do |target, key_paths| key_paths.each_key do |key_path| target.removeObserver(self, forKeyPath:key_path) end end @observers.clear end |
#remove_observer(target, key_path) ⇒ Object
80 81 82 83 84 |
# File 'lib/motion-loco/observable.rb', line 80 def remove_observer(target, key_path) target.removeObserver(self, forKeyPath:key_path) observers = observers_for(target, key_path) observers[target].delete(key_path) if observers[target].has_key?(key_path) end |
#set_properties(hash) ⇒ Object
Change one or many properties from a hash of properties with values.
41 42 43 44 45 46 |
# File 'lib/motion-loco/observable.rb', line 41 def set_properties(hash) # Set the initial property values from the given hash hash.each do |key, value| self.send("#{key}=", value) end end |