Module: ObservableArray
- Defined in:
- lib/command_handlers/models/observable_array.rb
Class Method Summary collapse
- .extend_object(array) ⇒ Object
- .notify_observers_on_invokation(model, method, argument_count = 0) ⇒ Object
Instance Method Summary collapse
- #add_observer(element_properties, observer) ⇒ Object
- #notify_observers ⇒ Object
- #property_observer_list ⇒ Object
Class Method Details
.extend_object(array) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/command_handlers/models/observable_array.rb', line 23 def self.extend_object(array) array.instance_eval("alias original_add <<") array.instance_eval " def <<(value)\n self.original_add(value)\n notify_observers\n end\n end_eval\n\n notify_observers_on_invokation(array, \"delete\", 1)\n notify_observers_on_invokation(array, \"delete_at\", 1)\n notify_observers_on_invokation(array, \"clear\")\n\n super\nend\n", __FILE__, __LINE__ |
.notify_observers_on_invokation(model, method, argument_count = 0) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/command_handlers/models/observable_array.rb', line 39 def self.notify_observers_on_invokation(model, method, argument_count=0) model.instance_eval "alias original_#{method} #{method}\n" arguments = "" for index in 1..argument_count arguments += "argument" + index.to_s + "," end arguments = arguments[0..-2] model.instance_eval " def \#{method}(\#{arguments})\n self.original_\#{method}(\#{arguments})\n notify_observers\n end\n end_eval\nend\n", __FILE__, __LINE__ |
Instance Method Details
#add_observer(element_properties, observer) ⇒ Object
4 5 6 7 8 9 10 11 12 |
# File 'lib/command_handlers/models/observable_array.rb', line 4 def add_observer(element_properties, observer) property_observer_list << observer each do |element| [element_properties].flatten.each do |property| element.extend(ObservableModel) unless element.is_a?(ObservableModel) element.add_observer(property, observer) end end end |
#notify_observers ⇒ Object
19 20 21 |
# File 'lib/command_handlers/models/observable_array.rb', line 19 def notify_observers property_observer_list.each {|observer| observer.update} end |
#property_observer_list ⇒ Object
14 15 16 17 |
# File 'lib/command_handlers/models/observable_array.rb', line 14 def property_observer_list @property_observer_list = Set.new unless @property_observer_list @property_observer_list end |