Log entries/types/files diff in docs:generate command

pull/185/head
Thibaut 10 years ago
parent c4735102d7
commit 5c4c1ce2b6

@ -4,6 +4,8 @@ module Docs
DB_FILENAME = 'db.json' DB_FILENAME = 'db.json'
class << self class << self
include Instrumentable
attr_accessor :name, :slug, :type, :version, :abstract, :links attr_accessor :name, :slug, :type, :version, :abstract, :links
def inherited(subclass) def inherited(subclass)
@ -63,8 +65,8 @@ module Docs
end end
if index.present? if index.present?
store.write INDEX_FILENAME, index.to_json store_index(store, INDEX_FILENAME, index)
store.write DB_FILENAME, pages.to_json store_index(store, DB_FILENAME, pages)
true true
else else
false false
@ -77,6 +79,13 @@ module Docs
def store_page?(page) def store_page?(page)
page[:entries].present? page[:entries].present?
end 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 end
def initialize def initialize

@ -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

@ -50,7 +50,7 @@ class DocsCLI < Thor
def generate(name) def generate(name)
Docs.install_report :store if options[:verbose] Docs.install_report :store if options[:verbose]
Docs.install_report :scraper if options[:debug] 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] unless options[:force]
puts <<-TEXT.strip_heredoc puts <<-TEXT.strip_heredoc

Loading…
Cancel
Save