Class: Syncro::Scriber::Observer
- Inherits:
-
Object
- Object
- Syncro::Scriber::Observer
- Includes:
- Singleton
- Defined in:
- lib/syncro/scriber/observer.rb
Class Method Summary collapse
Instance Method Summary collapse
- #add_observer!(klass) ⇒ Object
- #after_create(rec) ⇒ Object
- #after_destroy(rec) ⇒ Object
- #after_update(rec) ⇒ Object
-
#observed_class_inherited(subclass) ⇒ Object
:nodoc:.
-
#update(observed_method, object) ⇒ Object
:nodoc:.
Class Method Details
.from(client, &block) ⇒ Object
18 19 20 21 22 23 |
# File 'lib/syncro/scriber/observer.rb', line 18 def from(client, &block) @from_client = client result = yield @from_client = nil result end |
.from_client ⇒ Object
14 15 16 |
# File 'lib/syncro/scriber/observer.rb', line 14 def from_client @from_client end |
.method_added(method) ⇒ Object
9 10 11 12 |
# File 'lib/syncro/scriber/observer.rb', line 9 def method_added(method) return unless defined?(ActiveRecord) self.observed_methods += [method] if ActiveRecord::Callbacks::CALLBACKS.include?(method.to_sym) end |
Instance Method Details
#add_observer!(klass) ⇒ Object
71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/syncro/scriber/observer.rb', line 71 def add_observer!(klass) klass.add_observer(self) # For ActiveRecord self.class.observed_methods.each do |method| callback = :"_notify_observers_for_#{method}" if (klass.instance_methods & [callback, callback.to_s]).empty? klass.class_eval "def #{callback}; notify_observers(:#{method}); end" klass.send(method, callback) end end end |
#after_create(rec) ⇒ Object
26 27 28 29 30 31 32 33 |
# File 'lib/syncro/scriber/observer.rb', line 26 def after_create(rec) rec.class.record( :create, :data => rec.attributes, :clients => active_clients(rec), :from_client => from_client ) end |
#after_destroy(rec) ⇒ Object
48 49 50 51 52 53 54 55 |
# File 'lib/syncro/scriber/observer.rb', line 48 def after_destroy(rec) rec.class.record( :destroy, :data => [rec.id], :clients => active_clients(rec), :from_client => from_client ) end |
#after_update(rec) ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/syncro/scriber/observer.rb', line 35 def after_update(rec) changed_to = rec.changes.inject({}) {|hash, (key, (from, to))| hash[key] = to hash } rec.class.record( :update, :data => [rec.id, changed_to], :clients => active_clients(rec), :from_client => from_client ) end |
#observed_class_inherited(subclass) ⇒ Object
:nodoc:
67 68 69 |
# File 'lib/syncro/scriber/observer.rb', line 67 def observed_class_inherited(subclass) #:nodoc: subclass.add_observer(self) end |
#update(observed_method, object) ⇒ Object
:nodoc:
57 58 59 60 61 62 63 64 65 |
# File 'lib/syncro/scriber/observer.rb', line 57 def update(observed_method, object) #:nodoc: return unless respond_to?(observed_method) return unless allowed?(object, observed_method) # Is sending to clients disabled, or no clients specified? return unless scribe_clients(object) # Clients specified, but no non-disabled clients to send too return if scribe_clients(object).any? && active_clients(object).empty? send(observed_method, object) end |