module Alakazam
Constants
- VERSION
Public Instance Methods
add_observer(observer = nil, options = {}, &block)
click to toggle source
# File lib/alakazam/alakazam.rb, line 12 def add_observer(observer = nil, options = {}, &block) on_change = if options.include? :on_fire options[:on_fire] elsif options.include? :on_change options[:on_change] else true end attributes = options[:attributes] || {} methods = options[:methods ] || [] attributes = [attributes] unless attributes.is_a? Array methods = [methods ] unless methods.is_a? Array attributes.each { |attribute| next if not attribute[:var] self.class.send(:define_method, :"#{attribute[:var]}=") do |val| fire! notify_observers attribute[:notify] instance_eval "@#{attribute[:var]} = #{val}" end } __observers__[block ] = { on_change: on_change, methods: methods } if block_given? __observers__[observer] = { on_change: on_change, methods: methods } if observer end
Also aliased as: is_observed_by
changed()
click to toggle source
# File lib/alakazam/alakazam.rb, line 57 def changed @changed = !changed? end
changed=(state)
click to toggle source
# File lib/alakazam/alakazam.rb, line 63 def changed=(state) @changed = state end
Also aliased as: fired=
changed?()
click to toggle source
# File lib/alakazam/alakazam.rb, line 68 def changed? !!@changed end
Also aliased as: fired?
count_observers()
click to toggle source
# File lib/alakazam/alakazam.rb, line 52 def count_observers __observers__.length end
Also aliased as: how_many_observers?
delete_observer(observer)
click to toggle source
# File lib/alakazam/alakazam.rb, line 42 def delete_observer(observer) __observers__.delete observer end
Also aliased as: remove_observer
has_observer?(observer)
click to toggle source
# File lib/alakazam/alakazam.rb, line 47 def has_observer?(observer) __observers__.include? observer end
Also aliased as: is_observed_by?
notify_observers(*things)
click to toggle source
# File lib/alakazam/alakazam.rb, line 73 def notify_observers(*things) __observers__.each { |observer, options| if !options[:on_change] || changed? if options[:methods].any? options[:methods].each { |method| if observer.respond_to? method observer.send method, *things elsif observer.singleton_class.respond_to? method observer.singleton_class.send method, *things end } elsif observer.respond_to? :update observer.update *things elsif observer.is_a? Proc observer.call *things else options[:methods].each { |method| observer.send(method, *things) if observer.respond_to? method } end end } @changed = false end
Private Instance Methods
__observers__()
click to toggle source
# File lib/alakazam/alakazam.rb, line 102 def __observers__ @observers ||= {} end