doc_subscriber.rb 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. module Docs
  2. class DocSubscriber < Subscriber
  3. self.namespace = 'doc'
  4. def index(event)
  5. before, after = parse_payload(event)
  6. log "Entries:"
  7. log_diff before['entries'], after['entries'], 'name'
  8. log "Types:"
  9. log_diff before['types'], after['types'], 'name'
  10. end
  11. def db(event)
  12. before, after = parse_payload(event)
  13. log "Files:"
  14. log_diff before.keys, after.keys
  15. end
  16. def info(event)
  17. log event.payload[:msg]
  18. end
  19. private
  20. def parse_payload(event)
  21. [JSON.parse(event.payload[:before]), JSON.parse(event.payload[:after])]
  22. end
  23. def log_diff(before, after, prop = nil)
  24. before ||= []
  25. after ||= []
  26. if prop
  27. before = before.map { |obj| obj[prop] }
  28. after = after.map { |obj| obj[prop] }
  29. end
  30. created, updated, deleted = (after - before), (before & after), (before - after)
  31. log " Updated: #{updated.length}"
  32. log " Created: #{created.length}"
  33. created.each { |str| log " + #{str}" }
  34. log " Deleted: #{deleted.length}"
  35. deleted.each { |str| log " - #{str}" }
  36. end
  37. end
  38. end