Sha256: d08bc867b95f9469081232c1f6536216b46f2728505ac59841f1a9569ad97832
Contents?: true
Size: 1.45 KB
Versions: 1
Compression:
Stored size: 1.45 KB
Contents
# Copyright (C) 2007-2008 Annas Al Maleh # Licensed under the LGPL. See /COPYING.LGPL for more details. module ObservableArray def add_observer(element_properties, observer) property_observer_list << observer each do |element| element_properties.each do |property| element.extend(ObservableModel) unless element.is_a?(ObservableModel) element.add_observer(property, observer) end end end def property_observer_list @property_observer_list = [] unless @property_observer_list @property_observer_list end def notify_observers property_observer_list.each {|observer| observer.update} end def self.extend_object(array) array.instance_eval("alias original_add <<") array.instance_eval "def <<(value) \n self.original_add(value); notify_observers; \nend" notify_observers_on_invokation(array, "delete", 1) notify_observers_on_invokation(array, "delete_at", 1) notify_observers_on_invokation(array, "clear") super end 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}); notify_observers; \nend" end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
glimmer-0.1.0.0 | src/command_handlers/models/observable_array.rb |