Method: Glimmer::DataBinding::Observer#observe

Defined in:
lib/glimmer/data_binding/observer.rb

#observe(observable, *args) ⇒ Object Also known as: register

registers observer in an observable on args usually containing a property and options (optional) observer maintains registration list to unregister later


85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/glimmer/data_binding/observer.rb', line 85

def observe(observable, *args)
  options = args.last.is_a?(Hash) ? args.last : {}
  return if observable.nil?
  return if options[:ignore_frozen] && observable.frozen?
  unless observable.is_a?(Observable)
    # TODO refactor code to be more smart/polymorphic/automated and honor open/closed principle (e.g. for SomeClass, search if there is ObservableSomeClass)
    if observable.is_a?(Array)
      observable.extend(ObservableArray)
    elsif observable.is_a?(Hash)
      observable.extend(ObservableHash)
    else
      observable.extend(ObservableModel)
    end
  end
  args = compact_args(args)
  observable.add_observer(self, *args)
  ensure_registration_for!(observable, *args)
end