Module: ObservableModel
- Defined in:
- lib/command_handlers/models/observable_model.rb
Defined Under Namespace
Classes: Updater
Class Method Summary collapse
Instance Method Summary collapse
-
#add_observer(property_name, observer = nil, &updater) ⇒ Object
Takes observer as an object or a block updater.
- #has_observer?(property_name, observer) ⇒ Boolean
- #notify_observers(property_name) ⇒ Object
- #property_observer_hash ⇒ Object
- #property_observer_list(property_name) ⇒ Object
Class Method Details
.add_method_observers(model, method) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/command_handlers/models/observable_model.rb', line 48 def self.add_method_observers(model, method) setter_method_pattern = /^(\w+=)$/ if (method.match(setter_method_pattern)) getter_method = method[0, method.length - 1] getter_value = model.send(getter_method) if (getter_value.is_a?(Array) and !getter_value.is_a?(ObservableArray)) getter_value.extend(ObservableArray) getter_value.add_observer([], Updater.new(getter_method, model)) end model.instance_eval "alias original_#{method} #{method}\n" model.instance_eval <<-end_eval, __FILE__, __LINE__ def #{method}(value) self.original_#{method}(value) notify_observers('#{getter_method}') if (value.is_a?(Array) and !value.is_a?(ObservableArray)) value.extend(ObservableArray) value.add_observer([], ObservableModel::Updater.new('#{getter_method}', self)) end end end_eval end end |
.extend_object(model) ⇒ Object
41 42 43 44 45 46 |
# File 'lib/command_handlers/models/observable_model.rb', line 41 def self.extend_object(model) super model.methods.each do |method| self.add_method_observers(model, method) end end |
Instance Method Details
#add_observer(property_name, observer = nil, &updater) ⇒ Object
Takes observer as an object or a block updater
8 9 10 11 |
# File 'lib/command_handlers/models/observable_model.rb', line 8 def add_observer(property_name, observer = nil, &updater) observer ||= BlockObserver.new(&updater) property_observer_list(property_name) << observer end |
#has_observer?(property_name, observer) ⇒ Boolean
13 14 15 |
# File 'lib/command_handlers/models/observable_model.rb', line 13 def has_observer?(property_name, observer) property_observer_list(property_name).include?(observer) end |
#notify_observers(property_name) ⇒ Object
27 28 29 |
# File 'lib/command_handlers/models/observable_model.rb', line 27 def notify_observers(property_name) property_observer_list(property_name).each {|observer| observer.update(send(property_name))} end |
#property_observer_hash ⇒ Object
17 18 19 20 |
# File 'lib/command_handlers/models/observable_model.rb', line 17 def property_observer_hash @property_observers = Hash.new unless @property_observers @property_observers end |
#property_observer_list(property_name) ⇒ Object
22 23 24 25 |
# File 'lib/command_handlers/models/observable_model.rb', line 22 def property_observer_list(property_name) property_observer_hash[property_name.to_sym] = Set.new unless property_observer_hash[property_name.to_sym] property_observer_hash[property_name.to_sym] end |