Module: FayeRails::Controller::ObserverFactory

Defined in:
lib/faye-rails/controller/observer_factory.rb

Overview

Define callbacks into any ORM model.

Class Method Summary collapse

Class Method Details

.define(klass, method_name, &block) ⇒ Object

Create


10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/faye-rails/controller/observer_factory.rb', line 10

def self.define(klass, method_name, &block)
  # Make a name for the callback module
  
  klass_callbacks_name = "#{klass.name}Callbacks"

  # Load the callback module if exists
  unless (klass_callbacks = ObserverFactory.observer(klass_callbacks_name))
    # Define callback module if one does not exist
    klass_parent = klass.parent
    demodulized_callbacks_name = klass_callbacks_name.demodulize
    klass_callbacks = klass_parent.const_set(demodulized_callbacks_name, Module.new)
  end

  # Add the method to the observer
  klass_callbacks.instance_eval do
    define_method(method_name, &block)
  end

  # Bind model callback
  klass.send(method_name, klass_callbacks.extend(klass_callbacks))
end

.observer(module_name) ⇒ Object


32
33
34
35
36
37
38
# File 'lib/faye-rails/controller/observer_factory.rb', line 32

def self.observer(module_name)
  ref = module_name.constantize
  return ref if ref.is_a?(Module)
  nil
rescue
  nil
end