Module: Glimmer::DataBinding::ObservableArray

Includes:
Observable
Defined in:
lib/glimmer/data_binding/observable_array.rb

Overview

TODO prefix utility methods with double-underscore

Instance Method Summary collapse

Methods included from Observable

#inspect

Instance Method Details

#<<(element) ⇒ Object



44
45
46
47
# File 'lib/glimmer/data_binding/observable_array.rb', line 44

def <<(element)
  super(element)
  notify_observers
end

#[]=(index, value) ⇒ Object



49
50
51
52
53
54
# File 'lib/glimmer/data_binding/observable_array.rb', line 49

def []=(index, value)
  old_value = self[index]
  unregister_dependent_observers(old_value)
  super(index, value)
  notify_observers
end

#add_observer(observer, element_properties = nil) ⇒ Object



11
12
13
14
15
16
17
18
19
20
# File 'lib/glimmer/data_binding/observable_array.rb', line 11

def add_observer(observer, element_properties=nil)
  return observer if has_observer?(observer) && element_properties.nil?
  property_observer_list << observer
  [element_properties].flatten.compact.each do |property|
    each do |element|
      observer.observe(element, property)
    end
  end
  observer
end

#clearObject



69
70
71
72
73
74
75
# File 'lib/glimmer/data_binding/observable_array.rb', line 69

def clear
  each do |old_value|
    unregister_dependent_observers(old_value)
  end
  super()
  notify_observers
end

#delete(element) ⇒ Object



56
57
58
59
60
# File 'lib/glimmer/data_binding/observable_array.rb', line 56

def delete(element)
  unregister_dependent_observers(element)
  super(element)
  notify_observers
end

#delete_at(index) ⇒ Object



62
63
64
65
66
67
# File 'lib/glimmer/data_binding/observable_array.rb', line 62

def delete_at(index)
  old_value = self[index]
  unregister_dependent_observers(old_value)
  super(index)
  notify_observers
end

#has_observer?(observer) ⇒ Boolean

Returns:

  • (Boolean)


32
33
34
# File 'lib/glimmer/data_binding/observable_array.rb', line 32

def has_observer?(observer)
  property_observer_list.include?(observer)
end

#notify_observersObject



40
41
42
# File 'lib/glimmer/data_binding/observable_array.rb', line 40

def notify_observers
  property_observer_list.each {|observer| observer.call}
end

#property_observer_listObject



36
37
38
# File 'lib/glimmer/data_binding/observable_array.rb', line 36

def property_observer_list
  @property_observer_list ||= Set.new
end

#remove_observer(observer, element_properties = nil) ⇒ Object



22
23
24
25
26
27
28
29
30
# File 'lib/glimmer/data_binding/observable_array.rb', line 22

def remove_observer(observer, element_properties=nil)
  property_observer_list.delete(observer)
  [element_properties].flatten.compact.each do |property|
    each do |element|
      observer.unobserve(element, property)
    end
  end
  observer
end

#unregister_dependent_observers(old_value) ⇒ Object



77
78
79
80
81
82
83
# File 'lib/glimmer/data_binding/observable_array.rb', line 77

def unregister_dependent_observers(old_value)
  # TODO look into optimizing this
  return unless old_value.is_a?(ObservableModel) || old_value.is_a?(ObservableArray)
  property_observer_list.each do |observer|
    observer.unregister_dependents_with_observable(observer.registration_for(self), old_value)
  end
end