Advertisement
Guest User

Untitled

a guest
Jul 7th, 2015
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.44 KB | None | 0 0
  1. # PublicActivity Concern to allow custom activities to be created when certain triggers occur.
  2. #
  3. # Usage Example:
  4. #
  5. # class Challenge < ActiveRecord::Base
  6. # include Eventable
  7. # eventable :after_save => [{
  8. # key: 'challenge.after_publish',
  9. # when: "self.public_changed? && self.public?",
  10. # recipients: 'self.potential_members'
  11. # },
  12. # {
  13. # key: 'challenge.winners_chosen',
  14. # when: "self.status_id_changed? && self.status == 'Winners Chosen'",
  15. # recipients: 'self.entrants'
  16. # },
  17. # {
  18. # key: 'challenge.closed',
  19. # when: "self.status_id_changed? && self.status == 'Closed'",
  20. # recipients: 'self.potential_members'
  21. # }]
  22.  
  23. module Eventable
  24. extend ActiveSupport::Concern
  25.  
  26. module ClassMethods
  27. def eventable(*arr)
  28. arr.each do |options|
  29. options.keys.each do |kallback|
  30. define_method "eventable_#{kallback}" do
  31. self.instance_variable_set("@_#{kallback}_hooks", options[kallback])
  32. end
  33. self.send(kallback, proc { self.send(:process_events_for, self.send("eventable_#{kallback}"))})
  34. end
  35. end
  36. end
  37. end
  38.  
  39. included do
  40. include PublicActivity::Common
  41. end
  42.  
  43. def process_events_for(arr)
  44. arr.each do |a|
  45. if a[:when].nil? || eval(a[:when])
  46. (eval(a[:recipients]) || []).each do |recipient|
  47. self.create_activity key: a[:key], owner: self, recipient: recipient, parameters: a[:parameters] || {}
  48. end
  49. end
  50. end
  51. end
  52. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement