doc_subscriber.rb 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  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. private
  17. def parse_payload(event)
  18. [JSON.parse(event.payload[:before]), JSON.parse(event.payload[:after])]
  19. end
  20. def log_diff(before, after, prop = nil)
  21. before ||= []
  22. after ||= []
  23. if prop
  24. before = before.map { |obj| obj[prop] }
  25. after = after.map { |obj| obj[prop] }
  26. end
  27. created, updated, deleted = (after - before), (before & after), (before - after)
  28. log " Updated: #{updated.length}"
  29. log " Created: #{created.length}"
  30. created.each { |str| log " + #{str}" }
  31. log " Deleted: #{deleted.length}"
  32. deleted.each { |str| log " - #{str}" }
  33. end
  34. end
  35. end