Guest User

Untitled

a guest
Feb 16th, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.36 KB | None | 0 0
  1. module RJ
  2. module Utils
  3. module Commands
  4. module Notifications
  5. extend ActiveSupport::Concern
  6.  
  7. module ClassMethods
  8. def observer(*observer_methods, of_event: :success)
  9. observer_methods.each do |observer|
  10. observers[of_event] ||= Set.new
  11. observers[of_event] << observer
  12. end
  13. end
  14.  
  15. def observers
  16. @observers ||= {}
  17. end
  18. end
  19.  
  20. def notify_observers(of_event: :success)
  21. observers_array.each { |observer| safe_call observer }
  22.  
  23. rescue StandardError => e
  24. Rails.logger.warn "#{self.class} observers failed with #{e.message}"
  25. Rails.logger.debug e.backtrace.join("\n")
  26. end
  27.  
  28. def observers
  29. @observers ||=
  30. self.class.observers.each_with_object({}) do |(event, observer_methods), observers|
  31. observer_methods.each do |meth|
  32. observers[event] ||= Set.new
  33. observers[event] << send(meth)
  34. end
  35. end
  36. end
  37.  
  38.  
  39. private
  40.  
  41. def observers_array(of_event: :success)
  42. Array(observers[of_event]).compact
  43. end
  44.  
  45. def safe_call(observer)
  46. if observer.respond_to?(:call)
  47. observer.call
  48. else
  49. send observer
  50. end
  51. end
  52. end
  53. end
  54. end
  55. end
Add Comment
Please, Sign In to add comment