module Unobservable::ModuleSupport

This module is a mixin that provides support for “instance events”.

Public Instance Methods

instance_events(all = true) click to toggle source
# File lib/unobservable.rb, line 72
def instance_events(all = true)
  Unobservable.instance_events_for(self, all)
end

Private Instance Methods

attr_event(*names) click to toggle source

This helper method is similar to attr_reader and attr_accessor. It allows for instance events to be declared inside the body of the class.

# File lib/unobservable.rb, line 102
def attr_event(*names)
  args = (names[-1].is_a? Hash) ? names.pop : {}
  names.each {|n| define_event(n, args) }
  return nil
end
define_event(name, args = {}) click to toggle source
# File lib/unobservable.rb, line 80
def define_event(name, args = {})
  args = {:create_method => true}.merge(args)
  name = name.to_sym
  
  if args[:create_method]
    define_method name do
      return event(name)
    end
  end
  
  @unobservable_instance_events ||= Set.new
  if @unobservable_instance_events.include? name
    return false
  else
    @unobservable_instance_events.add name
    return true
  end
end