From 5c4c1ce2b68a6d6dd65f11899deb4525e2dd1e37 Mon Sep 17 00:00:00 2001 From: Thibaut Date: Sun, 22 Mar 2015 10:29:20 -0400 Subject: [PATCH] Log entries/types/files diff in docs:generate command --- lib/docs/core/doc.rb | 13 ++++++-- lib/docs/subscribers/doc_subscriber.rb | 43 ++++++++++++++++++++++++++ lib/tasks/docs.thor | 2 +- 3 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 lib/docs/subscribers/doc_subscriber.rb diff --git a/lib/docs/core/doc.rb b/lib/docs/core/doc.rb index 124fb726..1331a821 100644 --- a/lib/docs/core/doc.rb +++ b/lib/docs/core/doc.rb @@ -4,6 +4,8 @@ module Docs DB_FILENAME = 'db.json' class << self + include Instrumentable + attr_accessor :name, :slug, :type, :version, :abstract, :links def inherited(subclass) @@ -63,8 +65,8 @@ module Docs end if index.present? - store.write INDEX_FILENAME, index.to_json - store.write DB_FILENAME, pages.to_json + store_index(store, INDEX_FILENAME, index) + store_index(store, DB_FILENAME, pages) true else false @@ -77,6 +79,13 @@ module Docs def store_page?(page) page[:entries].present? end + + def store_index(store, filename, index) + old_json = store.read(filename) || '{}' + new_json = index.to_json + instrument "#{filename.remove('.json')}.doc", before: old_json, after: new_json + store.write(filename, new_json) + end end def initialize diff --git a/lib/docs/subscribers/doc_subscriber.rb b/lib/docs/subscribers/doc_subscriber.rb new file mode 100644 index 00000000..19950836 --- /dev/null +++ b/lib/docs/subscribers/doc_subscriber.rb @@ -0,0 +1,43 @@ +module Docs + class DocSubscriber < Subscriber + self.namespace = 'doc' + + def index(event) + before, after = parse_payload(event) + log "Entries:" + log_diff before['entries'], after['entries'], 'name' + log "Types:" + log_diff before['types'], after['types'], 'name' + end + + def db(event) + before, after = parse_payload(event) + log "Files:" + log_diff before.keys, after.keys + end + + private + + def parse_payload(event) + [JSON.parse(event.payload[:before]), JSON.parse(event.payload[:after])] + end + + def log_diff(before, after, prop = nil) + before ||= [] + after ||= [] + + if prop + before = before.map { |obj| obj[prop] } + after = after.map { |obj| obj[prop] } + end + + created, updated, deleted = (after - before), (before & after), (before - after) + + log " Updated: #{updated.length}" + log " Created: #{created.length}" + created.each { |str| log " + #{str}" } + log " Deleted: #{deleted.length}" + deleted.each { |str| log " - #{str}" } + end + end +end diff --git a/lib/tasks/docs.thor b/lib/tasks/docs.thor index d44f7efc..8b1b7901 100644 --- a/lib/tasks/docs.thor +++ b/lib/tasks/docs.thor @@ -50,7 +50,7 @@ class DocsCLI < Thor def generate(name) Docs.install_report :store if options[:verbose] Docs.install_report :scraper if options[:debug] - Docs.install_report :progress_bar if $stdout.tty? + Docs.install_report :progress_bar, :doc if $stdout.tty? unless options[:force] puts <<-TEXT.strip_heredoc